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
プロファイルを作成する必要があります。