Docs Menu

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 では systemdsystemctl コマンドを使用)が使用される傾向があり、古いバージョンの Linux ではSystem V initservice コマンドを使用)が使用される傾向があります。詳細については、オペレーティング システムのドキュメントを参照してください。

お使いのプラットフォームに適した初期化システムを使用してください。

1

次のファイルを作成し、 /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ファイルを更新します。

2

systemdユニット ファイルを再読み込みし、 disable-transparent-huge-pages.serviceを使用できるようにするには、次のコマンド を実行します。

sudo systemctl daemon-reload
3

実行:

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
4

オペレーティング システムを起動するたびにこの設定が適用されるようにするには、以下のコマンドを実行します。

sudo systemctl enable disable-transparent-huge-pages
5

RHEL / CentOS でtunedまたはktuneプロファイルを使用する場合は、カスタムtunedプロファイルも作成する必要があります。

1

次のファイルを作成し、 /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
2

実行:

sudo chmod 755 /etc/init.d/disable-transparent-hugepages
3

実行:

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
4

オペレーティング システムが起動するたびにこの設定が適用されるようにするには、Linux ディストリビューションに対して次のコマンドを実行します。

ディストリビューション
コマンド

Ubuntu と Debian

sudo update-rc.d disable-transparent-hugepages defaults

SUSE

sudo insserv /etc/init.d/disable-transparent-hugepages

Red Hat、CentOS、Amazon Linux、および派生製品

sudo chkconfig --add disable-transparent-hugepages
5

RHEL / CentOS でtunedまたはktuneプロファイルを使用している場合は、カスタムtunedプロファイルも作成する必要があります。

重要

tuned または ktune を使用する場合は、上記のサービス ファイルを作成した後、このセクションの手順も実行する必要があります。

tunedktune は、動的カーネル チューニング ツールで、システムの THP(Transparent Huge Pages)設定に影響する可能性があります。mongod を実行中にRHEL / CentOS システムでtuned / ktune を使用している場合は、THP が無効のままになるようにカスタム tuned プロファイルを作成する必要があります。

1

関連するディレクトリをコピーして、既存のプロファイルから新しいプロファイルを作成します。この例では、virtual-guest プロファイルをベースとして使用し、virtual-guest-no-thp を新しいプロファイルとして使用します。

sudo cp -r /etc/tune-profiles/virtual-guest /etc/tune-profiles/virtual-guest-no-thp
2

/etc/tune-profiles/virtual-guest-no-thp/ktune.sh を編集し、set_transparent_hugepages の設定を以下のように変更します。

set_transparent_hugepages never
3

新しいプロファイルを有効にします。

sudo tuned-adm profile virtual-guest-no-thp
1

カスタム tuned プロファイルを保持するための新しいディレクトリを作成します。この例では、既存の virtual-guest プロファイルを継承し、新しいプロファイルとして virtual-guest-no-thp を使用しています。

sudo mkdir /etc/tuned/virtual-guest-no-thp
2

/etc/tuned/virtual-guest-no-thp/tuned.conf を作成して編集し、以下の内容を含むようにします。

[main]
include=virtual-guest
[vm]
transparent_hugepages=never

この例は、既存の virtual-guest プロファイルを継承しています。システムに最も適したプロファイルを選択します。

3

新しいプロファイルを有効にします。

sudo tuned-adm profile virtual-guest-no-thp