Show Table of Contents
5.3. HugeTLB 大規模ページの設定
Red Hat Enterprise Linux 7.1 以降、大規模ページを予約するには起動時
と実行時の 2 つの方法があります。起動時に予約すると、メモリーの断片化がそれほど行われていないため、成功の可能性が高くなります。ただし、NUMA マシンでは、複数のページが NUMA ノード間で自動的に分割されます。実行時の方法では、NUMA ノードごとに大規模ページを予約できます。実行時の予約が起動プロセスでできるだけ早いタイミングで行われる場合は、メモリーの断片化の可能性が低くなります。
5.3.1. 起動時の大規模ページの設定
起動時に大規模ページを設定するには、カーネルブートコマンドラインに次のパラメーターを追加します。
- hugepages
- 起動時にカーネルで設定する永続大規模ページ数を定義します。デフォルト値は 0 です。物理的に近接な空きページが十分にある場合にしか大規模ページを割り当てることはできません。このパラメーターで予約されるページは他の目的には使用できません。この値は起動後、
/proc/sys/vm/nr_hugepagesファイルの値を変更することで調整可能です。NUMA システムの場合、このパラメーターで割り当てた大規模ページはノード間で平等に分割されます。実行中、大規模ページを特定ノードに割り当てる場合はそのノードの/sys/devices/system/node/node_id/hugepages/hugepages-1048576kB/nr_hugepagesファイルの値を変更します。詳細についてはデフォルトで/usr/share/doc/kernel-doc-kernel_version/Documentation/vm/hugetlbpage.txtにインストールされるカーネル関連ドキュメントをお読みください。 - hugepagesz
- 起動時にカーネルで設定する永続大規模ページのサイズを定義します。使用できる値は 2 MB と 1 GB です。デフォルト値は 2 MB です。
- default_hugepagesz
- 起動時にカーネルで設定する永続大規模ページのデフォルトサイズを定義します。使用できる値は 2 MB と 1 GB です。デフォルト値は 2 MB です。
手順5.1 起動初期時に 1 GB ページを予約
HugeTLB サブシステムでサポートされるページサイズはアーキテクチャーによって異なります。AMD64 および Intel 64 アーキテクチャーの場合、2 MB の大規模ページと 1 GB の巨大ページがサポートされます。
- 次の行をカーネルコマンドラインオプションに追加して、1 GB ページ向けの HugeTLB プールを作成します。
default_hugepagesz=1G hugepagesz=1G
/usr/lib/systemd/system/hugetlb-gigantic-pages.serviceという名前のファイルを次の内容で作成します。[Unit] Description=HugeTLB Gigantic Pages Reservation DefaultDependencies=no Before=dev-hugepages.mount ConditionPathExists=/sys/devices/system/node ConditionKernelCommandLine=hugepagesz=1G [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/lib/systemd/hugetlb-reserve-pages [Install] WantedBy=sysinit.target
/usr/lib/systemd/hugetlb-reserve-pagesという名前のファイルを次の内容で作成します。nodes_path=/sys/devices/system/node/ if [ ! -d $nodes_path ]; then echo "ERROR: $nodes_path does not exist" exit 1 fi reserve_pages() { echo $1 > $nodes_path/$2/hugepages/hugepages-1048576kB/nr_hugepages } # This example reserves 2 1G pages on node0 and 1 1G page on node1. You # can modify it to your needs or add more lines to reserve memory in # other nodes. Don't forget to uncomment the lines, otherwise then won't # be executed. # reserve_pages 2 node0 # reserve_pages 1 node1- ファイルのコメントに従って
/usr/lib/systemd/hugetlb-reserve-pagesを変更します。 - 次のコマンドを実行して起動初期の予約を有効にします。
# chmod +x /usr/lib/systemd/hugetlb-reserve-pages # systemctl enable hugetlb-gigantic-pages
注記
任意のタイミングでnr_hugepagesに書き込みを行うことにより、1G を超えるページを実行時に予約できます。ただし、このような予約はメモリーの断片化により失敗することがあります。1G ページを予約するには、手順 4 で説明された起動初期時に予約する方法が最も安定的です。
5.3.2. 実行時の大規模ページの設定
次のパラメーターを使用して実行時の大規模ページの動作に影響を与えることができます。
- /sys/devices/system/node/node_id/hugepages/hugepages-size/nr_hugepages
- 指定 NUMA ノードに割り当てる指定サイズの大規模ページ数を定義します。これは Red Hat Enterprise Linux 7.1 からの対応になります。次の例では 2048 kB の大規模ページを 20 ページ
node2に割り当てています。# numastat -cm | egrep 'Node|Huge' Node 0 Node 1 Node 2 Node 3 Total add AnonHugePages 0 2 0 8 10 HugePages_Total 0 0 0 0 0 HugePages_Free 0 0 0 0 0 HugePages_Surp 0 0 0 0 0 # echo 20 > /sys/devices/system/node/node2/hugepages/hugepages-2048kB/nr_hugepages # numastat -cm | egrep 'Node|Huge' Node 0 Node 1 Node 2 Node 3 Total AnonHugePages 0 2 0 8 10 HugePages_Total 0 0 40 0 40 HugePages_Free 0 0 40 0 40 HugePages_Surp 0 0 0 0 0 - /proc/sys/vm/nr_overcommit_hugepages
- メモリーのオーバーコミット中、システムで作成、使用が可能な追加の大規模ページの最大数を定義します。このファイルにゼロ以外の値を書き込むと、永続大規模ページのプールを使い切ってしまった場合にカーネルの通常ページのプールから指定した大規模ページ数が取得されます。この余剰大規模ページについては未使用になると解放されカーネルの通常プールに戻されます。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.