5.4.2. 初回起動時に複数の Huge Page フォルダーをマウント
Compute サービス (nova) を設定して、初回起動プロセスの一環として複数のページサイズを処理することができます。初回起動プロセスでは、初めてノードを起動する際に heat テンプレート設定をすべてのノードに追加します。これ以降は (たとえば、オーバークラウドスタックの更新時)、これらのテンプレートを追加してもこれらのスクリプトは実行されません。
手順
-
アンダークラウドに
stackユーザーとしてログインします。 stackrcファイルを取得します。[stack@director ~]$ source ~/stackrc- Compute 環境ファイルを開きます。
KernelArgsパラメーターを設定することで、さまざまなサイズの huge page を作成できます。parameter_defaults: ComputeParameters: ... KernelArgs: "default_hugepagesz=1GB hugepagesz=1G hugepages=32 hugepagesz=2M hugepages=4096"その他の環境ファイルと共に Compute 環境ファイルをスタックに追加して、オーバークラウドをデプロイします。
(undercloud)$ openstack overcloud deploy --templates \ -e [your environment files] \ -e /home/stack/templates/<compute_environment_file>.yamlhuge 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 は以下のタスクを実行します。
-
デフォルトの
dev-hugepages.mountマウントユニットファイルをマスクして、ページサイズを使用して新しいマウントを作成できるようにします。 - フォルダーが作成されることを保証します。
- ページサイズごとに systemd ユニットファイルを作成します。
-
custom_hugepage_pagesizes変数で定義されたページサイズに対して、各マウントユニットファイルを有効にします。
-
デフォルトの
オプション:
/devフォルダーは、nova_computeおよびnova_libvirtコンテナーに自動的にバインドマウントされます。huge page マウントに別の宛先を使用している場合は、そのマウントをnova_computeおよびnova_libvirtコンテナーに渡します。parameter_defaults: NovaComputeOptVolumes: - /opt/dev:/opt/dev NovaLibvirtOptVolumes: - /opt/dev:/opt/devベアメタルデプロイメント定義ファイル
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'ノードをプロビジョニングします。
$ (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> を、ご使用のノード定義ファイルの名前に置き換えてください。
-
オプション: