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=noAfter=sysinit.target local-fs.targetBefore=mongod.service
[Service]Type=oneshotExecStart=/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/defragRed Hat Enterprise Linux およびその他の Red Hat ベースの派生物では、代わりに以下を使用する必要があります。
cat /sys/kernel/mm/redhat_transparent_hugepage/enabled && cat /sys/kernel/mm/redhat_transparent_hugepage/defrag出力は、次のようになります。
neverneverinit.dスクリプトの作成
次のファイルを作成し、 /etc/init.d/disable-transparent-hugepagesに保存します。
### 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/defragRed Hat Enterprise Linux およびその他の Red Hat ベースの派生物では、代わりに以下を使用する必要があります。
cat /sys/kernel/mm/redhat_transparent_hugepage/enabled && cat /sys/kernel/mm/redhat_transparent_hugepage/defrag出力は、次のようになります。
nevernever起動時に実行するようにオペレーティング システムを構成する
オペレーティング システムが起動するたびにこの設定が適用されるようにするには、Linux ディストリビューションに対して次のコマンドを実行します。
ディストリビューション | コマンド |
|---|---|
Ubuntu と Debian | |
SUSE | |
Red Hat、CentOS、Amazon Linux、および派生製品 | |
と を使用するtunedktune
重要
tuned または ktune を使用する場合は、上記のサービス ファイルを作成した後、このセクションの手順も実行する必要があります。
tuned とktune は、動的カーネル チューニング ツールで、システムの THP(Transparent Huge Pages)設定に影響する可能性があります。mongod を実行中にRHEL / CentOS システムでtuned / ktune を使用している場合は、THP が無効のままになるようにカスタム tuned プロファイルを作成する必要があります。