Appendix E. HugePage 설정 방법

내용 목차

E.1. Linux
E.1.1. 활성화
E.1.2. 비활성화
E.2. AIX
E.2.1. 활성화
E.2.2. 비활성화
E.3. Solaris
E.3.1. 활성화
E.3.2. 비활성화
E.4. 권장 설정

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

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

주의

Linux 환경의 경우, OS 상의 메모리 사용 패턴에 따라 자동으로 메모리 페이지 단위를 높여주는 THP(Transparent Huge Pages)라는 기능을 지원한다.

THP 기능을 활성화할 경우 공유 메모리 뿐만 아니라 프로세스 메모리까지 HugePage로 동작하기 때문에 성능 저하가 발생할 수 있다. 따라서 해당 커널 파라미터를 never로 설정하여 THP 기능을 비활성화하는 것을 권장한다.

HugePage를 활성화하기 위한 설정 방법은 다음과 같다.

  1. 현재 운영체제에서 지원하는 HugePage의 크기를 다음과 같이 확인한다.

    $ grep Hugepagesize /proc/meminfo
    Hugepagesize:     2048 KB
  2. Tibero를 운영하는 유저 그룹의 아이디를 다음과 같이 확인한다.

    $ id -a
    uid=579(tibero) gid=579(tibero) groups=579(tibero)
  3. HugePage를 할당할 그룹과 개수를 "/etc/sysctl.conf"에 적용한다.

    커널 파라미터설명공식
    vm.nr_hugepagesHugePage 개수최소 [TOTAL_SHM_SIZE / HugePage 크기] 이상
    vm.hugetlb_shm_groupHugePage를 할당할 그룹 아이디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
  4. Max locked memory 제한값을 "/etc/security/limits.conf"에 적용한다.

    설정값공식
    memlockHugePage 크기 * HugePage 개수

    다음은 앞에서 구한 값으로 memlock 값을 설정한 예제이다.

    $ cat /etc/security/limits.conf
    ......중간 생략......
    tibero           soft    memlock         1048576   
    tibero           hard    memlock         1048576
  5. 운영체제를 재시작한다.

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

    $ egrep -e HugePages_Total /proc/meminfo
    HugePages_Total:   512 KB
  6. 환경설정 파일(.tip)에 다음과 같은 Tibero 초기화 파라미터를 설정한다.

    초기화 파라미터설정값
    TOTAL_SHM_SIZEHugePage 크기 * HugePage 개수
    USE_HUGE_PAGEY

    다음은 앞에서 구한 값으로 초기화 파라미터를 설정한 예제이다.

    $ cat tibero.tip
    ......중간 생략......
    TOTAL_SHM_SIZE=1G 
    USE_HUGE_PAGE=Y
  7. 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).

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_SIZE1GB(기본값)
    USE_HUGE_PAGEY

    다음은 앞에서 구한 값으로 초기화 파라미터를 설정한 예제이다.

    $ 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).

ISM(Intimate Shared Memory) 기능을 통해서 HugePage 기능을 적용할 수 있다. Solaris에서는 HugePage 대신 Lage page라는 동일한 의미의 용어를 대신 사용한다. ISM을 사용할 때의 이점은 아래와 같다.

  • ISM 공유 메모리는 생성될 때 자동으로 운영체제에 의해서 locked 상태가 된다. 이를 통해 해당 메모리 영역이 디스크로 스왑되지 않도록 보장하며, 운영체제 커널 내부에서 I/O를 위해 더 빠르게 동작하는 locking 매커니즘을 사용할 수 있게 된다.

  • 커널의 가상 메모리를 주소와 물리 메모리 주소 간 변환을 위한 메모리 구조를 여러 프로세스 사이에서 공유하게되므로, CPU 소모 시간을 줄이고 커널 메모리 공간을 절약할 수 있다.

  • 시스템의 MMU(Memory Management Unit)에서 지원하는 Large page가 자동으로 ISM 메모리 세그먼트에 할당된다. 이를 통해 page 관리를 위한 메모리 공간이 절약되고, 가상 메모리 주소 변환이 간단해지므로 시스템 성능을 향상시킬 수 있다.

Tibero에서 Hugepage 크기에 대한 제약은 없으며, 각 OS에서 지원하는 범위 내에서 설정할 수 있다. 내부적으로 권장하는 크기는 다음과 같다.

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

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