8.2. 配置 PCI 透传 Compute 节点
要让您的云用户创建附加了 PCI 设备的实例,您必须配置具有 PCI 设备和 Controller 节点的 Compute 节点。
流程
-
创建一个环境文件,以在 overcloud 上为 PCI 透传配置 Controller 节点,如
pci_passthrough_controller.yaml
。 将
PciPassthroughFilter
添加到pci_passthrough_controller.yaml
中的NovaSchedulerEnabledFilters
参数中:parameter_defaults: NovaSchedulerEnabledFilters: - AvailabilityZoneFilter - ComputeFilter - ComputeCapabilitiesFilter - ImagePropertiesFilter - ServerGroupAntiAffinityFilter - ServerGroupAffinityFilter - PciPassthroughFilter - NUMATopologyFilter
要为 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
。可选: 要为 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"
-
要在 overcloud 上为 PCI 透传配置 Compute 节点,请创建一个环境文件,如
pci_passthrough_compute.yaml
。 要为 Compute 节点上的设备指定可用的 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
的指南。您必须在 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 节点上的别名相同。因此,如果您在
pci_passthrough_controller.yaml
中添加了numa_affinity
到nova::pci::aliases
,那么您还必须将其添加到pci_passthrough_compute.yaml
中的nova::pci::aliases
中。要在 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
"。注意当您首先将
KernelArgs
参数添加到角色的配置中时,overcloud 节点会自动重启。如果需要,您可以禁用自动重新引导节点,并在每个 overcloud 部署后手动重启节点。如需更多信息,请参阅配置手动节点重新引导以定义KernelArgs
。使用其他环境文件将自定义环境文件添加到堆栈中,并部署 overcloud:
(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 设备。以下示例请求两个设备,每个设备的厂商 ID 为
8086
,产品 ID 为1572
,使用第 7 步中定义的别名:(overcloud)$ openstack flavor set \ --property "pci_passthrough:alias"="a1:2" device_passthrough
可选: 要覆盖 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 关联性策略配置才会生效。
验证
使用 PCI 透传设备创建实例:
$ openstack server create --flavor device_passthrough \ --image <image> --wait test-pci
- 以云用户身份登录实例。如需更多信息,请参阅 连接到实例。
要验证 PCI 设备是否可从实例访问,请从实例输入以下命令:
$ lspci -nn | grep <device_name>