Red Hat Training

A Red Hat training course is available for RHEL 8

33.3. 起動時の HugeTLB の設定

HugeTLB サブシステムがサポートするページサイズは、アーキテクチャーによって異なります。x86_64アーキテクチャでは、2MBの巨大ページと1GBの巨大ページをサポートしています。

この手順では、起動時に1GBのページを確保する方法を説明します。

手順

  1. rootで、/etc/default/grubファイルのkernelコマンドラインオプションに以下の行を追加して、1GBページ用のHugeTLBプールを作成します。

    default_hugepagesz=1G hugepagesz=1G
  2. 編集されたデフォルトファイルを使用して、GRUB2 設定を再生成します。

    1. BIOS ファームウェアを使用しているシステムの場合は次のコマンドを実行します。

      # grub2-mkconfig -o /boot/grub2/grub.cfg
    2. システムで UEFI フレームワークを使用している場合は、以下のコマンドを実行します。

      # grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
  3. /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
  4. /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

    例えば、node01GBのページを2つ、node1に1GBのページを1つ予約するには、number_of_pagesnode0が2、node1が1に置き換えます。

    reserve_pages 2 node0
    reserve_pages 1 node1
  5. 実行可能なスクリプトを作成します。

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

    # systemctl enable hugetlb-gigantic-pages
注記
  • nr_hugepages にいつでも書き込みを行い、ランタイム時に 1 GB を超えるページを予約できます。ただし、メモリーの断片化により、このような予約が失敗する可能性があります。 1GBのページを予約する最も確実な方法は、ブート時の初期に実行されるこのhugetlb-reserve-pages.shスクリプトを使用することです。
  • 静的 Huge Page を確保することで、システムで利用可能なメモリー量を効果的に減らすことができます。ただし、メモリーの全容量を適切に使用できなくなります。予約された Huge Page の適切なサイズプールは、これを使用するアプリケーションにとって有益になりますが、予約済み Huge Page の過度なサイズや未使用のプールは最終的にシステムパフォーマンス全体に悪影響を及ぼします。予約済みの Huge Page プールを設定する場合は、システムによってメモリーの最大容量を適切に利用できるようになります。

関連情報

  • systemd.service(5) man ページ
  • /usr/share/doc/kernel-doc-kernel_version/Documentation/vm/hugetlbpage.txt file