AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

自己管理型配置のための TCMalloc パフォーマンスの最適化

バージョン8.0で変更。

MongoDB 8.0以降、 MongoDBは、メモリのフラグメント化を減らし、高負荷のワークロードに対するデータベースの回復力を高めます。

新しい TCMalloc バージョンを使用するには、次のようにします。

更新された TCMalloc のサポートは CPU アーキテクチャによって異なります。MongoDB 8.0 をサポートする Linux システムは、x86_64 アーキテクチャと ARM64 アーキテクチャのみで更新された TCMalloc をサポートします。

MongoDBは、オペレーティングシステムのバージョンに関わらず、PPC64LE および s390x アーキテクチャでレガシー TCMalloc バージョンを使用します。これらのアーキテクチャのいずれかを使用する場合は、THP を無効にします。

WindowsはレガシーTCMalloc バージョンを使用しており、アップデートされた TCMalloc をサポートしていません。

Transparent Huge Pages(THP)は、TLB(TransparentLookaideになります。)の検索のオーバーヘッドを削減するLinuxメモリ管理システムです。 THP は、小さなページを結合し、アプリケーションに対してより大きなメモリページとして表示されるようにすることで、これを実現します。

MongoDB 8.0以降では、プラットフォームの初期化システム用のサービスファイルを作成して、 mongodが起動する前に THP が有効になっていることを確認します。 MongoDB 7.0またはそれ以前のバージョンを使用している場合は、 THP を無効にします。

注意

THP はシステム レベルで動作するため、システムの下のすべてのプロセスに適用されます。プロセスごとのレベルで THP を有効または無効にすることはできません。

さらに、ktune と tuned パフォーマンス プロファイルを使用する RHEL およびCentOSシステムの場合は、カスタム tuned プロファイルも作成する必要があります。

THP を有効にするサービスファイルを作成するには、プラットフォームに組み込まれている初期化システムを使用します。 最近のバージョンのLinux通常、 systemctlコマンドが使用されるsystemdが使用されます。 古いバージョンのLinuxでは、 serviceコマンドを使用するSystem V initが使用される傾向があります。 詳細については、ご使用のオペレーティング システムのドキュメントを参照してください。

お使いのプラットフォームの初期化システムを使用します。

1

次のファイルを作成し、 /etc/systemd/system/enable-transparent-huge-pages.serviceに保存します。

[Unit]
Description=Enable Transparent Hugepages (THP)
DefaultDependencies=no
After=sysinit.target local-fs.target
Before=mongod.service
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo always | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null && echo defer+madvise | tee /sys/kernel/mm/transparent_hugepage/defrag > /dev/null && echo 0 | tee /sys/kernel/mm/transparent_hugepage/khugepaged/max_ptes_none > /dev/null && echo 1 | tee /proc/sys/vm/overcommit_memory > /dev/null'
[Install]
WantedBy=basic.target

注意

Red Hat Enterprise Linux の一部のバージョン、およびその他の Red Hat ベースの派生製品では、THP enabled ファイルに異なるパスが使用されます。

/sys/kernel/mm/redhat_transparent_hugepage/enabled

システムでどのパスが使用されているかを確認し、それに応じてenable-transparent-huge-pages.serviceファイルを更新します。

2

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

sudo systemctl daemon-reload
3

実行:

sudo systemctl start enable-transparent-huge-pages

関連する THP 設定が変更されたことを確認するには、次のコマンドを実行します。

cat /sys/kernel/mm/transparent_hugepage/enabled && cat /sys/kernel/mm/transparent_hugepage/defrag && cat /sys/kernel/mm/transparent_hugepage/khugepaged/max_ptes_none && cat /proc/sys/vm/overcommit_memory

Red Hat Enterprise Linux およびその他の Red Hat ベースの派生物では、代わりに以下を使用する必要があります。

cat /sys/kernel/mm/redhat_transparent_hugepage/enabled && cat /sys/kernel/mm/redhat_transparent_hugepage/defrag && cat /sys/kernel/mm/redhat_transparent_hugepage/khugepaged/max_ptes_none && cat /proc/sys/vm/overcommit_memory

出力は、次のようになります。

always
defer+madvise
0
1
4

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

sudo systemctl enable enable-transparent-huge-pages
5

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

1

次のファイルを作成し、 /etc/init.d/enable-transparent-hugepagesに保存します。

#!/bin/bash
### BEGIN INIT INFO
# Provides: enable-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: Enable Linux Transparent Hugepages
# Description: Enable 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 'always' | tee ${thp_path}/enabled > /dev/null && echo defer+madvise | tee ${thp_path}/defrag > /dev/null && echo 0 | tee ${thp_path}/khugepaged/max_ptes_none > /dev/null && echo 1 | tee /proc/sys/vm/overcommit_memory > /dev/null'
unset thp_path
;;
esac
2

実行:

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

実行:

sudo /etc/init.d/enable-transparent-hugepages start

関連する THP 設定が変更されたことを確認するには、次のコマンドを実行します。

cat /sys/kernel/mm/transparent_hugepage/enabled && cat /sys/kernel/mm/transparent_hugepage/defrag && cat /sys/kernel/mm/transparent_hugepage/khugepaged/max_ptes_none && cat /proc/sys/vm/overcommit_memory

Red Hat Enterprise Linux およびその他の Red Hat ベースの派生物では、代わりに以下を使用する必要があります。

cat /sys/kernel/mm/redhat_transparent_hugepage/enabled

出力は、次のようになります。

always
defer+madvise
0
1
4

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

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

Ubuntu と Debian

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

SUSE

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

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

sudo chkconfig --add enable-transparent-hugepages
5

If you are using tuned or ktune profiles on RHEL/ CentOS, you must also create a custom tuned profile.

重要

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

tuned and ktune are kernel tuning utilities that can affect the Transparent Hugepages setting on your system. If you are using tuned or ktune on your RHEL or CentOS system while running mongod, you must create a custom tuned profile to ensure that THP stays enabled.

1

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

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

/etc/tuned/virtual-guest-thp/tuned.confを作成および編集します。 次のテキストを追加します。

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

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

3

実行:

sudo tuned-adm profile virtual-guest-thp

TCMalloc が CPU ごとのキャッシュで実行中されていることを確認するには、以下を確認します。

CPU ごとのキャッシュが有効になっていない場合は、以下を確認します。

  • glibcrsq を無効にします。

  • Linuxカーネル バージョン4.18以降を使用している。

新しい TCMalloc では、CPU ごとのキャッシュを実装するために 再起動可能なシーケンス (rseq)が必要です。glibc ライブラリなどの別のアプリケーションが TCMalloc より前に RSeq 構造を登録する場合、TCMalloc は RSeq を使用できません。rsq がない場合、TCMalloc はスレッドごとのキャッシュを使用します。これはレガシーTCMalloc バージョンで使用されます。

CPU ごとのキャッシュを有効にするには、mongodを起動する前に次の環境変数を設定して glibc の rseq 登録を無効にします。

GLIBC_TUNABLES=glibc.pthread.rseq=0
export GLIBC_TUNABLES

glibc rseq を無効にした後もプロセッサーごとのキャッシュが有効にならない場合は、Linux カーネル 4.18 以降を使用していることを確認してください。

uname -r