筆記:Linux hugepages 設定

2019022712:08

Hugepages 是從 Linux kernal 2.6 後加入的新功能
default 是 2048 kB (2MB)


查詢目前 page size (Bytes)
$ getconf PAGE_SIZE   或 getconf PAGESIZE
4096


$ cat /proc/sys/vm/nr_hugepages
0


$ cat /proc/meminfo | grep Huge
AnonHugePages:  10047488 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
尚未啟用 HugePages

 

If this commands returns a non-empty string, 2MB pages are supported.

% grep pse /proc/cpuinfo | uniq 
flags : [...] pse [...]



If this commands returns a non-empty string, 1GB pages are supported.

% grep pdpe1gb /proc/cpuinfo | uniq 
flags : [...] pdpe1gb [...]



 


啟用 HugePages: (以 root 身份執行)
$ sysctl -w vm.nr_hugepages=512
vm.nr_hugepages = 512

或是 
$ echo 512 > /proc/sys/vm/nr_hugepages 

 
特別注意:
必需有「連續的空白記憶體」才能生效
若是運作了一些時日的 linux 主機,記憶體通常是「破碎/不連續」的狀態
所以建議是在剛開機時,執行這個命令才會有效


檢查 HugePage 是否設定成功:
$ cat /proc/sys/vm/nr_hugepages
512

或

$ cat /proc/meminfo | grep Huge
AnonHugePages:    288768 kB
HugePages_Total:     512              系統已經預留多少個 HugePages
HugePages_Free:      512              現在還有多少 HugePages 未分配(allocate)
HugePages_Rsvd:        0              
HugePages_Surp:        0
Hugepagesize:       2048 kB           每一個 HuagePage 的大小
這幾個值的說明,參考:
Linux下hugetlbpage使用详解
HugePages_Rsvd 是什么意思?



讓機器開機時,能自動啟用這個設定:
$ vi /etc/sysctl.conf
加入 vm.nr_hugepages=512



參考
让你的PHP7更快之Hugepage | 风雪之隅

Hugepages详解

Hugepages - Debian Wiki

Huge Pages and Transparent Huge Pages - Red Hat Customer Portal

Configuring Huge Pages for MySQL Server on Red Hat Linux

Huge Page 是否是拯救性能的万能良药?



https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/virtualization_tuning_and_optimization_guide/sect-virtualization_tuning_optimization_guide-memory-tuning

https://www.golinuxcloud.com/disable-transparent-hugepages-centos-rhel-7/

https://blog.51cto.com/hsbxxl/1075166


RedHat 7 效能微調指南 / 4.3.1. 設定巨大分頁