我想在 CentOS 7 EC2 執行個體上停用transparent_hugepage (THP),該執行個體預設為啟用:
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
可以手動更改此設定:
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
# 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]
...但是重新啟動後變更將會遺失。
我嘗試將echo never [...]
指令放入我的rc.local
文件中cloud.cfg
,但沒有成功。
我還嘗試將設定附加transparent_hugepage=never
到內核行/etc/grub.conf
(如所解釋的那裡),但效果並沒有更好。
那麼...如何在 AWS EC2 執行個體上執行的 CentOS 7 上停用 THP?
編輯:更改標題...我需要停用 THP和THP碎片整理
答案1
解決方案是在調諧,正如@michael-hampton 所指出的。棘手的部分是虛擬機插件只能配置/sys/kernel/mm/transparent_hugepage/enabled
設定。
為了也禁用該/sys/kernel/mm/transparent_hugepage/defrag
設置,我必須創建一個由配置文件在啟動時調用的腳本。
最後,完整的解決方案是:
步驟1:建立儲存自訂設定檔的目錄:
mkdir /etc/tuned/custom
第2步:建立設定檔/etc/tuned/custom/tuned.conf
:
[main]
include=virtual-guest
[vm]
transparent_hugepages=never
[script]
script=script.sh
請注意,此設定檔繼承自虛擬訪客,這是我的活動設定文件,實際上看起來適合虛擬化伺服器(EC2)。您可以使用命令查看您的活動設定檔tuned-adm active
。如果您好奇,可以查看預先定義設定檔的內容/usr/lib/tuned/
步驟3:建立腳本/etc/tuned/custom/script.sh
:
#!/bin/sh
. /usr/lib/tuned/functions
start() {
echo never > /sys/kernel/mm/transparent_hugepage/defrag
return 0
}
stop() {
return 0
}
process $@
使其可執行:
sudo chmod 755 /etc/tuned/custom/script.sh
步驟4:啟動新設定檔:
tuned-adm profile custom
現在你應該得到:
# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
重新啟動後它將繼續存在。
答案2
除了設定grub命令列外,還需要設定tuned。但不要使用您連結到的說明,因為它們充滿了錯誤,需要半天才能解釋全部。
建立一個自訂的調整設定檔(我稱之為custom
),然後設定該設定檔。您將使其基於現有配置文件,例如virtual-guest
您是否在虛擬機器中運行(當然是 EC2),或者throughput-performance
如果您在實體機上運行。
建立目錄來儲存自訂設定檔:
mkdir /etc/tuned/custom
建立自訂設定文件/etc/tuned/custom/tuned.conf
,例如:
[main]
include=virtual-guest
[vm]
transparent_hugepages=never
現在設定設定檔:
tuned-adm profile custom
答案3
也試試這個
奈米 /etc/init.d/disable-transparent-hugepages
#!/bin/sh
### BEGIN INIT INFO
# Provides: disable-transparent-hugepages
# Required-Start: $local_fs
# Required-Stop:
# X-Start-Before: mongod mongodb-mms-automation-agent
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Disable Linux transparent huge pages
# Description: Disable Linux transparent huge pages, to improve
# database performance.
### END INIT INFO
case $1 in
start)
if [ -d /sys/kernel/mm/transparent_hugepage ]; then
thp_path=/sys/kernel/mm/transparent_hugepage
elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then
thp_path=/sys/kernel/mm/redhat_transparent_hugepage
else
return 0
fi
echo 'never' > ${thp_path}/enabled
echo 'never' > ${thp_path}/defrag
unset thp_path
;;
esac
須藤 chmod 755 /etc/init.d/disable-transparent-hugepages
sudo chkconfig --新增停用透明大頁
答案4
編輯:上面的回復是錯誤的,因為目前 sysctl 中缺少透明的大頁旋鈕。抱歉產生噪音。
您可以將所需的值放入 中/etc/sysctl.conf
。
來自 sysctl.conf(5) 手冊頁:
SYSCTL.CONF(5) 檔案格式 SYSCTL.CONF(5) 姓名 sysctl.conf - sysctl 預先載入/設定檔 描述 sysctl.conf 是一個簡單文件,包含要由 sysctl 讀取和設定的 sysctl 值。文法簡單如下: # 評論 ;評論 代幣=價值 請注意,空白行將被忽略,標記或值前後的空格也將被忽略,儘管值中可以包含空格。以 # 或 ; 開頭的行被考慮 評論並被忽略。 例子 # sysctl.conf 範例 # 核心.網域 = example.com ;這個有一個空格,將被寫入 sysctl! kernel.modprobe = /sbin/mod 探針