OS에서 대용량 페이지를 활성화하는 방법

Windows

Windows에서 대용량 페이지를 사용하려면 SeLockMemoryPrivilege 보안 정책을 활성화해야 합니다. 이 작업은 Windows API를 통해 프로그래밍 방식으로 수행할 수도 있고, 보안 정책 GUI를 통해 수행할 수도 있습니다(아래 안내 참조).

  1. 시작 -> "secpol.msc"를 검색하여 실행하십시오.
  2. 왼쪽에서 "Local Policies"(로컬 정책) -> "User Rights Assignment"(사용자 권한 과제)를 선택한 다음, "Lock pages in memory"(메모리에 페이지 잠금)를 더블 클릭하십시오.

Lock pages in memory

  1. 사용자를 추가하고 컴퓨터를 재부팅하십시오.

Add user

  1. RAMMap으로 실행 중에 대용량 페이지가 사용되는지 확인하십시오.

Linux

명시적 대용량 페이지

고정된 개수의 대용량 페이지를 명시적으로 할당하려면 libhugetlbfs를 사용할 수 있습니다:

$ sudo apt install libhugetlbfs-bin
$ sudo hugeadm --create-global-mounts
$ sudo hugeadm --pool-pages-min 2M:128

이는 libhugetlbfs가 필요 없는 다음 명령을 실행하는 것과 거의 같습니다(커널 문서 참조):

$ echo 128 > /proc/sys/vm/nr_hugepages
$ mount -t hugetlbfs                                                      \
    -o uid=<value>,gid=<value>,mode=<value>,pagesize=<value>,size=<value>,\
    min_size=<value>,nr_inodes=<value> none /mnt/huge

/proc/meminfo에서 그 효과를 확인할 수 있습니다:

$ watch -n1 "cat /proc/meminfo  | grep huge -i"
AnonHugePages:      2048 kB
ShmemHugePages:        0 kB
FileHugePages:         0 kB
HugePages_Total:     128    <== 128 huge pages allocated
HugePages_Free:      128
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:          262144 kB <== 256MB of space occupied

투명 대용량 페이지

Linux에서 애플리케이션이 투명 대용량 페이지(Transparent Huge Pages)를 사용할 수 있게 하려면 /sys/kernel/mm/transparent_hugepage/enabled가 always 또는 madvise인지 확인해야 합니다.

시스템 전역 모드(always)에서는 커널이 일반 페이지를 자동으로 병합하여 대용량 페이지로 승격합니다. 이 방식은 THP를 인식하지 못하는 애플리케이션에서도 작동하므로 코드를 직접 변경할 필요가 없습니다. 다음 명령으로 시스템 전역 모드를 활성화하십시오:

echo "always" | sudo tee /sys/kernel/mm/transparent_hugepage/enabled

madvise 옵션을 사용하면 madvise 시스템 호출을 통해 MADV_HUGEPAGE 속성이 지정된 메모리 영역 안에서만 THP가 활성화됩니다. 예를 들면 다음과 같습니다:

void ptr = mmap(nullptr, size, PROT_READ | PROT_WRITE | PROT_EXEC,
                MAP_PRIVATE | MAP_ANONYMOUS, -1 , 0);
madvise(ptr, size, MADV_HUGEPAGE);
// use the memory region `ptr`
munmap(ptr, size);

애플리케이션이 madvise와 mmap을 통해 대용량 페이지를 할당하면 /proc/meminfo의 AnonHugePages 항목에서 그 효과를 확인할 수 있습니다.