THP는 대용량 사이즈의 페이지를 응용프로그램이 필요로 할 때, 관리자의 특정한 설정 없이 가장 활성화 되어 있는 프로세서로 부터 대용량 사이즈의 페이지를 보다 쉽게 접근하도록 허용하기 위한 기능이다.
대부분의 경우 THP 기능을 사용하면 성능 향상을 기대할 수 있으나, 상황(특정 프로그램)에 따라서는 THP로 인해 System Hang 이 유발되는 경우가 있다. (DB의 경우는 더 많은 듯 하다 ...)
- 사용하지 않도록 변경하는 방법 -
아래 명령을 통해 현재 사용 중인 옵션을 확인 할 수 있다.
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
변경 >>
always madvise [never]
# cat /proc/meminfo
MemTotal: 264667788 kB
MemFree: 2308868 kB
Buffers: 2591388 kB
Cached: 26603576 kB
SwapCached: 0 kB
Active: 227425612 kB
Inactive: 30682760 kB
Active(anon): 224429252 kB
Inactive(anon): 7217284 kB
Active(file): 2996360 kB
Inactive(file): 23465476 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 2097148 kB
SwapFree: 2097048 kB
Dirty: 1772 kB
Writeback: 0 kB
AnonPages: 228908064 kB
Mapped: 3063852 kB
Shmem: 2739000 kB
Slab: 955204 kB
SReclaimable: 553600 kB
SUnreclaim: 401604 kB
KernelStack: 9408 kB
PageTables: 493132 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 134431040 kB
Committed_AS: 241550964 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 782784 kB
VmallocChunk: 34224749156 kB
HardwareCorrupted: 0 kB
AnonHugePages: 208003072 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 555248 kB
DirectMap2M: 36134912 kB
DirectMap1G: 231735296 kB
참고
Huge Pages 및 Transparent Huge Pages
https://access.redhat.com/site/documentation/ko-KR/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/s-memory-transhuge.html
메모리는 페이지 (pages)라는 블록에서 관리됩니다. 한 페이지는 4096 바이트입니다.
1MB 메모리는 256 페이지에 상응하며 1GB 메모리는 256,000 페이지에 상응합니다.
CPU에는 이러한 페이지 목록이 포함된 내장 메모리 관리 장치가 있고 각 페이지는 페이지 테이블 엔트리를 통해 참조됩니다.
대량의 메모리를 관리하기 위해 시스템을 활성화할 수 있는 다음과 같은 두 가지 방법이 있습니다:
- 하드웨어 메모리 관리 장치에서 페이지 테이블 엔트리 수를 늘림
- 페이지 크기를 확대함
현재 프로세서에 있는 하드웨어 메모리 관리 장치는 수백에서 수천 페이지 테이블 엔트리만을 지원하므로 첫 번째 방법은 비용이 많이 듭니다. 또한 수천 페이지 (메가바이트 메모리)에서 잘 작동하는 하드웨어 및 메모리 관리 알고리즘은 수백만 (심지어 수십억) 페이지에서는 실행에 어려움이 있을 수 있습니다. 이러한 경우 성능 문제를 일으킬 수 있습니다. 애플리케이션이 메모리 관리 장치가 지원하는 것 보다 많은 메모리 페이지를 사용해야 할 경우 시스템은 더 느린 소프트웨어 기반 메모리 관리로 폴백하여 시스템 전체가 더 느리게 실행됩니다.
Red Hat Enterprise Linux 6에서는 huge pages를 사용하여 두 번째 방법을 구현하고 있습니다.
간단하게 말하면 huge pages는 2MB 및 1GB 크기의 메모리 블록입니다.
2MB 페이지를 사용하는 페이지 테이블은 여러 기가 바이트의 메모리 관리에 적합한 반면 1GB 페이지의 페이지 테이블은 테라바이트 메모리 까지의 확장에 가장 적합합니다.
Huge pages는 부팅시 할당해야 합니다.
이는 수동으로 관리하기 어려우므로 효과적으로 사용하기 위해 코드를 크게 변경해야 할 경우가 많습니다.
이를 위해 Red Hat Enterprise Linux 6에서는 THP (transparent huge pages)의 사용을 구현하고 있습니다.
THP는 huge pages의 생성, 관리, 사용의 대부분을 자동화하는 추상화 계층입니다.
http://scn.sap.com/community/oracle/blog/2013/06/17/oracle-myths-and-common-misconceptions-about-transparent-huge-pages-for-oracle-databases-on-linux-uncovered
http://software.intel.com/en-us/blogs/2013/07/09/transparent-huge-pages-on-intel-xeon-phi-coprocessors
http://seblog.mirr4u.com/651