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. 1 GB ページの HugeTLB プールを作成するには、default_hugepagesz=1G および hugepagesz=1G カーネルオプションを有効にします。

    # grubby --update-kernel=ALL --args="default_hugepagesz=1G hugepagesz=1G"
  2. /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
  3. /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
  4. 実行可能なスクリプトを作成します。

    # chmod +x /usr/lib/systemd/hugetlb-reserve-pages.sh
  5. 初期のブート予約を有効にします。

    # 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 ファイル