12.2. RT-KVM 対応の OVS-DPDK の設定
12.2.1. Real-time Compute 用のノードの指定
Real-time Compute のノードを指定するには、新しいロールファイルを作成して Real-time Compute のロールを設定し、Real-time Compute リソースクラスを使用してベアメタルノードを設定して、リアルタイムの Compute ノードにタグを付けます。
以下の手順は、まだプロビジョニングされていない新しいオーバークラウドノードに適用されます。すでにプロビジョニングされている既存のオーバークラウドノードにリソースクラスを割り当てるには、オーバークラウドをスケールダウンしてノードのプロビジョニングを解除してから、オーバークラウドをスケールアップして、新しいリソースクラスの割り当てでノードを再プロビジョニングします。詳細は、director を使用した Red Hat OpenStack Platform のインストールと管理 の オーバークラウドノードのスケーリング を参照してください。
手順
-
アンダークラウドホストに
stack
ユーザーとしてログインします。 stackrc
アンダークラウド認証情報ファイルを入手します。[stack@director ~]$ source ~/stackrc
-
/usr/share/openstack-tripleo-heat-templates/environments/compute-real-time-example.yaml
ファイルをベースに、ComputeRealTime
ロールのパラメーターを設定するcompute-real-time.yaml
環境ファイルを作成します。 ComputeRealTime
ロールとオーバークラウドに必要なその他のロールを含む、roles_data_rt.yaml
という名前の新しいロールデータファイルを生成します。次の例では、ロールデータファイルrole_data_rt.yaml
を生成します。これには、ロールController
、Compute
、およびComputeRealTime
が含まれます。(undercloud)$ openstack overcloud roles generate \ -o /home/stack/templates/roles_data_rt.yaml \ ComputeRealTime Compute Controller
ComputeRealTime ロールの roles_data_rt.yaml ファイルを更新します。
################################################### # Role: ComputeRealTime # ################################################### - name: ComputeRealTime description: | Real Time Compute Node role CountDefault: 1 # Create external Neutron bridge tags: - compute - external_bridge networks: InternalApi: subnet: internal_api_subnet Tenant: subnet: tenant_subnet Storage: subnet: storage_subnet HostnameFormatDefault: '%stackname%-computert-%index%' deprecated_nic_config_name: compute-rt.yaml
オーバークラウド用の ComputeRealTime ノードをノード定義のテンプレート
node.json
またはnode.yaml
に追加して、そのノードを登録します。詳細は、director を使用した Red Hat OpenStack Platform のインストールと管理 の オーバークラウドのノードの登録 を参照してください。
ノードのハードウェアを検査します。
(undercloud)$ openstack overcloud node introspect --all-manageable --provide
詳細は、director を使用した Red Hat OpenStack Platform のインストールと管理 の ベアメタルノードハードウェアのインベントリーの作成 を参照してください。
ComputeRealTime 用に指定する各ベアメタルノードに、カスタム ComputeRealTime リソースクラスをタグ付けします。
(undercloud)$ openstack baremetal node set \ --resource-class baremetal.RTCOMPUTE <node>
<node> は、ベアメタルノードの名前または UUID に置き換えます。
ComputeRealTime ロールをノード定義ファイル
overcloud-baremetal-deploy.yaml
に追加し、予測ノード配置、リソースクラス、ネットワークトポロジー、またはノードに割り当てるその他の属性を定義します。- name: Controller count: 3 ... - name: Compute count: 3 ... - name: ComputeRealTime count: 1 defaults: resource_class: baremetal.RTCOMPUTE network_config: template: /home/stack/templates/nic-config/<role_topology_file>
<role_topology_file>
をComputeRealTime
ロールに使用するトポロジーファイルの名前 (myRoleTopology.j2
など) に置き換えます。既存のネットワークトポロジーを再利用するか、ロール用の新しいカスタムネットワークインターフェイステンプレートを作成できます。詳細は、director を使用した Red Hat OpenStack Platform のインストールと管理 の カスタムネットワークインターフェイステンプレートの定義 を参照してください。デフォルトのネットワーク定義設定を使用するには、ロール定義に
network_config
を含めないでください。ノード定義ファイルでノード属性を設定するために使用できるプロパティーに関する詳細は、director を使用した Red Hat OpenStack Platform のインストールと管理 の ベアメタルノードのプロビジョニング属性 を参照してください。
ノード定義ファイルの例については、director を使用した Red Hat OpenStack Platform のインストールと管理 の ノード定義ファイルの例 を参照してください。
次の Ansible Playbook を作成してノードのプロビジョニング中にカーネルを設定し、Playbook を
/home/stack/templates/fix_rt_kernel.yaml
として保存します。# RealTime KVM fix until BZ #2122949 is closed- - name: Fix RT Kernel hosts: allovercloud any_errors_fatal: true gather_facts: false vars: reboot_wait_timeout: 900 pre_tasks: - name: Wait for provisioned nodes to boot wait_for_connection: timeout: 600 delay: 10 tasks: - name: Fix bootloader entry become: true shell: |- set -eux new_entry=$(grep saved_entry= /boot/grub2/grubenv | sed -e s/saved_entry=//) source /etc/default/grub sed -i "s/options.*/options root=$GRUB_DEVICE ro $GRUB_CMDLINE_LINUX $GRUB_CMDLINE_LINUX_DEFAULT/" /boot/loader/entries/$(</etc/machine-id)$new_entry.conf cp -f /boot/grub2/grubenv /boot/efi/EFI/redhat/grubenv post_tasks: - name: Configure reboot after new kernel become: true reboot: reboot_timeout: "{{ reboot_wait_timeout }}" when: reboot_wait_timeout is defined
ノードプロビジョニングファイルの
ComputeOvsDpdkSriovRT
ロール定義に、Playbook として/home/stack/templates/fix_rt_kernel.yaml
を含めます。- name: ComputeOvsDpdkSriovRT ... ansible_playbooks: - playbook: /usr/share/ansible/tripleo-playbooks/cli-overcloud-node-kernelargs.yaml extra_vars: kernel_args: "default_hugepagesz=1GB hugepagesz=1G hugepages=64 iommu=pt intel_iommu=on tsx=off isolcpus=2-19,22-39" reboot_wait_timeout: 900 tuned_profile: "cpu-partitioning" tuned_isolated_cores: "2-19,22-39" defer_reboot: true - playbook: /home/stack/templates/fix_rt_kernel.yaml extra_vars: reboot_wait_timeout: 1800
ノード定義ファイルでノード属性を設定するために使用できるプロパティーに関する詳細は、director を使用した Red Hat OpenStack Platform のインストールと管理 の ベアメタルノードのプロビジョニング属性 を参照してください。
ノード定義ファイルの例については、director を使用した Red Hat OpenStack Platform のインストールと管理 の ノード定義ファイルの例 を参照してください。
ロールの新しいノードをプロビジョニングします。
(undercloud)$ openstack overcloud node provision \ [--stack <stack> \ ] [--network-config \] --output <deployment_file> \ /home/stack/templates/overcloud-baremetal-deploy.yaml
-
オプション:
<stack>
をベアメタルノードがプロビジョニングされるスタックの名前に置き換えます。デフォルトはovercloud
です。 -
オプション:
--network-config
オプションの引数を含めて、Ansible Playbookcli-overcloud-node-network-config.yaml
にネットワーク定義を提供します。network_config
プロパティーを使用してネットワーク定義を定義しない場合、デフォルトのネットワーク定義が使用されます。 -
<deployment_file>
は、デプロイメントコマンドに含めるために生成する heat 環境ファイルの名前に置き換えます (例:/home/stack/templates/overcloud-baremetal-deployed.yaml)
。
-
オプション:
別のターミナルでプロビジョニングの進捗をモニタリングします。プロビジョニングが成功すると、ノードの状態が
available
からactive
に変わります。(undercloud)$ watch openstack baremetal node list
--network-config
オプションを指定せずにプロビジョニングコマンドを実行した場合は、network-environment.yaml
ファイルで<Role>NetworkConfigTemplate
パラメーターを設定して、NIC テンプレートファイルを指すようにします。parameter_defaults: ComputeNetworkConfigTemplate: /home/stack/templates/nic-configs/compute.j2 ComputeAMDSEVNetworkConfigTemplate: /home/stack/templates/nic-configs/<rt_compute>.j2 ControllerNetworkConfigTemplate: /home/stack/templates/nic-configs/controller.j2
<rt_compute>
をComputeRealTime
ロールのネットワークトポロジーが含まれるファイルの名前に置き換えます。たとえば、デフォルトのネットワークトポロジーを使用する場合はcomputert.yaml
です。その他の環境ファイルとともに環境ファイルをスタックに追加して、オーバークラウドをデプロイします。
(undercloud)$ openstack overcloud deploy --templates \ -r /home/stack/templates/roles_data_rt.yaml \ -e /home/stack/templates/overcloud-baremetal-deployed.yaml -e /home/stack/templates/node-info.yaml \ -e [your environment files] \ -e /home/stack/templates/compute-real-time.yaml
12.2.2. OVS-DPDK パラメーターの設定
parameter_defaults
セクションで、トンネル種別をvxlan
に、ネットワーク種別をvxlan,vlan
に、それぞれ設定します。NeutronTunnelTypes: 'vxlan' NeutronNetworkType: 'vxlan,vlan'
parameters_defaults
セクションで、ブリッジマッピングを設定します。# The OVS logical->physical bridge mappings to use. NeutronBridgeMappings: - dpdk-mgmt:br-link0
parameter_defaults
セクションで、ComputeOvsDpdkSriov
ロール向けにロール固有のパラメーターを設定します。########################## # OVS DPDK configuration # ########################## ComputeOvsDpdkSriovParameters: KernelArgs: "default_hugepagesz=1GB hugepagesz=1G hugepages=32 iommu=pt intel_iommu=on isolcpus=2-19,22-39" TunedProfileName: "cpu-partitioning" IsolCpusList: "2-19,22-39" NovaComputeCpuDedicatedSet: ['4-19,24-39'] NovaReservedHostMemory: 4096 OvsDpdkSocketMemory: "3072,1024" OvsDpdkMemoryChannels: "4" OvsPmdCoreList: "2,22,3,23" NovaComputeCpuSharedSet: [0,20,1,21] NovaLibvirtRxQueueSize: 1024 NovaLibvirtTxQueueSize: 1024
注記ゲストの作成時にエラーが発生するのを防ぐためには、各 NUMA ノードで少なくとも 1 つの CPU を (シブリングスレッドと共に) 割り当てます。上記の例では、
OvsPmdCoreList
パラメーターの値は NUMA 0 からのコア 2 および 22 ならびに NUMA 1 からのコア 3 および 23 です。注記本手順に示したとおり、これらのヒュージページは仮想マシンと、
OvsDpdkSocketMemory
パラメーターを使用する OVS-DPDK によって消費されます。仮想マシンが利用可能なヒュージページの数は、boot
パラメーターからOvsDpdkSocketMemory
を減算した値です。DPDK インスタンスに関連付けるフレーバーに
hw:mem_page_size=1GB
も追加する必要があります。注記OvsDpdkMemoryChannels
は、この手順に必須の設定です。最大限の機能を得るためには、適切なパラメーターおよび値で DPDK をデプロイするようにしてください。SR-IOV 向けにロール固有のパラメーターを設定します。
NovaPCIPassthrough: - vendor_id: "8086" product_id: "1528" address: "0000:06:00.0" trusted: "true" physical_network: "sriov-1" - vendor_id: "8086" product_id: "1528" address: "0000:06:00.1" trusted: "true" physical_network: "sriov-2"