[![logo](https://www.hongsnet.net/images/logo.gif)](https://www.hongsnet.net)

# THP(Transparent HugePage) Overview

RHEL 6.2(2.6.32-220) 이후 부터 개발자 또는 시스템 관리자의 개입없이, Hugepage 메모리 페이지의 생성 및 관리를 커널 기능이 도입 되었다. 이는 Application에서 사용하는 익명 메모리 영역을 Mapping하여, 동적 메모리를 할당하는 데 주로 사용된다.

!`중요` : Application에서 hugepage를 사용해야 할 경우 `vm.nr_hugepages` 파라미터를 sysctl tool을 사용하여, 미리 할당하여 사용하는 것이 권장 된다.

또한 Hugepage를 사용하지 않는 시스템의 경우 불필요한 메모리를 동적으로 할당할 필요가 없으므로, 비활성화하는 것이 권장 된다.

!참고 : 영구적으로 이를 적용하려면, GRUB 부트로더에 값을 설정한 후 리부팅이 필요 하다.


# THP 해제 수행

* [ STEP 1 ] /proc/meminfo review
* [ STEP 2 ] GRUB 부트로더 설정 추가
* [ STEP 3 ] 리부팅 후 /proc/meminfo review


1. 먼저 다음과 같이 /proc/meminfo 정보를 review 한다.

```bash
# cat /proc/meminfo |grep "AnonHugePages"
AnonHugePages:    811008 kB
```

위와 같이 대략 **790** MebiByte 가 넘는 용량이 설정되어 있는 것을 확인할 수 있다.


2. 이를 해제하기 위해 GRUB 부트로더에 다음과 같이 설정을 진행 한다.

```bash
# cat /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 spectre_v2=retpoline rhgb quiet transparent_hugepage=never"
GRUB_DISABLE_RECOVERY="true"
```

단, 최종 적용을 위해서는 다음과 같이 설정 파일을 업데이트해줘야 한다.

```bash
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-1160.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-bf7b5f2da6be4f7fb70b35e636a5ccf1
Found initrd image: /boot/initramfs-0-rescue-bf7b5f2da6be4f7fb70b35e636a5ccf1.img
done
```

3. 이제 리부팅을 진행하고, 다시 /proc/meminfo review를 진행 한다.

```bash
# sync; sync; init 6
```

리부팅 후

```bash
# cat /proc/meminfo |grep "AnonHugePages"
AnonHugePages:    0 kB
```