THP(Transparent Huge Pages)の無効化
Transparent Huge Pages(THP)は、より大きなメモリ ページを使用することで、大容量のメモリを搭載したマシン上の Translation Lookaside Buffer(TLB)検索のオーバーヘッドを削減する Linux メモリ管理システムです。
ただし、データベース ワークロードは連続したメモリ アクセス パターンではなく、散在したメモリ アクセス パターンになる傾向があるため、THP を有効にするとパフォーマンスが低下することがよくあります。Linux 上で MongoDB を実行する場合、最高のパフォーマンスを得るために THP を無効にする必要があります。
mongod
が起動する前に THP が無効になっていることを確認するには、起動時に THP を無効にするプラットフォームの初期化システム用のサービスファイルを作成する必要があります。 systemdおよびSystem V init初期化システムの手順を以下に示します。
さらに、ktune
および tuned
パフォーマンス プロファイルを使用する RHEL / CentOS システムの場合は、カスタムの tuned
プロファイルも作成する必要があります。
サービス ファイルを作成
THP を無効にするサービス ファイルを作成するには、プラットフォームに組み込まれている初期化システムを使用します。最近のバージョンの Linux では systemd(systemctl
コマンドを使用)が使用される傾向があり、古いバージョンの Linux ではSystem V init(service
コマンドを使用)が使用される傾向があります。詳細については、オペレーティング システムのドキュメントを参照してください。
お使いのプラットフォームに適した初期化システムを使用してください。
systemd
ユニットファイルを作成
次のファイルを作成し、 /etc/systemd/system/disable-transparent-huge-pages.service
に保存します。
[Unit] Description=Disable Transparent Hugepages (THP) DefaultDependencies=no After=sysinit.target local-fs.target Before=mongod.service [Service] Type=oneshot ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null && echo never | tee /sys/kernel/mm/transparent_hugepage/defrag > /dev/null' [Install] WantedBy=basic.target
注意
Red Hat Enterprise Linux の一部のバージョン、およびその他の Red Hat ベースの派生製品では、THP enabled
ファイルに異なるパスが使用されます。
/sys/kernel/mm/redhat_transparent_hugepage/enabled
システムでどのパスが使用されているかを確認し、それに応じてdisable-transparent-huge-pages.service
ファイルを更新します。
サービスを開始する
実行:
sudo systemctl start disable-transparent-huge-pages
関連する THP 設定が変更されたことを確認するには、次のコマンドを実行します。
cat /sys/kernel/mm/transparent_hugepage/enabled && cat /sys/kernel/mm/transparent_hugepage/defrag
Red Hat Enterprise Linux およびその他の Red Hat ベースの派生物では、代わりに以下を使用する必要があります。
cat /sys/kernel/mm/redhat_transparent_hugepage/enabled && cat /sys/kernel/mm/redhat_transparent_hugepage/defrag
出力は、次のようになります。
never never
init.d
スクリプトの作成
次のファイルを作成し、 /etc/init.d/disable-transparent-hugepages
に保存します。
!/bin/bash ## 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 Hugepages Description: Disable Linux Transparent Hugepages, 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' | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null && echo 'never' | tee /sys/kernel/mm/transparent_hugepage/defrag > /dev/null unset thp_path ;; esac
スクリプトを実行する
実行:
sudo /etc/init.d/disable-transparent-hugepages start
関連する THP 設定が変更されたことを確認するには、次のコマンドを実行します。
cat /sys/kernel/mm/transparent_hugepage/enabled && cat /sys/kernel/mm/transparent_hugepage/defrag
Red Hat Enterprise Linux およびその他の Red Hat ベースの派生物では、代わりに以下を使用する必要があります。
cat /sys/kernel/mm/redhat_transparent_hugepage/enabled && cat /sys/kernel/mm/redhat_transparent_hugepage/defrag
出力は、次のようになります。
never never
起動時に実行するようにオペレーティング システムを構成する
オペレーティング システムが起動するたびにこの設定が適用されるようにするには、Linux ディストリビューションに対して次のコマンドを実行します。
ディストリビューション | コマンド | |
---|---|---|
Ubuntu と Debian |
| |
SUSE |
| |
Red Hat、CentOS、Amazon Linux、および派生製品 |
|
と を使用するtuned
ktune
重要
tuned
または ktune
を使用する場合は、上記のサービス ファイルを作成した後、このセクションの手順も実行する必要があります。
tuned
とktune
は、動的カーネル チューニング ツールで、システムの THP(Transparent Huge Pages)設定に影響する可能性があります。mongod
を実行中にRHEL / CentOS システムでtuned
/ ktune
を使用している場合は、THP が無効のままになるようにカスタム tuned
プロファイルを作成する必要があります。