Red Hat Training
A Red Hat training course is available for RHEL 8
36.3. 起動時の HugeTLB の設定
HugeTLB サブシステムがサポートするページサイズは、アーキテクチャーによって異なります。x86_64 アーキテクチャーは、2 MB
の Huge Page および 1 GB
のギガンティックページをサポートします。
この手順では、システムの起動時に 1 GB
ページを予約する方法を説明します。
手順
1 GB
ページの HugeTLB プールを作成するには、default_hugepagesz=1G
およびhugepagesz=1G
カーネルオプションを有効にします。# grubby --update-kernel=ALL --args="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.sh [Install] WantedBy=sysinit.target
/usr/lib/systemd/
ディレクトリーにhugetlb-reserve-pages.sh
という新しいファイルを作成し、以下の内容を追加します。以下の内容を追加する場合、number_of_pages を、予約する 1GB ページ数に置き換え、node を、これらのページを予約するノードの名前に置き換えます。
#!/bin/sh 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 } reserve_pages number_of_pages node
たとえば、node0 で 2 つの
1 GB
ページ、node1 で 1GB のページを予約するには、number_of_pages を、node0 の場合は 2 に置き換え、node1 の場合は 1 に置き換えます。reserve_pages 2 node0 reserve_pages 1 node1
実行可能なスクリプトを作成します。
# chmod +x /usr/lib/systemd/hugetlb-reserve-pages.sh
初期のブート予約を有効にします。
# systemctl enable hugetlb-gigantic-pages
-
任意のタイミングで
nr_hugepages
に書き込みを行うことにより、ランタイム時にさらに1 GB
ページを予約してみることができます。ただし、メモリーの断片化による障害を防ぐために、起動プロセスの早い段階で1 GB
のページを予約します。 - 静的 Huge Page を確保することで、システムで利用可能なメモリー量を効果的に減らすことができます。ただし、メモリーの全容量を適切に使用できなくなります。予約された Huge Page の適切なサイズプールは、これを使用するアプリケーションにとって有益になりますが、予約済み Huge Page の過度なサイズや未使用のプールは最終的にシステムパフォーマンス全体に悪影響を及ぼします。予約済みの Huge Page プールを設定する場合は、システムによってメモリーの最大容量を適切に利用できるようになります。
関連情報
-
systemd.service(5)
man ページ -
/usr/share/doc/kernel-doc-kernel_version/Documentation/vm/hugetlbpage.txt
ファイル