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


9

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デフラグを無効にする必要があります


興味のある方のために、THPを無効にする理由をお聞かせください。
Cameron Kerr


再起動後、「/ etc / grub.confのカーネル行にtransparent_hugepage = neverを追加する」と、grubファイルからこの行を削除する必要がある場合、インスタンスは機能しません。この目的のために、既存のインスタンスを新しいインスタンスに接続し、パーティションをフォルダーにマウントできます
Artem.Borysov

回答:


14

@ 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]

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


これはAWS Redhat 7.4 VMで機能することがわかりました。ありがとう!
ジョンサンプソン

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

エラーでいっぱいのそれらの指示?説明するのに半日かかりますか?それが私が理解しようとしていることです。
vcarel

ちなみにあなたの答えはわかりません。grubを構成てtunedを完全に使用する必要があるのはなぜですか?
vcarel

1
これは、カーネル構成はデフォルトでオンになり、調整構成ではデフォルトでオンになるためです。それを完全に有効にするには、両方を変更する必要があります。
マイケルハンプトン2015年

1
tunedの設定で十分だと思います... grubの設定を変更する必要はありませんでした。ところで、THPデフラグを無効にする別の調整された設定はありますか?
vcarel

@vcarel透明なhugepagesはすでに無効になっているため、必要ありません。
マイケルハンプトン2015年

1

こちらもお試しください

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


0

/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でテスト済み。


-2

編集:上記の返信は間違っています。透過的な巨大なページのノブが現在sysctlにないためです。ノイズでごめんなさい。


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

sysctl.conf(5)のmanページから:

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

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

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

              #コメント
              ; コメント

              トークン=値

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

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

1
これは、sysctlを使用して構成することはできません。
マイケルハンプトン

どうして?私はしばしばsysctl.confを使用して/ sys / knowbsを微調整します...ここで何か不足していますか?編集:気にしないで、RHELのドキュメントで見つけました。私にそれを指摘してくれてありがとう;)
shodanshok
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.