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デフラグを無効にする必要があります
解決策は 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]
再起動後も保持されます。
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
こちらもお試しください
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
/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でテスト済み。