美文网首页
OpenStack配置PCI直通(PCI passthrough

OpenStack配置PCI直通(PCI passthrough

作者: 2f486f1742f0 | 来源:发表于2017-11-15 01:57 被阅读789次

    *azeqjz OpenStack: *

    除OVS与硬直通SR-IOV外,还有PCI直通,即物理网卡给一个虚拟机网口独占。

    PCI直通特性允许虚拟机完全访问与直接控制物理PCI设备。此机制对任何类型的PCI设备都是通用的,并且可以与网络接口卡(NIC),图形处理单元(GPU)或可以连接到PCI总线的任何其他设备一起运行。

    有的PCI设备提供SR-IOV能力,当使用SR-IOV时,物理设备被虚拟呈现为多个PCI设备。虚拟PCI设备被分配到同一个或多个虚拟机。在PCI直通的情况下,整个物理设备只能分配给一个虚拟机,并且不能共享。

    执行以下步骤使能PCI直通(以地址为0000:41:00.0的PCI设备为例。
    ):

    1. 配置nova-scheduler (Controller)
    2. 配置nova-api (Controller)**
    3. 配置flavor (Controller)
    4. 使能PCI直通 (Compute)
    5. 在nova.conf配置PCI设备 (Compute)

    1. Configure nova-scheduler (Controller)

    1. 参考 Configure nova-scheduler配置nova-scheduler
      在运行nova-scheduler的每个控制节点,把PciPassthroughFilter添加到scheduler_default_filters,以默认使能PciPassthroughFilter过滤器。同时,确保nova.conf [DEFAULT]下的scheduler_available_filters参数设置为all_filters,以使能compute服务提供的所有过滤器。
    [DEFAULT]
    scheduler_default_filters = RetryFilter, AvailabilityZoneFilter, RamFilter, ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter, ServerGroupAntiAffinityFilter, ServerGroupAffinityFilter, PciPassthroughFilter
    scheduler_available_filters = nova.scheduler.filters.all_filters
    
    1. 重启nova-scheduler服务。

    2. 配置nova-api (Controller)**

    1. 指定设备的PCI别名。
      配置PCI别名a1来请求一个vendor_id为0x8086和product_id为0x154d的PCI设备。vendor_id和product_id对应于地址为0000:41:00.0的PCI设备。
      编辑/etc/nova/nova.conf:
    [pci]
    alias = { "vendor_id":"8086", "product_id":"154d", "device_type":"type-PF", "name":"a1" }
    

    获取alias的更多信息,参考nova.conf中的alias配置项
    PCI直通配置项:

    配置项 = 默认值
    alias = []

    描述
    要求填写PCI直通设备的别名。
    这允许用户在flavor的extra_spec属性中指定PCI设备的别名,而不需给出指定PCI设备属性要求。

    可能的值:
    描述别名的JSON值列表,例如:
    alias = { “name”: “QuickAssist”, “product_id”: “0443”, “vendor_id”: “8086”, “device_type”: “type-PCI” }
    定义了Intel QuickAssist卡的别名。有效的值为:

    • “name”: PCI设备的别名
    • “product_id”: 设备的十六进制Product ID
    • “vendor_id”: 设备的十六进制Vendor ID
    • “device_type”: PCI设备的类型,有效的值为: “type-PCI”, “type-PF” and “type-VF”。
    1. 重启nova-api服务

    3. 配置flavor (Controller)

    通过flavor为guest虚拟机配置两个PCI设备,每个PCI设备的vendor_id0x8086product_id0x154d

    # openstack flavor set m1.large --property "pci_passthrough:alias"="a1:2"
    

    具体参考flavor

    $ openstack flavor set FLAVOR-NAME \
        --property pci_passthrough:alias=ALIAS:COUNT
    
    • COUNT: (整数) 分配给虚拟机的ALIAS中指定类型的PCI设备数量T。

    4.使能PCI passthrough (Compute)

    使能VT-d和IOMMU,参考Create Virtual Functions中的步骤一与二:
    Step 1 BIOS开启SR-IOV与VT-d。
    Step 2 在Linux中使能IOMMU,例如使用GRUB把intel_iommu=on添加到内核参数。

    5.在nova.conf配置PCI设备 (Compute)

    1. 配置nova-compute,允许PCI设备直通到虚拟机,编辑/etc/nova/nova.conf文件:
    [pci]
    passthrough_whitelist = { "address": "0000:41:00.0" }
    

    或者指定多个PCI设备:

    [pci]
    passthrough_whitelist = { "vendor_id": "8086", "product_id": "10fb" }
    

    所有vendor_id与product_id 匹配的PCI设备会被添加到可以直通分配给虚拟机的PCI设备池。

    更多关于passthrough_whitelist的用法,参考nova.conf中的passthrough_whitelist配置项

    1. 指定PCI设备的alias。

    从Newton版本开始,为了resize带有PCI设备的虚拟机,需要在计算节点上同时配置PCI设备alias。

    配置请求alias为a1的PCI设备,其中vendor_id0x8086product_id0x154d,对应地址为 0000:41:00.0的PCI设备。

    编辑/etc/nova/nova.conf文件:

    [pci]
    alias = { "vendor_id":"8086", "product_id":"154d", "device_type":"type-PF", "name":"a1" }
    
    1. 重启nova-compute服务。

    6. 创建带PCI直通设备的虚拟机实例

    nova-scheduler选择目标主机,这台主机的PCI设备的vendor_id和product_id可以和flavor中定义的alias设备匹配。

    # openstack server create --flavor m1.large --image cirros-0.3.5-x86_64-uec --wait test-pci
    

    可以通过lspci | grep -i eth(型号与产品id等)查询环境已有硬件是否符合要求。

    参考原文:Attaching physical PCI devices to guests

    相关文章

      网友评论

          本文标题:OpenStack配置PCI直通(PCI passthrough

          本文链接:https://www.haomeiwen.com/subject/jygqvxtx.html