搜索

第 7 章 部署 SR-IOV 技术

download PDF

在 Red Hat OpenStack Platform NFV 部署中,当您通过虚拟资源从实例直接访问共享 PCIe 资源时,您可以使用单一根 I/O 虚拟化(SR-IOV)实现更高的性能。

7.1. 配置 SR-IOV

要使用单一根 I/O 虚拟化(SR-IOV)部署 Red Hat OpenStack Platform(RHOSP),请配置具有 SR-IOV 功能的共享 PCIe 资源,以便实例可以请求直接访问。

注意

以下 CPU 分配、内存分配和 NIC 配置是示例,可能与您的用例不同。

先决条件

  • 有关如何在部署 overcloud 前安装和配置 undercloud 的详情,请参阅 Director 安装和使用指南

    注意

    不要手动编辑 director heat 模板修改的 /etc/tuned/cpu-partitioning-variables.conf 中的任何值。

  • 访问 stack 用户的 undercloud 主机和凭据。

流程

  1. stack 用户的身份登录 undercloud。
  2. Source stackrc 文件:

    [stack@director ~]$ source ~/stackrc
  3. 生成一个名为 roles_data_compute_sriov.yaml 的新角色数据文件,其中包含 ControllerComputeSriov 角色:

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

    ComputeSriov 是 RHOSP 安装提供的自定义角色,除了默认的计算服务外,还包括 NeutronSriovAgentNeutronSriovHostConfig 服务。

  4. 要准备 SR-IOV 容器,请在生成 overcloud_images.yaml 文件时包括 neutron-sriov.yamlroles_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_idproduct_id,请在具有 PCI 卡的物理服务器中使用以下命令之一:

    • 要从部署的 overcloud 返回 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)
    • 如果您尚未部署 overcloud,返回 vendor_idproduct_id (PF),请使用以下命令:

      (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 计算节点配置角色特定参数:

      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 计算节点配置 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 参数的详情,请参考 为实例创建配置计算服务指南中的 配置 NovaPCIPassthrough
    • 使用 PCI 设备所在的物理网络的名称替换 <physical_network>

      注意

      在配置 PCI 透传时不要使用 devname 参数,因为 NIC 的设备名称可能会改变。要在 PF 上创建 Networking 服务(neutron)端口,请指定 vendor_idproduct_id 以及 NovaPCIPassthrough 中的 PCI 设备地址,并使用 --vnic-type direct-physical 选项创建端口。要在虚拟功能(VF)上创建网络服务端口,在 NovaPCIPassthrough 中指定 vendor_idproduct_id,并使用 --vnic-type direct 选项创建端口。vendor_idproduct_id 参数的值可能在物理功能(PF)和 VF 上下文之间不同。有关如何配置 NovaPCIPassthrough 的更多信息,请参阅 为实例创建配置计算服务指南中的 配置 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 参数取代了网络配置 模板中的 NeutronSriovNum VFs 参数。红帽不支持在部署后修改 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 脚本。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.