Docs Menu
Docs Home
/
MongoDB マニュアル
/ / /

THP(Transparent Huge Pages)の無効化

項目一覧

  • サービス ファイルを作成
  • tunedktuneを使用する

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/disabled && 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

戻る

パフォーマンス