自己管理型配置での THP(Transparent Huge Pages)の無効化
重要
MongoDB 8.0で TCMalloc をアップグレードしました
MongoDB 8.0以降、 MongoDBは TCMalloc のアップグレード バージョンを使用しており、Transparent Huge Page を有効にするとパフォーマンスが向上します。 MongoDB 8.0以降を使用している場合は、 Transparent Huge Page(THP)の有効化を参照してください。
Transparent Huge Pages(THP)は、TLB(TransparentLookaideになります。)の検索のオーバーヘッドを削減するLinuxメモリ管理システムです。 THP は、小さなページを結合し、アプリケーションに対してより大きなメモリページとして表示されるようにすることで、これを実現します。
LinuxでMongoDB 7.0またはそれ以前のバージョンを実行中する場合、最高のパフォーマンスを得るために THP を無効にする必要があります。 MongoDBの以前のバージョンでは、データベースワークロードは非連続的なメモリ アクセス パターンを使用することが多いため、THP を有効にするとパフォーマンスが低下することがよくありました。
注意
システム レベルで THP を有効にし、プロセス レベルで無効にすることができます。 単一のマシン上で複数のMongoDBプロセスがある場合は、バージョン8.0のプロセスが THP を有効にし、 7.0またはそれ以前のプロセスが THP を無効にしていることを確認します。
mongod
が起動する前に THP が無効になっていることを確認するには、起動時に THP を無効にするオペレーティング システム用のサービスファイルを作成します。 次の手順には、 systemdおよびSystem V init初期化システムの例が含まれています。
さらに、 ktune
とtuned
パフォーマンス プロファイルを使用する RHELおよびCentOSシステムの場合は、カスタムtuned
プロファイルも作成する必要があります。
サービス ファイルを作成
THP を無効にするサービスファイルを作成するには、オペレーティング システムに組み込まれている初期化システムを使用します。 最近のバージョンのLinux通常、 systemctl
コマンドが使用されるsystemdが使用されます。 古いバージョンのLinuxservice
コマンドを使用するSystem V initが使用されます。 詳細については、ご使用のオペレーティング システムのドキュメントを参照してください。
お使いのオペレーティング システム用の初期化システムを使用します。
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
はカーネル チューニング ユーティリティで、システムの Transparent Huge Pages 設定に影響する可能性があります。 mongod
を実行中中にRHELまたはCentOSシステムでtuned
またはktune
を使用する場合は、THP が無効のままになるようにカスタムtuned
プロファイルを作成する必要があります。