참고 5. HugePage 설정 방법

본 부록에서는 각 운영체제별 HugePage 설정 방법에 대하여 설명합니다.

Linux

본 절에서는 Linux 환경에서 HugePage를 설정하기 위한 방법에 대하여 설명합니다. 해당 작업을 수행하기 위해서는 root 권한이 반드시 필요합니다.

활성화

HugePage를 활성화하기 위한 설정 방법은 아래와 같습니다.

  1. 현재 운영체제에서 지원하는 HugePage의 크기를 아래와 같이 확인합니다.

$ grep Hugepagesize /proc/meminfo 
Hugepagesize:	2048 KB

  1. Tibero를 운영하는 유저 그룹의 아이디를 다음과 같이 확인합니다.

$ id -a
uid=579(tibero) gid=579(tibero) groups=579(tibero)

  1. HugePage를 할당할 그룹과 개수를 "/etc/sysctl.conf"에 적용합니다.

커널 파라미터
설명
공식

vm.nr_hugepages

HugePage 개수

TOTAL_SHM_SIZE / HugePage 크기

vm.hugetlb_shm_group

HugePage를 할당할 그룹 아이디

Tibero를 운영하는 유저 그룹의 아이디

참고

DB 인스턴스만을 부팅하기 위한 vm.nr_hugepages 의 최소값이 [TOTAL_SHM_SIZE + / HugePage 크기] 이기 때문에, OS 상에 타 프로그램들이 존재하는 경우 이를 고려하여 OS 담당자와 충분한 상의 후 값을 조정 및 반영합니다.

아래는 TOTAL_SHM_SIZE의 설정값이 1024MB 이고, 현재 운영체제에서 지원하는 HugePage 크기가2MB(2048 KB)인 경우에 커널 파라미터를 적용한 예제입니다.

$ cat /etc/sysctl.conf
......중간 생략......
vm.nr_hugepages=512 
vm.hugetlb_shm_group=579

  1. Max locked memory 제한값을 "/etc/security/limits.conf"에 적용합니다.

설정값

공식

memlock

HugePage 크기 * HugePage 개수

아래는 앞에서 구한 값으로 memlock 값을 설정한 예제입니다.

$ cat /etc/security/limits.conf
......중간 생략......
tibero	soft	memlock    1048576
tibero	hard	memlock    1048576

  1. 운영체제를 재시작합니다.

아래와 같이 변경된 HugePage 값을 확인할 수 있습니다.

$ egrep -e HugePages_Total /proc/meminfo 
HugePages_Total: 512 KB

  1. 환경설정 파일(.tip)에 다음과 같은 Tibero 초기화 파라미터를 설정합니다.

초기화 파라미터

설정값

TOTAL_SHM_SIZE

HugePage 크기 * HugePage 개수

USE_HUGE_PAGE

Y

아래는 앞에서 구한 값으로 초기화 파라미터를 설정한 예제입니다.

$ cat tibero.tip
......중간 생략......
TOTAL_SHM_SIZE=1G 
USE_HUGE_PAGE=Y

  1. Tibero 서버를 재기동합니다.

$ tbdown

Tibero instance terminated (NORMAL mode).

$ tbboot
Listener port = 8629
Change core dump dir to /home/tibero/tibero7/instance/tibero.

Tibero 7

TmaxData Corporation Copyright (c) 2008-. All rights reserved. 
Tibero instance started up (NORMAL mode).

비활성화

HugePage 활성화를 위해 수행한 과정과 동일한 순서로 수정하였던 값을 되돌리는 과정을 진행합니다.


AIX

AIX에서는 HugePage 대신 Large page라는 용어를 대신 사용하며 기본적인 장점은 HugePage와 동일합니다.

활성화

HugePage를 활성화하기 위한 설정 방법은 아래와 같습니다.

1. 운영체제 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

2. 사용자 권한을 설정합니다.

보안 정책 상 root 이외의 사용자는 Large page를 사용하기 위해서 아래와 같은 권한을 Tibero 사용자에게 부여해 주어야 합니다. chuser 명령을 통해 해당 권한을 설정할 수 있습니다.

$ chuser capabilities=CAP_NUMA_ATTACH,CAP_BYPASS_RAC_VMM,CAP_PROPAGATE <user id>

3. 환경설정 파일(.tip)에 아래와 같은 Tibero 초기화 파라미터를 설정합니다.

초기화 파라미터
설정값

TOTAL_SHM_SIZE

1GB(기본값)

USE_HUGE_PAGE

Y

아래는 앞에서 구한 값으로 초기화 파라미터를 설정한 예제입니다.

$ cat tibero.tip
......중간 생략......
TOTAL_SHM_SIZE=1G 
USE_HUGE_PAGE=Y

4. Tibero 서버를 재기동합니다.

$ tbdown

Tibero instance terminated (NORMAL mode).

$ tbboot
Listener port = 8629
Change core dump dir to /home/tibero/tibero7/instance/tibero. 

Tibero 7
TmaxData Corporation Copyright (c) 2008-. All rights reserved. 
Tibero instance started up (NORMAL mode).

비활성화

Large page를 활성화면서 변경했던 값을 다시 원래대로 복구합니다.


Solaris

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 서버를 재기동합니다.

비활성화

서버 초기화 파라미터 _USE_ISM 값을 N으로 수정하고 Tibero 서버를 재기동합니다.

_USE_ISM=N


권장 설정

Tibero에서 Hugepage 크기에 대한 제약은 없으며, 각 OS에서 지원하는 범위 내에서 설정할 수 있습니다.

내부적으로 권장하는 크기는 아래와 같습니다.

  • 메모리 사이즈가 작은 경우 (64G 미만) : 4M

  • 메모리 사이즈가 큰 경우 (64G 이상) : 16M

Last updated