내용 목차
본 장에서는 각 운영체제별 HugePage 설정 방법에 대하여 설명한다.
본 절에서는 Linux 환경에서 HugePage를 설정하기 위한 방법에 대하여 설명한다. 해당 작업을 수행하기 위해서는 root 권한이 반드시 필요하다.
HugePage를 활성화하기 위한 설정 방법은 다음과 같다.
현재 운영체제에서 지원하는 HugePage의 크기를 다음과 같이 확인한다.
$ grep Hugepagesize /proc/meminfo Hugepagesize: 2048 KB
Tibero를 운영하는 유저 그룹의 아이디를 다음과 같이 확인한다.
$ id -a uid=579(tibero) gid=579(tibero) groups=579(tibero)
HugePage를 할당할 그룹과 개수를 "/etc/sysctl.conf"에 적용한다.
커널 파라미터 | 설명 | 공식 |
---|---|---|
vm.nr_hugepages | HugePage 개수 | TOTAL_SHM_SIZE / HugePage 크기 |
vm.hugetlb_shm_group | HugePage를 할당할 그룹 아이디 | Tibero를 운영하는 유저 그룹의 아이디 |
다음은 TOTAL_SHM_SIZE의 설정 값이 1024MB 이고, 현재 운영체제에서 지원하는 HugePage 크기가 2MB(2048 KB)인 경우에 커널파라미터를 적용한 예제이다.
$ cat /etc/sysctl.conf
......중간 생략......
vm.nr_hugepages=512
vm.hugetlb_shm_group=579
Max locked memory 제한값을 "/etc/security/limits.conf"에 적용한다.
설정 값 | 공식 |
---|---|
memlock | HugePage 크기 * HugePage 개수 |
다음은 앞에서 구한 값으로 memlock 값을 설정한 예제이다.
$ cat /etc/security/limits.conf
......중간 생략......
tibero soft memlock 1048576
tibero hard memlock 1048576
운영체제를 재시작한다.
아래와 같이 변경된 HugePage 값을 확인 할 수 있다.
$ egrep -e HugePages_Total /proc/meminfo HugePages_Total: 512 KB
환경설정 파일(.tip)에 다음과 같은 Tibero 초기화 파라미터를 설정한다.
초기화 파라미터 | 설정 값 |
---|---|
TOTAL_SHM_SIZE | HugePage 크기 * HugePage 개수 |
_USE_HUGE_PAGE | Y |
다음은 앞에서 구한 값으로 초기화 파라미터를 설정한 예제이다.
$ cat tibero.tip
......중간 생략......
TOTAL_SHM_SIZE=1G
_USE_HUGE_PAGE=Y
Tibero 서버를 재기동한다.
$ tbdown Tibero instance terminated (NORMAL mode). $ tbboot Listener port = 8629 Change core dump dir to /home/tibero/tibero6/instance/tibero. Tibero 6 TmaxData Corporation Copyright (c) 2008-. All rights reserved. Tibero instance started up (NORMAL mode).
HP-UX에서는 HugePage 대신 Large page라는 용어를 대신 사용한다. 공유 메모리 영역에 대해서만 Large page를 적용하는 기능을 운영체제에서 따로 지원하지 않는 한계점이 있다.
시스템 전체에 대해서 기본 페이지 설정이 가능하며 kctune 명령으로 base_pagesize 값을 원하는 크기로 변경한 후 컴퓨터를 재시작한다. (단위: MB) 단, HP-UX PARISC 운영체제에서는 이 기능을 지원하지 않는다.
다음은 kctune 명령을 이용하여 기본 페이지 값을 설정하는 예제이다.
$ kctune base_pagesize=16
AIX에서는 HugePage 대신 Large page라는 용어를 대신 사용하며 기본적인 장점은 HugePage와 동일하다.
HugePage를 활성화하기 위한 설정 방법은 다음과 같다.
운영체제 Large page 설정값을 변경한다.
AIX는 내부적으로 4KB 및 16MB 크기의 물리 Memory Pool을 유지한다. 이 Pool의 크기는 vmo 명령을 통해 16MB Memory Pool의 크기를 변경할 수 있다. 나머지 공간은 자연스럽게 4KB로 할당된다.
AIX 5.3 이후부터는 Large page Pool이 동적으로 유지되기 때문에 변경 후 시스템을 재부팅할 필요가 없다.
먼저 공유 메모리 할당된 공간이 디스크로 스왑되지 않도록 v_pinshm 설정이 별도로 필요하다. percent_of_real_memory는 전체 메모리 중에서 TSM이 차지하는 비율을 지정한다.
$ vmo r o v_pinshm=1 $ vmo r o maxpin%=percent_of_real_memory
Large page Pool 크기를 설정한다. num_of_lage_pages는 TSM을 16MB로 나눈 값이 되며, 정수 단위로 입력한다.
$ vmo p o lgpg_regions=num_of_lage_pages o lgpg_size=16 MB
사용자 권한을 설정한다.
보안 정책 상 root 이외의 사용자는 Large page를 사용하기 위해서 아래와 같은 권한을 Tibero 사용자에게 부여해 주어야 한다. chuser 명령을 통해 해당 권한을 설정할 수 있다.
$ chuser capabilities=CAP_NUMA_ATTACH,CAP_BYPASS_RAC_VMM,CAP_PROPAGATE <user id>
환경설정 파일(.tip)에 다음과 같은 Tibero 초기화 파라미터를 설정한다.
초기화 파라미터 | 설정 값 |
---|---|
TOTAL_SHM_SIZE | 1GB(기본값) |
_USE_HUGE_PAGE | Y |
다음은 앞에서 구한 값으로 초기화 파라미터를 설정한 예제이다.
$ cat tibero.tip
......중간 생략......
TOTAL_SHM_SIZE=1G
_USE_HUGE_PAGE=Y
Tibero 서버를 재기동한다.
$ tbdown Tibero instance terminated (NORMAL mode). $ tbboot Listener port = 8629 Change core dump dir to /home/tibero/tibero6/instance/tibero. Tibero 6 TmaxData Corporation Copyright (c) 2008-. All rights reserved. Tibero instance started up (NORMAL mode).
ISM(Intimate Shared Memory) 기능을 통해서 HugePage 기능을 적용할 수 있다. Solaris에서는 HugePage 대신 Lage page라는 동일한 의미의 용어를 대신 사용한다. ISM을 사용할 때의 이점은 아래와 같다.
ISM 공유 메모리는 생성될 때 자동으로 운영체제에 의해서 locked 상태가 된다. 이를 통해 해당 메모리 영역이 디스크로 스왑되지 않도록 보장하며, 운영체제 커널 내부에서 I/O를 위해 더 빠르게 동작하는 locking 매커니즘을 사용할 수 있게 된다.
커널의 가상 메모리를 주소와 물리 메모리 주소 간 변환을 위한 메모리 구조를 여러 프로세스 사이에서 공유하게되므로, CPU 소모 시간을 줄이고 커널 메모리 공간을 절약할 수 있다.
시스템의 MMU(Memory Management Unit)에서 지원하는 Large page가 자동으로 ISM 메모리 세그먼트에 할당된다. 이를 통해 page 관리를 위한 메모리 공간이 절약되고, 가상 메모리 주소 변환이 간단해지므로 시스템 성능을 향상시킬 수 있다.
아래와 같은 서버 초기화 파라미터 설정을 통해 활성화 할 수 있다. 해당 파라미터는 Solaris에서만 유효하며 기본 값은 Y이다.
_USE_ISM=Y
이 기능을 켜면 shmget으로 공유 메모리를 만들고, shmat로 attach할 때 SHM_SHARED_MMU라는 옵션이 추가된다. 서버 프로세스와 리스너 프로세스에만 한정되어 적용되며, 서버의 TSM을 attach하는 클라이언트 모듈은 이 옵션을 적용하지 않는다. 만약, 해당 파라미터의 설정 값이 Y가 아닌 경우에는 Y로 수정하고 Tibero 서버를 재기동한다.