THP
리눅스는 Page 단위로 메모리를 관리하고 사용하는데, 기본적으로 페이지 크기는 4096 Bytes (4K)이다.
THP는 페이지 크기를 MB, GB 등으로 할당하여 사용하는 기능
RHEL 6 이후 기본적으로 활성화되어 있다.
성능 이슈로 인해 리눅스 서버의 THP 설정을 변경하고자 한다.
THP 설정 확인
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag
대괄호로 표시된 값이 현재 설정된 값이다.
THP 설정 변경 (비활성화)
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo 명령어를 이용해 설정값을 변경할 수 있다. 시스템 설정을 변경하는 것이기 때문에 root 권한이 필요하다.
참고로 명령어를 이용한 설정은 재부팅 시 휘발된다. 따라서 재부팅 이후에도 설정을 유지해야 하는 경우에는 /etc/rc.local 등에 설정 명령어를 등록하는 것이 좋다.
배경
CPU는 메모리에 데이터를 요청할 때 Virtual Address를 통해 요청한다. 이 때, MMU (Memory Management Unit)는 Virtual Address를 Physical Address로 변환하여 실제 메모리에 접근한다.
MMU : CPU가 메모리에 접근하는 것을 관리하는 부품. 메모리 관리 장치
Page Table : Virtual Address와 Physical Address 매핑한 테이블
TTB (Translation Table Base Address) : Page Table의 위치 정보가 저장된 공간
TLB (Translation Lookaside Buffer)는 TTB 역할을 하는 캐시, 즉 Virtual Address와 Physical Address 매핑 정보가 있는 캐시이다. CPU가 TTB를 거치지 않고 Physical Address를 얻을 수 있도록 하여, TTB를 통해 데이터를 가져오는 속도를 개선하기 위한 개념이다.
따라서 CPU가 Virtual Address로 메모리를 접근하려고 하면 TLB에 먼저 정보가 있는지 확인한다. 캐시에 정보가 있으면(Cache HIt) 바로 메모리에 액세스하여 데이터를 가져오고, 캐시에 정보가 없으면(Cache Miss) 그 때 TTB에 접근한다.
즉, TLB의 HIt 비율이 높아야 하며 Hit 비율이 낮으면 도리어 메모리 접근 횟수가 늘어나기 떄문에 성능 저하가 발생한다.
THP는 TLB Hit 비율을 높이기 위해서 사용하는 기능이지만, 도리어 시스템 성능이 저하되는 경우가 많다.
참고 문서
https://dailyheumsi.tistory.com/138