Ossian Story
article thumbnail

[CentOS] THP(Transparent Huge Pages) 란?

 

THP(Transparent Huge Pages) 란?

 

Redis를 설치하다 보면 THP를 Disable 하라는 경고 메시지를 보게 됩니다.
THP를 비활성화 하려해도 잘 진행되지 않아 THP라는 것이 어떠한 역할을 하는지 알아보았습니다. 

 

 

1. CPU는 Memory에 데이터를 요청할 때 Virtual address로 요청합니다.

 

2. MMU가 Virtual address를 Physical address로 변환을 하여 엑세스를 합니다.
    - MMU는 Page Table을 참조하여 Virtual address와 Physical address를 변환합니다.
    - Virtual address와 Physical address를 매핑 해주는 테이블이 Page Table입니다.
    - Page Table의 위치 정보를 담은 곳이 TTB 입니다.

 

3. CPU가 매번 MMU와 TTB를 통해 데이터를 가져오게 되면 속도가 느립니다.
Virtual address와 Physical address의 매핑 정보를 가진 캐시가 있다면 메모리를 거치지 않아도 되기 때문에 데이터를 가져오는 속도가 빨라질 것입니다. 이러한 캐시 역할을 하는 것이 TLB 입니다. 즉, TLB는 CPU가 빠르게 데이터를 가져오기 위해 Vritual address와 Physical address 간의 매핑 정보를 가진 캐시 공간 입니다.

 

4. 하지만 원래의 THP의 의도와는 다르게 시스템의 성능을 저하되는 경우가 많아 THP를 비활성화 하는 것을 권장합니다.


THP(Transparent Huge Pages) 설정 확인

 

Redis를 설치하다 보면 THP를 Disable 하라는 경고 메시지를 보게 됩니다. THP의 비활성화 하는 방법을 알아보겠습니다.아래의 명령어를 통해 THP의 상태를 확인할 수 있습니다.

$> cat /sys/kernel/mm/transparent_hugepage/enabled​

 

출력값에서 대괄호가 always에 있을 경우 THP가 활성화 되어 있는 상태입니다.

[always] madvise never

 

출력값에서 대괄호과 naver에 있을 경우 THP가 비 활성화 되어 있는 상태입니다.

always madvise [never]

THP(Transparent Huge Pages) 비활성화 방법

 

THP를 비활성화 하기 위해선 새로운 Tuned Profile을 만든 후 Active 상태로 설정합니다.
원하는 프로필 명으로 "/etc/tuned/" 경로에 디렉토리를 생성합니다. 

$> mkdir /etc/tuned/transparent_hugepage​

 

새로 생성된 디렉토리에 "tuned.conf" 파일을 생성합니다.

$> vi /etc/tuned/transparent_hugepage/tuned.conf

 

"tuned.conf" 파일에 아래와 같이 작성한 후 저장합니다.

[main]
include= throughput-performance
[vm]
transparent_hugepages=never​

 

생성한 "utned.conf" 파일에 실행권한을 부여합니다.

$> chmod +x /etc/tuned/transparent_hugepage/tuned.conf

 

생성한 "transparent_hugepage" Profile을 활성화 합니다.

$> tuned-adm profile transparent_hugepage​

 

/etc/sysconfig/grub 파일을 vi 편집기로 Open 합니다.

$> vi /etc/sysconfig/grub​

 

GRUB_CMDLINE_LINUX의 맨 뒤에 transparent_hugepage=naver 추가합니다.

GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --speed=38400"
GRUB_CMDLINE_LINUX="crashkernel=auto console=ttyS0,38400n8 transparent_hugepage=never"
GRUB_DISABLE_RECOVERY="true"​

 

grub2-mkconfig를 통해 grub.cfg 파일을 재생성 합니다.

$> grub2-mkconfig -o /boot/grub2/grub.cfg​

 

변경된 내용을 적용하기 위해 서버를 재부팅합니다.

$> init 6​

 

재부팅 완료 후 아래의 명령어를 통해 "transparent_hugepage=naver" 내용이 포함되어 있으면 설정이 정상적으로 적용된 것입니다.

$> sudo cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-3.10.0-693.5.2.el7.x86_64 root=UUID=d7a7326c-5dee-43e8-bc42-f13ee68e67e8 ro crashkernel=auto console=ttyS0,38400n8 transparent_hugepage=never​

 

추가적으로 아래의 명령어를 통해 Huge 관련 크기가 0인지 확인합니다.

$> cat /proc/meminfo | grep Huge
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0​

 

참고사이트
http://allthatlinux.com/dokuwiki/doku.php?id=thp_transparent_huge_pages_%EA%B8%B0%EB%8A%A5%EA%B3%BC_%EC%84%A4%EC%A0%95_%EB%B0%A9%EB%B2%95

THP에 대해 자세히 알게 해주셔서 너무나 감사합니다.

 

thp_transparent_huge_pages_기능과_설정_방법 [AllThatLinux!]

리눅스 THP 기능에 관련하여 공식 문서들에는 기능에 대한 정의만 설명되어 있고 정확히 어떤 방식으로 어떤 기능을 하는 것인지는 설명되어 있지 않아 자세히 설명드리겠습니다. 페이지는 메모

allthatlinux.com

 

profile

Ossian Story

@ossians