You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

OpenStack Nova PCI直通异常问题:PCI别名未定义且虚拟机调度随机

OpenStack Nova PCI直通异常问题:PCI别名未定义且虚拟机调度随机

这种随机成功又随机报错的情况确实挺闹心的,结合你描述的现象,基本可以锁定是Nova调度过滤规则没生效,导致创建请求被随机分发到了没有配置GPU直通的计算节点上,再加上部分节点可能没正确配置PCI别名,才会出现“PCI别名未定义”的错误。下面是我整理的排查和解决思路,都是实际运维中验证过的:

  • 第一步:检查PCI别名配置的节点一致性
    首先要确保拥有GPU的计算节点的Nova配置里,正确定义了tesla-v100这个PCI别名——没有GPU的节点可以不用配置,但调度器得学会避开它们。
    在kolla部署环境中,你需要确认计算节点的Nova配置(通常通过kolla的ansible变量传递,比如nova_compute_pci_passthrough_whitelist)是否包含正确的设备信息,示例配置如下:

    [pci]
    passthrough_whitelist = {"vendor_id": "10de", "product_id": "1db3", "alias_name": "tesla-v100"}
    

    配置完成后,记得重新部署Nova计算服务让配置生效。

  • 第二步:强制启用Nova调度的PCI过滤规则
    这是最关键的一步!如果Nova调度器没启用PciPassthroughFilter,它完全不会管计算节点有没有GPU,只会随机分配请求。
    检查控制节点的nova-scheduler配置(nova.conf[filter_scheduler]段),确保PciPassthroughFilter在启用的过滤器列表里:

    [filter_scheduler]
    enabled_filters = RetryFilter,AvailabilityZoneFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,PciPassthroughFilter
    

    注意:过滤器列表里要包含这个规则,顺序不影响,但不能漏掉。配置后重启nova-scheduler服务。

  • 第三步:验证GPU节点的PCI设备是否被正确识别
    登录到有GPU的计算节点,执行以下命令,确认tesla-v100别名对应的PCI设备已经被Nova正确发现:

    nova-manage pci list --host <你的计算节点名称>
    

    如果输出里看不到这个别名的设备,那得先排查硬件层面的问题:比如BIOS里是否启用了IOMMU(Intel是VT-d,AMD是AMD-Vi),内核参数有没有添加intel_iommu=onamd_iommu=on,还要确保GPU没有被本地驱动占用(直通模式下不需要安装GPU驱动,反而要卸载避免占用)。

  • 第四步:检查虚拟机启动请求的参数正确性
    确保你创建VM时,确实正确指定了使用tesla-v100这个PCI别名,最稳妥的方式是通过云主机类型(flavor)绑定:

    openstack flavor set --property "pci_passthrough:alias"="tesla-v100:1" <你的flavor名称>
    

    这里要注意别名的拼写和大小写必须和配置文件里完全一致,哪怕差一个字符都会导致识别失败。

  • 第五步:通过日志定位具体故障节点
    当再次出现报错时,立刻查看控制节点的nova-apinova-scheduler日志,以及计算节点的nova-compute日志,找包含tesla-v100的错误信息——你大概率会发现,报错的请求被分发到了没有配置GPU的计算节点上,这也能反过来验证调度过滤规则是否真的生效了。

总的来说,你遇到的核心问题就是调度器没做过滤,导致请求乱跑,再结合部分节点没有PCI别名配置,就出现了随机失败的现象。先把调度过滤规则配好,再检查配置一致性,应该就能解决问题了。

备注:内容来源于stack exchange,提问作者Mica Calvas

火山引擎 最新活动