web-dev-qa-db-ja.com

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.localおよびcloud.cfgファイルに挿入しようとしましたが、機能しませんでした。

また、transparent_hugepage=neverのカーネル行に/etc/grub.confの設定を追加しようとしましたが(説明は there )、うまくいきませんでした。

では、AWS EC2インスタンスで実行されているCentOS 7でTHPを無効にするにはどうすればよいですか?

編集:タイトルを変更... THPおよびTHPデフラグを無効にする必要があります

9
vcarel

解決策は tuned にあり、@ michael-hamptonによって指摘されています。トリッキーな部分は vm プラグインが/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

このプロファイルは、私のアクティブなプロファイルである virtual-guest を継承し、実際には仮想化サーバー(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]

再起動後も保持されます。

14
vcarel

Grubコマンドラインの設定に加えて、tunedを設定する必要もあります。ただし、リンク先の説明は使用しないでください。エラーが非常に多く、すべてを説明するだけで半日かかります。

カスタム調整プロファイル(customと呼びます)を作成し、プロファイルを設定します。仮想マシン(EC2はもちろん)で実行している場合はvirtual-guest、物理マシンの場合はthroughput-performanceなどの既存のプロファイルをベースにします。

カスタムプロファイルを保持するディレクトリを作成します。

mkdir /etc/tuned/custom

カスタムプロファイル/etc/tuned/custom/tuned.confを作成します。次に例を示します。

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

次にプロファイルを設定します。

tuned-adm profile custom
2
Michael Hampton

こちらもお試しください

nano /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 disable-transparent-hugepages

1
Artem.Borysov

/etc/rc.localファイルを編集して、次のコマンドをそのファイルに追加できます。

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

chmod +x /etc/rc.d/rc.localを実行して、起動中にスクリプトが実行されるようにします。 Amazon Linux 2でテスト済み。

0
Yuda Prawira