5.4.2. 初回起動時に複数の Huge Page フォルダーをマウント


Compute サービス (nova) を設定して、初回起動プロセスの一環として複数のページサイズを処理することができます。初回起動プロセスでは、初めてノードを起動する際に heat テンプレート設定をすべてのノードに追加します。これ以降は (たとえば、オーバークラウドスタックの更新時)、これらのテンプレートを追加してもこれらのスクリプトは実行されません。

手順

  1. アンダークラウドに stack ユーザーとしてログインします。
  2. stackrc ファイルを取得します。

    [stack@director ~]$ source ~/stackrc
  3. Compute 環境ファイルを開きます。
  4. KernelArgs パラメーターを設定することで、さまざまなサイズの huge page を作成できます。

    parameter_defaults:
      ComputeParameters:
        ...
        KernelArgs: "default_hugepagesz=1GB hugepagesz=1G hugepages=32 hugepagesz=2M hugepages=4096"
  5. その他の環境ファイルと共に Compute 環境ファイルをスタックに追加して、オーバークラウドをデプロイします。

    (undercloud)$ openstack overcloud deploy --templates \
     -e [your environment files] \
     -e /home/stack/templates/<compute_environment_file>.yaml
  6. huge page フォルダーのマウントユニットファイルを作成するスクリプトを実行する最初の AnsiblePlaybook ファイル hugepages.yaml を作成します。

    - name: Overcloud Node Huge Pages
      hosts: allovercloud
      any_errors_fatal: true
      gather_facts: false
    
      pre_tasks:
        - name: Assert custom_hugepage_pagesizes
          ansible.builtin.assert:
            that:
              - custom_hugepage_pagesizes is defined
              - custom_hugepage_pagesizes | type_debug == "list"
              - custom_hugepage_pagesizes | length > 0
    
        - name: Wait for provisioned nodes to boot
          wait_for_connection:
            timeout: 600
            delay: 10
    
      tasks:
        - name: Mask the default dev-hugepages.mount systemd unit
          become: true
          ansible.builtin.systemd_service:
            name: dev-hugepages.mount
            masked: true
    
        - name: Create hugepages folder in /dev
          become: true
          ansible.builtin.file:
            path: "/dev//hugepages{{ item }}"
            state: directory
            owner: root
            group: hugetlbfs
            mode: '0755'
          loop: "{{ custom_hugepage_pagesizes }}"
    
        - name: Create Huge Page systemd mount unit file
          become: true
          ansible.builtin.copy:
            dest: "/etc/systemd/system/dev-hugepages{{ item }}.mount"
            content: |
              [Unit]
              Description={{ item }} Huge Pages File System
              Documentation=https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt
              Documentation=https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
              DefaultDependencies=no
              Before=sysinit.target
              ConditionPathExists=/sys/kernel/mm/hugepages
              ConditionCapability=CAP_SYS_ADMIN
              ConditionVirtualization=!private-users
    
              [Mount]
              What=hugetlbfs
              Where=/dev/hugepages{{ item }}
              Type=hugetlbfs
              Options=pagesize={{ item }}
    
              [Install]
              WantedBy = sysinit.target
            owner: root
            group: root
            mode: '0644'
          loop: "{{ custom_hugepage_pagesizes }}"
    
        - name: Enable Huge Page systemd mounts
          become: true
          ansible.builtin.systemd_service:
            name: "dev-hugepages{{ item }}.mount"
            enabled: true
            daemon_reload: true
          loop: "{{ custom_hugepage_pagesizes }}"

    AnsiblePlaybook は以下のタスクを実行します。

    1. デフォルトの dev-hugepages.mount マウントユニットファイルをマスクして、ページサイズを使用して新しいマウントを作成できるようにします。
    2. フォルダーが作成されることを保証します。
    3. ページサイズごとに systemd ユニットファイルを作成します。
    4. custom_hugepage_pagesizes 変数で定義されたページサイズに対して、各マウントユニットファイルを有効にします。
  7. オプション: /dev フォルダーは、nova_compute および nova_libvirt コンテナーに自動的にバインドマウントされます。huge page マウントに別の宛先を使用している場合は、そのマウントを nova_compute および nova_libvirt コンテナーに渡します。

    parameter_defaults:
      NovaComputeOptVolumes:
        - /opt/dev:/opt/dev
      NovaLibvirtOptVolumes:
        - /opt/dev:/opt/dev
  8. ベアメタルデプロイメント定義ファイル overcloud-baremetal-deploy.yaml に Ansible Playbook を登録します。

    - name: ComputeA
      ...
      ansible_playbooks:
        - playbook: /home/stack/playbooks/hugepages.yaml
          extra_vars:
            custom_hugepage_pagesizes:
              - '2M'
              - '1G'
    - name: ComputeB
      ...
      ansible_playbooks:
        - playbook: /home/stack/playbooks/hugepages.yaml
          extra_vars:
            custom_hugepage_pagesizes:
              - '2M'
              - '1G'
  9. ノードをプロビジョニングします。

    $ (undercloud)$ openstack overcloud node provision \
     [--templates <templates_directory> \]
     --stack <stack> \
     --network-config \
     --output <deployment_file> \
     /home/stack/templates/<node_definition_file>
    • オプション: --templates オプションを含めて、/usr/share/openstack-tripleo-heat-templates にあるデフォルトテンプレートの代わりに独自のテンプレートを使用します。<templates_directory> は、テンプレートを含むディレクトリーへのパスに置き換えます。
    • <stack> を、ベアメタルノードがプロビジョニングされるスタックの名前に置き換えます。指定しない場合、デフォルトは overcloud です。
    • <deployment_file> を、デプロイメントコマンドに含めるために生成する Heat 環境ファイルの名前に置き換えてください。
    • <node_definition_file> を、ご使用のノード定義ファイルの名前に置き換えてください。
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る