Amazon EC2 Linux 인스턴스에 HugePages를 구성하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 6월 15일

Amazon Elastic Compute Cloud(Amazon EC2) Linux 인스턴스에서 호스팅되는 데이터베이스 또는 애플리케이션의 성능을 개선하려고 합니다. 인스턴스에 HugePage를 구성하여 성능을 개선하려면 어떻게 해야 합니까?

간략한 설명

HugePages는 기본 페이지 크기인 4KB보다 큰 메모리 페이지입니다. 대규모 애플리케이션 또는 데이터베이스 환경에 있는 Linux 인스턴스의 커널에서 HugePages를 활성화하면 TLB에 대한 부담을 줄일 수 있습니다. TLB에 대한 부담이 줄어들면 서버와 애플리케이션 또는 데이터베이스 성능이 향상됩니다. TLB에 크기가 큰 적은 수의 페이지가 저장되기 때문입니다.

예를 들어 HugePages가 구성되지 않은 인스턴스에서 TLB 항목이 512개인 경우 메모리 크기는 대략 다음과 같습니다.

4096B * 512 = 2MB 메모리 크기

HugePages가 구성된 인스턴스에서 TLB 항목이 512개인 경우 메모리 크기는 대략 다음과 같습니다.

2MB * 512 = 1GB 메모리 크기

참고: Linux 시스템에서 HugePages의 유효한 값은 2MB와 1GB입니다. 기본값은 2MB입니다.

HugePages에 대한 자세한 내용은 Oracle Help Center의 HugePages를 참조하십시오.

HugePages를 활성화하기 전에 다음 사항에 유의하십시오.

  • 시스템을 시작할 때 HugePages가 기본적으로 릴리스되지 않습니다. 시스템 시작 후 릴리스를 활성화하려면 사용 가능한 페이지 수를 수정하거나 HugePages 풀 크기를 수정합니다.
  • 시스템을 시작할 때 메모리에 적절한 할당 공간이 없는 경우 HugePages 할당이 실패합니다. hugepagesize * HugePages 수 값은 항상 인스턴스의 총 메모리보다 작아야 합니다. 사용할 수 있어야 하는 메모리 양을 파악하려면 free -m 명령을 실행하여 인스턴스의 총 메모리를 확인하십시오.
    참고: 애플리케이션 또는 데이터베이스 공급업체 또는 시스템 관리자로부터 hugepagesize 값을 확인하십시오. 예를 들어 Oracle 데이터베이스에 대해 HugePages를 활성화하려면 Oracle에서 SGA를 확인하면 됩니다. 자세한 내용은 Database Performance Tuning Guide의 Viewing SGA Memory Allocation을 참조하십시오.
  • 인스턴스의 커널에서 HugePages를 활성화하려면 인스턴스의 애플리케이션 또는 데이터베이스가 HugePages를 지원해야 합니다. 공급업체 또는 시스템 관리자에게 애플리케이션 또는 데이터베이스가 HugePages를 지원하는지 확인하십시오.

​해결 방법

참고: 프로덕션에 배포하기 전에 테스트 환경에서 HugePages를 구성하고 성능을 벤치마크 하는 것이 모범 사례입니다.

1.    커널에서 현재 HugePages가 활성화되어 있지 않은지 확인하려면 cat 명령을 실행합니다.

# sudo cat /proc/sys/vm/nr_hugepages
0

이전 예제에서 nr_hugepages 파라미터 값은 0이며, 이는 HugePages가 활성화되지 않았음을 나타냅니다.

2.    HugePages를 활성화하려면 다음 명령을 실행하여 커널 파라미터 값을 2048로 설정합니다.

# sudo sysctl -w vm.nr_hugepages=2048
vm.nr_hugepages = 2048

3.    재부팅 후 시스템이 HugePages를 할당하는지 확인하려면 /etc/sysctl.conf에 다음 항목을 추가합니다.

# sudo echo "vm.nr_hugepages=2048" >> /etc/sysctl.conf

4.    cat 명령을 실행하여 변경 사항을 확인합니다.

# sudo cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
vm.zone_reclaim_mode=1
vm.nr_hugepages=2048

5.    인스턴스를 재부팅합니다.

6.    재부팅한 후 cat 명령을 다시 실행하여 HugePages 값과 구성을 확인합니다.

# sudo cat /proc/sys/vm/nr_hugepages
2048

7.    /proc/meminfo에서 사용 가능한 HugePages를 확인합니다.

# sudo grep Huge /proc/meminfo
HugePages_Total:    2048
HugePages_Free:     2048
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

이전 예제 출력에서 각 변수의 정의는 kernel.org에서 HugePages를 참조하십시오.

이제 서버에서 HugePages가 활성화됩니다.

8.    필요에 따라 추가 애플리케이션에서 HugePages를 구성합니다.

참고: HugePages를 비활성화하려면 다음을 수행합니다.

1.    nr_hugepages를 다시 0으로 설정합니다.

2.    sysctl.conf에서 항목을 제거합니다.

3.    서버를 재부팅하여 적용합니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?