About Transparent Huge Page

리눅스에서 메모리를 관리할 때 사용하는 페이지의 크기는 일반적으로 4kb이다. 
이 페이지를 통해 메모리를 분할하여 관리하는데, 메모리의 크기가 커질수록 페이지 수가 많아진다.
이렇게 되면 페이지를 관리하는 TLB(Translation Lookaside Buffer)의 크기도 비례하여 커지는데 이를 방지하는 기법이 THP(Transparent Huge Page)이다.
THP를 통해 페이지의 크기를 증가시키고(기본적으로 4kb -> 2mb), 이렇게 되면 페이지의 갯수가 줄어들어 TLB의 크기도 작아지는 방식이다.

메모리가 100기가 이상인 서버급 컴퓨터에서 THP를 활용하거나, 
메모리 집약적인 워크로드를 수행하는 동작에 대해서 THP를 활용하는 경우에는 성능적으로 큰 효과가 있을 수 있지만, 
일반적으로 데스크탑 PC나 임베디드 보드의 경우에는 오히려 성능 저하를 야기할 수 있다.
때문에 리눅스가 동작하는 하드웨어의 스펙에 따라 THP를 끄는게 성능적으로 좋은 경우도 있다.

일반적인 PC급 HW나 서버급 워크스테이션에서는 THP가 조건부 적용되도록 설정되어있지만, 임베디드 보드의 경우 기본적으로 사용하는것으로 설정되어있다.

How to disable THP

# check whether enabled or disabled
cat /sys/kernel/mm/transparent_hugepage/enabled

# [always] madvise never

# always: madvise() 시스템콜에 인자로 MADV_NOHUGEPAGE 옵션을 전달하지 않은 모든 프로세스가 THP 사용
# madvise: madvise() 시스템콜에 인자로 MADV_HUGEPAGE 옵션을 전달한 프로세스가 페이지 폴트시 THP 사용
# never: 시스템에서 THP를 완전하게 비활성화

# https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/performance_tuning_guide/sect-red_hat_enterprise_linux-performance_tuning_guide-configuring_transparent_huge_pages

###############################################################

# turn off once
echo never > /sys/kernel/mm/transparent_hugepage/enabled

# turn off completely
vi /etc/systemd/system/disable-thp.service

# disable-thp.service contents
[Unit]
Description=Disable Transparent Huge Pages (THP)
DefaultDependencies=no
After=sysinit.target local-fs.target
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null'
[Install]
WantedBy=basic.target


systemctl daemon-reload
systemctl start disable-thp
cat /sys/kernel/mm/transparent_hugepage/enabled
systemctl enable disable-thp
reboot

'리눅스' 카테고리의 다른 글

How to measure code coverage using gcov  (0) 2024.04.24
get realtime output of ssh remote command  (0) 2023.11.08
Core dump not generated  (0) 2023.06.13
Linux Signal List  (0) 2021.06.10
How to use ctags  (0) 2020.11.04

+ Recent posts