Linux

是否可以動態禁用透明大頁面?

  • February 20, 2020

為了禁用THP

我們在所有 635RHEL台機器上做了以下操作(我們有rhel 7.5版本)

這些行來自我們在所有機器上執行的 bash 腳本

第1步

[[ -f /sys/kernel/mm/transparent_hugepage/enabled ]] && echo never > /sys/kernel/mm/transparent_hugepage/enabled
[[ -f /sys/kernel/mm/transparent_hugepage/defrag  ]] && echo never > /sys/kernel/mm/transparent_hugepage/defrag

確認:

cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]

但眾所周知,機器時不考慮這些步驟restarted/rebooted

第2步

所以我們也這樣做了,我們將以下行添加到/etc/rc.local

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
  echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
  echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

問題是:

step 1正如我上面提到的那樣真的disabledTHP在飛行中嗎?

注意 - 還有來自一台典型機器的其他資訊

sysctl -a | grep hugepage
vm.hugepages_treat_as_movable = 0
vm.nr_hugepages = 0
vm.nr_hugepages_mempolicy = 0
vm.nr_overcommit_hugepages = 0

參考 -配置透明大頁面

我上面提到的第 1 步真的會即時禁用 THP 嗎?

的,您所做的任何事情sysfs都是即時完成的。它已經記錄在核心文件/ transhuge.html 中

但是,引用自https://access.redhat.com/solutions/46111

**注意:**執行上述命令將僅停止新 THP 的創建和使用。在執行上述命令時創建和使用的 THP 不會被反彙編為正常記憶體頁面。要完全擺脫 THP,應在啟動時禁用 THP 重新啟動系統。

有一個文章有你同樣的問題。在那裡,ub3rst4r解釋說這/etc/rc.local不適用於他的案例,因為它是在所有服務啟動後執行的

因此,我強烈建議遵循同一個核心文件/ transhuge.html中提到的官方方式

您可以通過將參數 … transparent_hugepage=never 傳遞給核心命令行來更改透明大頁面支持的 sysfs 引導時間預設值。

您當然可以使用/etc/default/grub. 另外,我建議在重啟後進行測試

grep AnonHugePages /proc/meminfo
AnonHugePages:         0 kB

如果正確禁用它,您應該得到一個值 0。

引用自:https://unix.stackexchange.com/questions/568723