8.2. PCI パススルー用コンピュートノードの設定
クラウドユーザーが PCI デバイスがアタッチされたインスタンスを作成できるようにするには、PCI デバイスを持つコンピュートノードとコントローラーノードの両方を設定する必要があります。
手順
-
PCI パススルー用にオーバークラウド上のコントローラーノードを設定するには、環境ファイル (例:
pci_passthru_controller.yaml) を作成します。 pci_passthrough_controller.yamlのNovaSchedulerEnabledFiltersパラメーターにPciPassthroughFilterを追加します。parameter_defaults: NovaSchedulerEnabledFilters: - AvailabilityZoneFilter - ComputeFilter - ComputeCapabilitiesFilter - ImagePropertiesFilter - ServerGroupAntiAffinityFilter - ServerGroupAffinityFilter - PciPassthroughFilter - NUMATopologyFilterコントローラーノード上のデバイスの PCI エイリアスを指定するには、以下の設定を
pci_passthrough_controller.yamlに追加します。parameter_defaults: ... ControllerExtraConfig: nova::pci::aliases: - name: "a1" product_id: "1572" vendor_id: "8086" device_type: "type-PF"device_typeフィールドの設定の詳細は、PCI パススルーデバイス種別フィールド を参照してください。注記nova-apiサービスがController以外のロールで実行されている場合は、ControllerExtraConfigを<Role>ExtraConfigの形式でユーザーロールに置き換えます。(オプション): PCI パススルーデバイスにデフォルトの NUMA アフィニティーポリシーを設定するには、ステップ 3 の
numa_policy設定にnova::pci::aliases:を追加します。parameter_defaults: ... ControllerExtraConfig: nova::pci::aliases: - name: "a1" product_id: "1572" vendor_id: "8086" device_type: "type-PF" numa_policy: "preferred"-
PCI パススルー用にオーバークラウド上のコンピュートノードを設定するには、環境ファイル (例:
pci_passthrough_compute.yaml) を作成します。 コンピュートノード上のデバイスの利用可能な PCI を指定するには、
vendor_idおよびproduct_idオプションを使用して、インスタンスへのパススルーに使用できる PCI デバイスのプールに、一致するすべての PCI デバイスを追加します。たとえば、すべての Intel® Ethernet Controller X710 デバイスをインスタンスへのパススルーに使用できる PCI デバイスのプールに追加するには、以下の設定をpci_passthrough_compute.yamlに追加します。parameter_defaults: ... ComputePCIParameters: NovaPCIPassthrough: - vendor_id: "8086" product_id: "1572"NovaPCIPassthroughの設定方法の詳細は、NovaPCIPassthrough設定のガイドライン を参照してください。インスタンスの移行およびサイズ変更の操作を行うために、コンピュートノードの PCI エイリアスのコピーを作成する必要があります。PCI パススルー用コンピュートノード上のデバイスの PCI エイリアスを指定するには、以下の設定を
pci_passthrough_compute.yamlに追加します。parameter_defaults: ... ComputePCIExtraConfig: nova::pci::aliases: - name: "a1" product_id: "1572" vendor_id: "8086" device_type: "type-PF"注記コンピュートノードのエイリアスは、コントローラーノードのエイリアスと同じでなければなりません。したがって、
pci_passthrough_controller.yamlのnova::pci::aliasesにnuma_affinityを追加した場合は、pci_passthrough_compute.yamlのnova::pci::aliasesにも追加する必要があります。PCI パススルーをサポートするためにコンピュートノードのサーバー BIOS で IOMMU を有効にするには、
pci_passthrough_compute.yamlにKernelArgsパラメーターを追加します。Intel IOMMU を有効にするには、以下の
KernalArgs設定を使用します。parameter_defaults: ... ComputePCIParameters: KernelArgs: "intel_iommu=on iommu=pt vfio-pci.ids=<pci_device_id> rd.driver.pre=vfio-pci"- <pci_device_id> を PCI デバイス ID (例:10de:1eb8)に置き換えます。
AMD IOMMU を有効にするには、以下の KernalArgs 設定を使用します。
parameter_defaults: ... ComputePCIParameters: KernelArgs: "amd_iommu=on iommu=pt"注記KernelArgsパラメーターをロールの設定に初めて追加すると、オーバークラウドノードが自動的に再起動されます。必要に応じて、ノードの自動再起動を無効にし、代わりに各オーバークラウドのデプロイ後にノードの再起動を手動で実行できます。詳細は、KernelArgsを定義するための手動でのノード再起動の設定 を参照してください。
その他の環境ファイルと共にこれらのカスタム環境ファイルをスタックに追加して、オーバークラウドをデプロイします。
(undercloud)$ openstack overcloud deploy --templates \ -e [your environment files] \ -r /home/stack/templates/roles_data_pci_passthrough.yaml \ -e /home/stack/templates/network-environment.yaml \ -e /home/stack/templates/pci_passthrough_controller.yaml \ -e /home/stack/templates/pci_passthrough_compute.yaml \ -e /home/stack/templates/overcloud-baremetal-deployed.yaml \ -e /home/stack/templates/node-info.yamlクラウドユーザーが PCI デバイスを要求するのに使用できるフレーバーを作成および設定します。以下の例では、ステップ 7 で定義したエイリアスを使用して、それぞれベンダー ID および製品 ID が
8086および1572の 2 つのデバイスを要求します。(overcloud)$ openstack flavor set \ --property "pci_passthrough:alias"="a1:2" device_passthrough(オプション) フレーバーまたはイメージに NUMA アフィニティーポリシーの属性キーを追加して、PCI パススルーデバイスのデフォルト NUMA アフィニティーポリシーをオーバーライドすることができます。
フレーバーを使用してデフォルトの NUMA アフィニティーポリシーをオーバーライドするには、
hw:pci_numa_affinity_policy属性キーを追加します。(overcloud)$ openstack flavor set \ --property "hw:pci_numa_affinity_policy"="required" \ device_passthroughhw:pci_numa_affinity_policyの有効な値の詳細は、フレーバーのメタデータ を参照してください。イメージを使用してデフォルトの NUMA アフィニティーポリシーをオーバーライドするには、
hw_pci_numa_affinity_policy属性キーを追加します。(overcloud)$ openstack image set \ --property hw_pci_numa_affinity_policy=required \ device_passthrough_image注記イメージとフレーバーの両方で NUMA アフィニティーポリシーを設定する場合には、属性の値が一致している必要があります。フレーバーの設定は、イメージおよびデフォルトの設定よりも優先されます。したがって、イメージの NUMA アフィニティーポリシーの設定は、フレーバーで属性が設定されていない場合に限り効果を持ちます。
検証
PCI パススルーデバイスを設定してインスタンスを作成します。
$ openstack server create --flavor device_passthrough \ --image <image> --wait test-pci- クラウドユーザーとしてインスタンスにログインします。詳細は、インスタンスへの接続 を参照してください。
インスタンスが PCI デバイスにアクセスできることを確認するには、インスタンスから以下のコマンドを入力します。
$ lspci -nn | grep <device_name>