簡單的說,都跟記憶體分頁管理有關係。要用 Huge Page ,程式需要做調整,為了簡化使用方式,Red Hat 在 RHEL6 引入 Transparent Huge Page ,預設啟用,主要是要讓程式可以不需要更動,就可以使用 Huge Page。
詳情可以參考:
- Huge Pages and Transparent Huge Pages
- 什么是透明大页(THP)以及如何在 Linux 中检查每个进程的 THP 使用情况
- CentOS / RHEL 7 : How to disable Transparent Huge pages (THP)
一般來說,若主機主要是執行資料庫,例如 Oracle, Redis, MongoDB, PostgreSQL,就不要使用 Transparent Huge Page。
在 RHEL 6 以後 Transparent Huge Page 預設是啟用,可以用以下指令檢查
cat /sys/kernel/mm/transparent_hugepage/enabled
輸出是 always ,就表示有啟用。若為 never ,就沒有啟用。madvise 是什麼意思呢?
當有啟用 Transparent Huge Page 時,Huge Page 就被禁用,可以用以下指令檢查,若為 0,表示禁用。
cat /proc/sys/vm/nr_hugepages
要禁用 Transparent Huge Page,用以下指令就可以
echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
在 RHEL8 裡,有 tuned,當使用上面設定無法生效時,有可能就是這個 tuned 在搞鬼。這時可以建立一個新的 tuned profile: /etc/tuned/nothp_profile/tuned.conf
內容是
[main]
include= throughput-performance
[vm]
transparent_hugepages=never
執行以下指令就可以生效。
chmod +x /etc/tuned/nothp_profile/tuned.conf
tuned-adm profile nothp_profile
若要永久禁用,可以在 /etc/default/grub
的 GRUB_CMDLINE_LINUX 加入 transparent_hugepage=never
執行 grub2-mkconfig -o
之後,重開機即可。
沒有留言:
張貼留言