Tagged: System

x86_64 시스템에서 4MB 크기 HugePageSize 변경 불가.

HugePage 는 Linux 의 기본 메모리 페이지 크기인 4K(4096) 가 아닌 더 큰 페이지를 사용하도록함으로서 잦은 메모리 액세스를 줄여 자원 소모를 줄이게 해준다.

최신의 Linux 는 전부 이것을 지원하며 다음과 같이 확인 할 수 있다.

기본 메모리 페이지는 Hugepagesize 인 2MB(2048kb) 임을 확인할 수 있다.

그런데, 이 메모리 페이지 크기를 바꿀 수 있지 않을까? 결론부터 말하면 불가능하다.

이 Hugepagesize 는 CPU 지원에 의존한다.

  • 2MB – cpu에 ‘pse’ 가 지원되면 된다.
  • 1G – cpu 가 ‘pdpe1gb’ 가 지원되면 된다.

최신의 CPU 는 위 두가지 ‘pse’, ‘pdpe1gb’ 를 모두 지원한다. 1GB 의 메모리 페이지를 지원한다. 하지만 4MB 의 메모리 페이지를 지원하지 않는다. 그렇다면 왜 이 글을 쓰는가? 이유는 MySQL 문서 때문이다.

shell> cat /proc/meminfo | grep -i huge
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 4096 kB

https://dev.mysql.com/doc/refman/5.7/en/large-page-support.html

MySQL 문서를 보면 위와 같이 4096Kb 라고 나온다. 하지만 x86_64 시스템에서는 절대로 4096kb 가 될수가 없다. 2MB 아니면 1GB 만 가능하다.

혹시나 해서 이것을 바꾸기 위해서 다음과 같이 부팅 파라메터를 주고 재부팅을 해뒀다.

하지만 부팅 메시지에 다음과 같이 나온다.

지원하지 않는다는 메시지를 보여준다.

결론은 Hugepagesize 는 CPU 에서 지원해줘야 하는 것이며 최신의 x86_64 의 경우 2MB, 1GB 두가지만 지원한다.

Linux PAGE_SIZE 그리고 HugePage

 

다음의 글이 도움이 될 듯 싶다.

Kernel hugepages does not alter the calculation of SHMMAX, which you need to set large enough to fit your largest Oracle SGA. SHMMAX applies to SYS V shared memory, which can be hugepages or use conventional 4K memory pages. SHMMAX is not relevant when you use /dev/shm POSIX shared memory (Oracle AMM).

The Oracle database requires shared memory for the SGA. This can be Sys V (IPC) or POSIX /dev/shm.

Shared memory and semaphores, and the SHM kernel parameters, belong to System V IPC, which can be monitored using the ipcs command. Sys V shared memory can be configured to be 2 MB kernel hugepages, or use the default 4 KB memory pages. Kernel hugepages can drastically reduce the memory requirements for managing required memory pages and make better use of the TLB buffer.

The SHMMAX parameter is used to define the maximum size (in bytes) for a shared memory segment and should be set large enough for the largest SGA size. If the SHMMAX is set incorrectly, for example too low, you may receive the following error: ORA-27123: unable to attach to shared memory segment.

SHMMAX for a server that runs Oracle database is typically set to 4 TB or whatever the platform being x86 or x64 theoretically supports. The parameter is a safeguard parameter. A process cannot use more shared memory than available. Obviously this is not considered a risk when using a dedicated server for running Oracle database.

POSIX shared memory maps shared memory to files using a virtual shared memory filesystem in RAM. It uses /dev/shm and applies when configuring the Oracle database to use Automatic Memory Management (AMM). An Oracle instance can use either Sys V shared memory including kernel hugepages or /dev/shm for SGA, but not both at the same time. You can however use different shared memory concepts for different Oracle instances on the same server. For example, running an +ASM instance using AMM and another Oracle database instance using ASMM.

https://community.oracle.com/thread/3828422

XFS 마운트 옵션.

XFS 파일 시스템은 요즘에 들어서 많이 사용되는 파일 시스템입니다. SGI 회사에서 개발한 것으로 대용량 파일 시스템으로 특화되어 있습니다. 최근들어 Big Data 가 대두되면서 스토리지 용량이 대용량화 되면서 XFS 가 떠오르는데, CentOS 7 배포판은 기본 파일시스템으로 XFS 가 되었습니다.

XFS 는 옵션들이 많이 있는데, 보통 대용량으로 많이 사용할 경우에 다음과 같은 옵션을 주로 많이 사용합니다.

 

KVM에 Bridge Network 설정

CentOS 6 에는 가상화로 KVM만 지원합니다. Xen은 빼버렸습니다. 가상화로 KVM을 하게되면 사용할 수 있게됩니다. 그런데, KVM을 활성화하게 되면 virbr0 라는 가상의 이더넷이 생성이되는데 이것이 NAT로 동작하게 됩니다. 그러니까 KVM의 게스트들은 virbr0 의 NAT를 이용해서 인터넷을 하게 되는 것입니다.

그런데 제가 집에서 사용하는 인터넷 사용환경은 공유기를 이용해서 각 피시에서 private ip 주소를 할당해서 사용합니다. 그래서 KVM의 게스트들도 직접 공유기로 부터 private ip 주소를 할당 받기를 원했습니다. 그렇게 하기위해서는 virbr0 를 NAT를 정지시키고 br0 을 만들어서 eth0와 br0를 Bridged 시키면 됩니다.

이 문서는 이것을 설명한 것입니다.

처음 KVM을 설치해서 보면 다음과 같이 나옵니다. NAT로 동작하고 있다는 증거입니다.

Bridged 로 바꿔보겠습니다. 절차는 다음과 같습니다.

  1. virbr0 를 지웁니다.
  2. eth0 에 dhcp 기능을 지우고 br0 로 Bridged 한다.
  3. br0 만드는데, dhcp 로 아이피를 새로 받도록 한다. TYPE 를 Bridged 로 해준다.

Virbr0 를 지운다. 

버추얼쉘(virsh) 명령어를 이용해 네트워크 리스트를 봅니다.

버추얼 네트워크 이름이 ‘default’로 나오네요. 이것을 지우겠습니다.

eth0 의 dhcp 를 지우고 br0 로 Bridged 한다.

다음과 같이 합니다.

br0 를 만든다.

다음과 같이 합니다.

위과정을 거치면 설정은 끝납니다. 한가지 더 있는데, 리눅스의 NetworkManager 데몬을 꺼주고 network 서비스를 다시 올려줍니다.

이제 virt-manager 로 KVM 게스트를 설치할 다음과 같이 이더넷을 설정해 주면 됩니다.

Virt-Manager 에서 Br0 설정