在 CentOS 7 EC2 執行個體上停用 THP 和 THP defrag

在 CentOS 7 EC2 執行個體上停用 THP 和 THP defrag

我想在 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?

編輯:更改標題...我需要停用 THPTHP碎片整理

答案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 探針

相關內容