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 も構成する必要があります。ただし、リンク先の手順は使用しないでください。エラーが多すぎて、すべてを説明するだけで半日かかります。
カスタム調整プロファイル ( と呼びます) を作成し、プロファイルを設定します。仮想マシン (EC2 は当然そうです) で実行している場合や物理マシンで実行している場合custom
など、既存のプロファイルに基づいて設定します。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
答え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 プローブ