ブート・プロセスの初期段階でのNUMAノード固有パラメータを使用したHugeTLBページのリクエスト

ブート時にヒュージ・ページをリクエストする詳細な方法は、システムの要件によって異なります。次の手順では、いくつかのガイダンスを示しますが、ブート・オプションを構成するための他の方法とは異なります。

前述の例に示すように、カーネル・ブート時パラメータを使用してリクエストされたヒュージ・ページは、NUMAノード間で均等に分割されます。

ただし、ノード固有のファイル・パスに構成値を設定して、特定のノードに対して異なる数のヒュージ・ページをリクエストすることが必要になる場合があります。ファイル・パスは次のように定義されます:

/sys/devices/system/node/node{0,1,2…n}/hugepages/hugepages-<SIZE>kB/

次の手順では、NUMAシステムのノード0に2MBサイズの299ページと、ノード1に2MBサイズの300ページを予約する方法について説明します。この方法では、カスタムsystemdサービスを使用して、起動後にシェル・スクリプトを実行し、必要なsysfsパラメータを設定します。

次の手順を開始する前に、すべてのステップに必要な管理権限があることを確認してください。

systemdユニットの使用方法の詳細は、『Oracle Linux 9: systemdでのシステムの管理』を参照してください。

  1. /usr/lib/systemd/ディレクトリにhugetlb-reserve-pages.shというスクリプト・ファイルを作成し、次の内容を追加します。
    #!/bin/sh
    
    nodes_path=/sys/devices/system/node/
    if [ ! -d $nodes_path ]; then
        echo "ERROR: $nodes_path does not exist"
        exit 1
    fi
    
    #######################################################
    #                                                     #
    #     FUNCTION                                        #
    #           reserve_pages <number_of_pages> <node_id> #
    #                                                     #
    ####################################################### 
    
    reserve_pages()
    {
        echo $1 > $nodes_path/$2/hugepages/hugepages-2048kB/nr_hugepages
    }
    
    reserve_pages 299 node0    
    reserve_pages 300 node1 
    
  2. スクリプトを実行可能にします。
    sudo chmod +x /usr/lib/systemd/hugetlb-reserve-pages.sh
  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
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/usr/lib/systemd/hugetlb-reserve-pages.sh
    
    [Install]
    WantedBy=sysinit.target
  4. サービス・ファイルを有効にします。
    sudo systemctl enable hugetlb-gigantic-pages