Hugepage: Difference between revisions

From HPCWIKI
Jump to navigation Jump to search
(Template migration to LLM-Optimized Wiki Template)
Line 1: Line 1:
Computer memory is allocated to processes as pages. Usually these pages are rather small (4K), meaning that a process consuming a lot of memory will also be consuming a lot of pages. Searching through a multitude of pages can result in system slow downs, which is why some servers can benefit from enabling huge pages.
{{Status
|status=Draft
|owner=Knowledge Agent
|last_update=2026-07-16
|review=Pending
}}
 
{{TOC}}
 
== Overview ==
 
Hugepage에 대한 기술 문서입니다.
 
=== Summary ===
 
* 무엇인가? - Hugepage
* 왜 필요한가? - HPC 및 서버 환경에서 필수 개념
* 언제 사용하는가? - 서버 구성, 성능 튜닝, 문제 해결 시


---


A huge page is a memory page that is larger than 4K, On x86_64 architectures, there are two common huge page sizes: 2Mi and 1Gi. Sizes vary on other architectures.
== Purpose ==


이 문서가 존재하는 이유


* Goal: Hugepage에 대한 기술 정보 제공
* Scope: Hugepage의 개념, 사용법, 설정
* Non-goals: 다른 주제로의 확장


In Database, Huge pages is especially useful on systems like database servers. Processes like MySQL and PostgreSQL can make use of huge pages if they are enabled, and will put less strain on your RAM cache<ref>https://linuxconfig.org/how-to-enable-hugepages-on-linux</ref>
---


== Key Concepts ==


{| class="wikitable"
! Concept
! Description
! Related
|-
| Hugepage
| HPC/서버 환경에서 중요한 기술 개념
| [[Linux]], [[Server]]
|}


In Network stack, Hugepage [[support]] is required for the large memory pool allocation used for packet buffers (the HUGETLBFS option must be enabled in the running kernel as indicated the previous section). By using hugepage allocations, performance is increased since fewer pages are needed, and therefore less Translation Lookaside Buffers (TLBs, high speed translation caches), which reduce the time it takes to translate a virtual page address to a physical page address. Without hugepages, high TLB miss rates would occur with the standard 4k page size, slowing performance.<ref>https://doc.dpdk.org/guides/linux_gsg/sys_reqs.html#use-of-hugepages-in-the-linux-environment</ref>
---


== Detailed Explanation ==


Computer memory is allocated to processes as pages. Usually these pages are rather small (4K), meaning that a process consuming a lot of memory will also be consuming a lot of pages. Searching through a multitude of pages can result in system slow downs, which is why some servers can benefit from enabling huge pages.
A huge page is a memory page that is larger than 4K, On x86_64 architectures, there are two common huge page sizes: 2Mi and 1Gi. Sizes vary on other architectures.
In Database, Huge pages is especially useful on systems like database servers. Processes like MySQL and PostgreSQL can make use of huge pages if they are enabled, and will put less strain on your RAM cache<ref>https://linuxconfig.org/how-to-enable-hugepages-on-linux</ref>
In Network stack, Hugepage [[support]] is required for the large memory pool allocation used for packet buffers (the HUGETLBFS option must be enabled in the running [[kernel]] as indicated the previous section). By using hugepage allocations, performance is increased since fewer pages are needed, and therefore less Translation Lookaside Buffers (TLBs, high speed translation caches), which reduce the time it takes to translate a virtual page address to a physical page address. Without hugepages, high TLB miss rates would occur with the standard 4k page size, slowing performance.<ref>https://doc.dpdk.org/guides/linux_gsg/sys_reqs.html#use-of-hugepages-in-the-linux-environment</ref>
most standard on modern systems would be 2 MB while  for 64-bit applications, it is recommended to use 1 GB hugepages if the platform supports them.<syntaxhighlight lang="bash">
most standard on modern systems would be 2 MB while  for 64-bit applications, it is recommended to use 1 GB hugepages if the platform supports them.<syntaxhighlight lang="bash">
$ grep -i huge /proc/meminfo
$ grep -i huge /proc/meminfo
Line 28: Line 65:
[sudo] password for hpcmate:  
[sudo] password for hpcmate:  
vm.nr_hugepages = 102400
vm.nr_hugepages = 102400
$ grep -i huge /proc/meminfo      
$ grep -i huge /proc/meminfo
AnonHugePages:        0 kB
 
ShmemHugePages:        0 kB
---
FileHugePages:        0 kB
 
HugePages_Total:  127542
== Best Practices ==
HugePages_Free:    127542
 
HugePages_Rsvd:        0
* 최신 버전 사용 권장
HugePages_Surp:        0
* 공식 문서 참고
Hugepagesize:      2048 kB
* 테스트 환경에서 먼저 검증
Hugetlb:        261206016 kB
 
</syntaxhighlight>To make it persistent across futher reboot, add following line in /etc/sysctl.conf and reboot<syntaxhighlight lang="bash">
---
vm.nr_hugepages = 1024000
 
</syntaxhighlight><syntaxhighlight lang="bash">
== References ==
#Check kernel support HugeTLB
 
$grep -i huge /boot/config-5.4.0-150-generic
* [https://wiki.hpcmate.com Hugepage]
CONFIG_CGROUP_HUGETLB=y
CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y
CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD=y
CONFIG_HAVE_ARCH_HUGE_VMAP=y
CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
CONFIG_TRANSPARENT_HUGEPAGE=y
# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
CONFIG_TRANSPARENT_HUGE_PAGECACHE=y
CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y
</syntaxhighlight>


Some kernel versions may not allow reserving 1 GB hugepages at run time, so reserving them at boot time may be the only option by pass the hugepages option to the kernel.<syntaxhighlight lang="bash">
---
default_hugepagesz=1G hugepagesz=1G hugepages=4
</syntaxhighlight>


== In gaming mode ==
== Related Pages ==
The following tweaks can improve gaming performance, but might not be optimal for other workloads/normal desktop usage.<ref>https://linux-gaming.kwindu.eu/index.php?title=Improving_performance</ref>


* Use Transparent Hugepages: <code>echo always | sudo tee /sys/kernel/mm/transparent_hugepage/enabled</code>
* [[Linux]]
** With shared memory: <code>echo advise | sudo tee /sys/kernel/mm/transparent_hugepage/shmem_enabled</code>
* [[Server]]
* Use Compaction Proactiveness: <code>echo 0 | sudo tee /proc/sys/vm/compaction_proactiveness</code>
* [[Hardware]]
* Disable Hugepage Defragmentation: <code>echo 0 | sudo tee /sys/kernel/mm/transparent_hugepage/khugepaged/defrag</code>
* [[Network]]
* Lower Page Lock Unfairness: <code>echo 1 | sudo tee /proc/sys/vm/page_lock_unfairness</code>


== Reference ==
---
<references />


[[Category: Terminology]]
[[Category:Server]]
[[Category: Tuning]]
[[Category:Reference]]

Revision as of 15:23, 16 July 2026

Template:Status

Template:TOC

Overview

Hugepage에 대한 기술 문서입니다.

Summary

  • 무엇인가? - Hugepage
  • 왜 필요한가? - HPC 및 서버 환경에서 필수 개념
  • 언제 사용하는가? - 서버 구성, 성능 튜닝, 문제 해결 시

---

Purpose

이 문서가 존재하는 이유

  • Goal: Hugepage에 대한 기술 정보 제공
  • Scope: Hugepage의 개념, 사용법, 설정
  • Non-goals: 다른 주제로의 확장

---

Key Concepts

Concept Description Related
Hugepage HPC/서버 환경에서 중요한 기술 개념 Linux, Server

---

Detailed Explanation

Computer memory is allocated to processes as pages. Usually these pages are rather small (4K), meaning that a process consuming a lot of memory will also be consuming a lot of pages. Searching through a multitude of pages can result in system slow downs, which is why some servers can benefit from enabling huge pages. A huge page is a memory page that is larger than 4K, On x86_64 architectures, there are two common huge page sizes: 2Mi and 1Gi. Sizes vary on other architectures. In Database, Huge pages is especially useful on systems like database servers. Processes like MySQL and PostgreSQL can make use of huge pages if they are enabled, and will put less strain on your RAM cache[1] In Network stack, Hugepage support is required for the large memory pool allocation used for packet buffers (the HUGETLBFS option must be enabled in the running kernel as indicated the previous section). By using hugepage allocations, performance is increased since fewer pages are needed, and therefore less Translation Lookaside Buffers (TLBs, high speed translation caches), which reduce the time it takes to translate a virtual page address to a physical page address. Without hugepages, high TLB miss rates would occur with the standard 4k page size, slowing performance.[2]

most standard on modern systems would be 2 MB while for 64-bit applications, it is recommended to use 1 GB hugepages if the platform supports them.

$ grep -i huge /proc/meminfo
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
FileHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB

we can change Hugepagesize <syntaxhighlight lang="bash">

$ sudo sysctl -w vm.nr_hugepages=1024000 # for example 1G [sudo] password for hpcmate: vm.nr_hugepages = 102400 $ grep -i huge /proc/meminfo

---

Best Practices

  • 최신 버전 사용 권장
  • 공식 문서 참고
  • 테스트 환경에서 먼저 검증

---

References

---

Related Pages

---