본문 바로가기
Linux/Linux

Linux) Hugepages 설정

by LILO 2022. 10. 22.
반응형

INTRO

DB, DPDK 등 Application을 설치하기 전 OS에 Hugepage를 설정하여 Application의 성능 저하를 막거나 성능 향상을 위해 Hugepage 설정을 하기도 합니다.

 

리눅스의 경우 영구 적용을 위해 몇가지의 방법이 있는 것으로 아는데 그 중 가장 많이 알려져있는 grub.cfg에 매개변수를 추가하여 영구 적용을 하는 방법을 사용하려고 합니다.

 

 

Huge page 설정하면 무조건 좋을까?

Huge page 설정에 대한 TIP에 대해 search를 하던 중 IBM에서 올린 support 글을 보았는데 Hugepage를 설정하기 전에 어떠한 점을 조심해야되는지에 대해 작성이 되어있는 것을 확인하였고 많은 도움이 되어 링크 공유합니다.

 

Benefits of Huge Pages

 

www.ibm.com

 

추가로 Huge Page에 대한 설명은 아래의 링크들을 참고하였습니다.

 

HugePage 란 tag - Voyager of Linux

01/26/2021 Oracle, MariadB, MySQL 등과 같은 관계형 데이터베이스를 다루다보면 시스템 튜닝에 대해서 많이 접하게 된다. 특히나 리눅스 시스템에서 이들 데이터베이스 시스템이 제대로 작동하기 위한

linux.systemv.pe.kr

 

HugeTLB Pages — The Linux Kernel documentation

HugeTLB Pages Overview The intent of this file is to give a brief summary of hugetlbpage support in the Linux kernel. This support is built on top of multiple page size support that is provided by most modern architectures. For example, x86 CPUs normally s

docs.kernel.org

 

Huge page 설정시 장단점은 아래와 같습니다.

1. 장점
- 기본페이지 단위인 4096 Byte(4K)보다 많은 2M, 1G를 할당 가능
- 2M, 1G를 할당할 경우 페이지 단위 크기가 커지기 때문에 조회해야 될 페이지 개수 줄어서 성능 향상이 됨
EX) Memory 128GB : (4K: 32,000,000개 , 2M: 64,000개, 1G: 128개)

2. 단점
- 수행 중인 APP이 Huge page를 사용하지 않는다면 메모리 조각화 발생할 수도 있음
(APP에 대한 Huge page 사용 Reference가 많지 않는 경우는 여유 시간을 두고 성능 테스트가 필요함)

 

 

 

Huge page 설정 in RHEL 

Huge page 설정에 대한 방법은 여러가지가 있지만 서버 재기동시에도 확실하게 적용될 수 있게 grub 매개변수에 추가하여 진행하는 방법으로 진행하려고 합니다.

 

해당 방법의 특이사항으로는 grub 매개변수에 추가 후에 설정을 반영하려면 OS를 재기동해야된다는 점입니다.

 

 

Hugepage 설정을 grub 매개변수에 추가하기 전에 문제가 생겼을 때 원복할 수 있도록 grub 파일 백업을 진행합니다.

# cp /etc/default/grub  /etc/default/grub_$(date +%y%m%d)

 

Hugepage를 설정하기 위해 grub 설정 파일에서 hugepage 관련 매개변수를 추가합니다.

## <원본>
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"


## <설정 후>
# vi /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet default_hugepagesz=1G hugepagesz=1G hugepages=20 transparent_hugepage=never"
GRUB_DISABLE_RECOVERY="true"
- default_hugepagesz  :  Hugepage 기본 페이지 크기
- hugepagesz   :  Hugepage 크기
- hugepages     :  Hugepage 개수
- transparent_hugepage=never      :  THP 비활성화

 

 

설정한 매개변수를 반영하기 위해 아래의 명령어를 수행합니다.

해당 명령어를 수행하기 전 해당 서버의 부팅 Mode가 Legacy인지 UEFI인지 알고 있어야됩니다.

(# ls -l /sys/firmware/efi   or   # dmesg |grep -i efi  or  # df -h /boot/efi)

<Legacy 부팅 모드>
# grub2-mkconfig -o /boot/grub2/grub.cfg

<UEFI 부팅 모드>
# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

 

grub에 설정한 값들은 부팅시에 적용되는 값으로 Hugepage가 적용되었는지 확인하려면 OS 재기동이 필요합니다.

# reboot

 

OS가 정상적으로 부팅이 되면 Hugepage가 잘 설정되었는지 확인합니다.

이전의 설정한 Hugepage 1G의 개수가 20개인지 확인합니다.

<HugePage 개수 확인>
# grep HugePages_ /proc/meminfo
HugePages_Total:      20
HugePages_Free:       20
HugePages_Rsvd:        0
HugePages_Surp:        0

# cat /proc/sys/vm/nr_hugepages
20


<THP 비활성화 확인>
# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

 

 

더 자세한 정보는 아래의 RedHat Solution을 참고하면 좋을 것 같습니다.

 

[RHEL] How do I check for hugepages usage and what is using it? - Red Hat Customer Portal

How do I check for what is using my system hugepages? How to calculate the size of hugepage used by a specified process?

access.redhat.com

 

반응형