5.2. 配置 PCI 透传 Compute 节点

要让您的云用户创建附加 PCI 设备的实例,您必须配置具有 PCI 设备和 Controller 节点的 Compute 节点。

流程

  1. 创建环境文件,以在 overcloud 上为 PCI 透传配置 Controller 节点,如 pci_passthrough_controller.yaml
  2. PciPassthroughFilter 添加到 pci_passthrough_controller.yaml 中的 NovaSchedulerDefaultFilters 参数中:

    parameter_defaults:
      NovaSchedulerDefaultFilters: ['AvailabilityZoneFilter','ComputeFilter','ComputeCapabilitiesFilter','ImagePropertiesFilter','ServerGroupAntiAffinityFilter','ServerGroupAffinityFilter','PciPassthroughFilter','NUMATopologyFilter']
  3. 要为 Controller 节点上的设备指定 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 passthrough 设备类型字段

    注意

    如果 nova-api 服务在不同于 Controller 角色的角色中运行时,将 Controller ExtraConfig 替换为用户角色,格式为 <Role>ExtraConfig

  4. 可选: 要为 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"
  5. 要在 overcloud 上为 PCI 透传配置 Compute 节点,请创建一个环境文件,如 pci_passthrough_compute.yaml
  6. 要为 Compute 节点上的设备指定可用的 PCI,请使用 vendor_idproduct_id 选项将所有匹配的 PCI 设备添加到可用于透传到实例的 PCI 设备池中。例如,要将所有 Intel® Ethernet Controller X710 设备添加到可用于透传到实例的 PCI 设备池中,请将以下配置添加到 pci_passthrough_compute.yaml 中:

    parameter_defaults:
      ...
      ComputePCIParameters:
        NovaPCIPassthrough:
          - vendor_id: "8086"
            product_id: "1572"

    有关如何配置 NovaPCIPassthrough 的更多信息,请参阅配置 NovaPCIPassthrough指南

  7. 您必须在 Compute 节点上为实例迁移和调整大小操作创建 PCI 别名副本。要为 PCI 透传 Compute 节点上的设备指定 PCI 别名,请将以下内容添加到 pci_passthrough_compute.yaml 中:

    parameter_defaults:
      ...
      ComputePCIExtraConfig:
        nova::pci::aliases:
          - name: "a1"
            product_id: "1572"
            vendor_id: "8086"
            device_type: "type-PF"
    注意

    Compute 节点别名必须与 Controller 节点上的别名相同。因此,如果您将 numa_affinity 添加到 pci_passthrough_controller.yaml 中的 nova::pci::aliases 中,则必须将其添加到 pci_passthrough_compute.yaml 中的 nova::pci::aliases 中。

  8. 要在 Compute 节点的服务器 BIOS 中启用 IOMMU 来支持 PCI 透传,请将 KernelArgs 参数添加到 pci_passthrough_compute.yaml 中。例如,使用以下 KernalArgs 设置来启用 Intel IOMMU:

    parameter_defaults:
      ...
      ComputePCIParameters:
        KernelArgs: "intel_iommu=on iommu=pt"

    要启用 AMD IOMMU,将 KernelArgs 设置为 "amd_iommu=on iommu=pt "。

  9. 使用其他环境文件将自定义环境文件添加到堆栈中,并部署 overcloud:

    (undercloud)$ openstack overcloud deploy --templates \
      -e [your environment files] \
      -e /home/stack/templates/pci_passthrough_controller.yaml \
      -e /home/stack/templates/pci_passthrough_compute.yaml \
  10. 创建并配置您的云用户可用于请求 PCI 设备的类别。以下示例请求两个设备,每个设备 ID 为 8086,产品 ID 为 1572,使用第 7 步中定义的别名:

    (overcloud)# openstack flavor set \
     --property "pci_passthrough:alias"="a1:2" device_passthrough
  11. 可选: 要覆盖 PCI 透传设备的默认 NUMA 关联性策略,您可以将 NUMA 关联性策略属性键添加到 flavor 或镜像中:

    • 要使用类别覆盖默认 NUMA 关联性策略,请添加 hw:pci_numa_affinity_policy 属性键:

      (overcloud)# openstack flavor set \
       --property "hw:pci_numa_affinity_policy"="required" \
       device_passthrough

      有关 hw: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 关联性策略,则属性值必须匹配。flavor 设置优先于镜像和默认设置。因此,只有在类别上未设置属性时,镜像上的 NUMA 关联性策略配置才会生效。

验证

  1. 使用 PCI 透传设备创建实例:

    # openstack server create --flavor device_passthrough \
     --image <image> --wait test-pci
  2. 以云用户身份登录实例。如需更多信息,请参阅 连接到实例
  3. 要验证是否可从实例访问 PCI 设备,请从实例输入以下命令:

    $ lspci -nn | grep <device_name>