CentOS 7 EC2 インスタンスで THP と THP デフラグを無効にする

CentOS 7 EC2 インスタンスで THP と THP デフラグを無効にする

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.localcloud.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 も構成する必要があります。ただし、リンク先の手順は使用しないでください。エラーが多すぎて、すべてを説明するだけで半日かかります。

カスタム調整プロファイル ( と呼びます) を作成し、プロファイルを設定します。仮想マシン (EC2 は当然そうです) で実行している場合や物理マシンで実行している場合customなど、既存のプロファイルに基づいて設定します。virtual-guestthroughput-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

sudo chmod 755 /etc/init.d/disable-transparent-hugepages

sudo chkconfig --add 無効化-透過的ヒュージページ

答え4

編集:上記の返信は間違っている現時点では、透過的な巨大ページ ノブが sysctl に存在しないためです。ご迷惑をおかけして申し訳ございません。


必要な値を に入力できます/etc/sysctl.conf

sysctl.conf(5)マニュアルページより:

SYSCTL.CONF(5) ファイル形式 SYSCTL.CONF(5)

名前
       sysctl.conf - sysctl プリロード/構成ファイル

説明
       sysctl.conf は、sysctl によって読み込まれ、設定される sysctl 値を含む単純なファイルです。構文は次のようになります。

              # コメント
              ; コメント

              トークン = 値

       空白行は無視され、トークンまたは値の前後の空白は無視されますが、値には空白を含めることができます。#または;で始まる行は、
       コメントは無視されました。

              # sysctl.conf サンプル
              #
                kernel.ドメイン名 = example.com
              ; これには sysctl に書き込まれるスペースがあります。
                kernel.modprobe = /sbin/mod プローブ

関連情報