第7章 SR-IOV テクノロジーのデプロイ

Red Hat OpenStack Platform NFV デプロイメントでは、仮想リソースを通じたインスタンスから共有 PCIe リソースへの直接アクセスを設定した場合、Single Root I/O Virtualization (SR-IOV) を使用してより高いパフォーマンスが得られます。

7.1. SR-IOV の設定

Single Root I/O Virtualization (SR-IOV) と共に Red Hat Open Stack Platform (RHOSP) をデプロイするには、インスタンスが直接アクセスを要求できる SR-IOV 機能を持つ共有 PCIe リソースを設定します。

注記

以下に示す CPU 割り当て、メモリーの確保、および NIC の設定は一例であり、実際のユースケースとは異なる場合があります。

前提条件

  • オーバークラウドのデプロイ前にアンダークラウドをインストールおよび設定する方法の詳細は、director のインストールと使用方法 を参照してください。

    注記

    director heat テンプレートが変更する /etc/tuned/cpu-partitioning-variables.conf の値を、手動で編集しないでください。

  • アンダークラウドホストへのアクセスと stack ユーザーの認証情報。

手順

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

    [stack@director ~]$ source ~/stackrc
  3. ControllerComputeSriovのロールを含むroles_data_compute_sriov.yamlという名前の新しいロールデータファイルを生成します。

    (undercloud)$ openstack overcloud roles \
     generate -o /home/stack/templates/roles_data_compute_sriov.yaml \
     Controller ComputeSriov

    ComputeSriov は、RHOSP インストールで提供されるカスタムロールで、デフォルトの Compute サービスに加えて、NeutronSriovAgent サービスと NeutronSriovHostConfig サービスが含まれます。

  4. SR-IOV コンテナーを準備するには、overcloud_images.yaml ファイルを生成するときにneutron-sriov.yamlファイルとroles_data_compute_sriov.yamlファイルを含めます。

    $ sudo openstack tripleo container image prepare \
      --roles-file ~/templates/roles_data_compute_sriov.yaml \
      -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-sriov.yaml \
      -e ~/containers-prepare-parameter.yaml \
      --output-env-file=/home/stack/templates/overcloud_images.yaml

    コンテナーイメージの準備に関する詳しい情報は、director のインストールと使用方法 ガイドの コンテナーイメージの準備 を参照してください。

  5. 環境ファイルディレクトリーに/usr/share/openstack-tripleo-heat-templates/environments/network-environment.yamlファイルのコピーを作成します。

    $ cp /usr/share/openstack-tripleo-heat-templates/environments/network-environment.yaml /home/stack/templates/network-environment-sriov.yaml
  6. network-environment-sriov.yamlファイルのparameter_defaultsに次のパラメーターを追加して、クラスターとハードウェア設定の SR-IOV ノードを設定します。

      NeutronNetworkType: 'vlan'
      NeutronNetworkVLANRanges:
        - tenant:22:22
        - tenant:25:25
      NeutronTunnelTypes: ''
  7. 各 PCI デバイスタイプのvendor_idおよびproduct_idを確認するには、PCI カードを備えた物理サーバーで次のコマンドのいずれかを使用します。

    • デプロイされたオーバークラウドからvendor_idproduct_idを返すには、次のコマンドを使用します。

      # lspci -nn -s  <pci_device_address>
      3b:00.0 Ethernet controller [0200]: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ [<vendor_id>: <product_id>] (rev 02)
    • オーバークラウドをまだデプロイしていない場合に Physical Function (PF) のvendor_idproduct_idを返すには、次のコマンドを使用します。

      (undercloud) [stack@undercloud-0 ~]$ openstack baremetal introspection data save <baremetal_node_name> | jq '.inventory.interfaces[] | .name, .vendor, .product'
  8. network-environment-sriov.yamlファイルで SR-IOV Compute ノードのロール固有のパラメーターを設定します。

      ComputeSriovParameters:
        IsolCpusList: "1-19,21-39"
        KernelArgs: "default_hugepagesz=1GB hugepagesz=1G hugepages=32 iommu=pt intel_iommu=on isolcpus=1-19,21-39"
        TunedProfileName: "cpu-partitioning"
        NeutronBridgeMappings:
          - tenant:br-link0
        NeutronPhysicalDevMappings:
          - tenant:p7p1
        NovaComputeCpuDedicatedSet: '1-19,21-39'
        NovaReservedHostMemory: 4096
    注記

    NovaVcpuPinSetパラメーターは非推奨になり、専用の固定されたワークロード用にNovaComputeCpuDedicatedSetに置き換えられました。

  9. network-environment-sriov.yamlファイルで SR-IOV Compute ノードの PCI パススルーデバイスを設定します。

      ComputeSriovParameters:
        ...
        NovaPCIPassthrough:
          - vendor_id: "<vendor_id>"
            product_id: "<product_id>"
            address: <NIC_address>
            physical_network: "<physical_network>"
        ...
    • <vendor_id> を PCI デバイスのベンダー ID に置き換えます。
    • <product_id> を PCI デバイスの製品 ID に置き換えます。
    • <NIC_address> を PCI デバイスのアドレスに置き換えます。address パラメーターの設定方法に関する情報は、インスタンス作成のための Compute サービスの設定 ガイドの NovaPCIPassthrough の設定に関するガイドライン を参照してください。
    • <physical_network> を、PCI デバイスが配置されている物理ネットワークの名前に置き換えます。

      注記

      NIC のデバイス名は変更される可能性があるため、PCI パススルーを設定する場合は devname パラメーターを使用しないでください。PF で Networking サービス (neutron) ポートを作成するには、NovaPCIPassthroughvendor_idproduct_id、および PCI デバイスアドレスを指定し、--vnic-type direct-physical オプションでポートを作成します。Virtual Function (VF) に Networking サービスのポートを作成するには、NovaPCIPassthroughvendor_idproduct_idを指定し、--vnic-type directオプションを使用してポートを作成します。vendor_idおよびproduct_idパラメーターの値は、Physical Function (PF) コンテキストと VF コンテキストの間で異なる場合があります。NovaPCIPassthrough の設定方法の詳細は、インスタンス作成のための Compute サービスの設定 ガイドの NovaPCIPassthrough の設定に関するガイドライン を参照してください。

  10. compute.yaml ネットワーク設定テンプレートで、SR-IOV が有効なインターフェイスを設定します。SR-IOV VF を作成するには、インターフェイスをスタンドアロン NIC として設定します。

                 - type: sriov_pf
                    name: p7p3
                    mtu: 9000
                    numvfs: 10
                    use_dhcp: false
                    defroute: false
                    nm_controlled: true
                    hotplug: true
                    promisc: false
    
                  - type: sriov_pf
                    name: p7p4
                    mtu: 9000
                    numvfs: 10
                    use_dhcp: false
                    defroute: false
                    nm_controlled: true
                    hotplug: true
                    promisc: false
    注記

    numvfs パラメーターは、ネットワーク設定テンプレートの NeutronSriovNumVFs パラメーターに代わるものです。Red Hat では、デプロイ後の NeutronSriovNumVFs パラメーターまたは numvfs パラメーターの変更をサポートしません。デプロイメント後にいずれかのパラメーターを変更すると、その PF に SR-IOV ポートを持つ実行中のインスタンスが中断する可能性があります。この場合、これらのインスタンスをハードリブートして、SR-IOV PCI デバイスを再び利用可能にする必要があります。

  11. デフォルトフィルターのリストに、値 AggregateInstanceExtraSpecsFilter が含まれる状態にします。

    NovaSchedulerDefaultFilters:
    ['AvailabilityZoneFilter','ComputeFilter','ComputeCapabilitiesFilter','ImagePropertiesFilter','Serve
    rGroupAntiAffinityFilter','ServerGroupAffinityFilter','PciPassthroughFilter','AggregateInstanceExt
    raSpecsFilter']
  12. overcloud_deploy.sh スクリプトを実行します。