You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenStack创建RTX-3090规格实例时PCI设备申请失败,疑似资源缓存异常

OpenStack创建RTX-3090规格实例时PCI设备申请失败,疑似资源缓存异常

看起来你遇到的问题确实和Nova的资源状态缓存/同步异常有关——毕竟KVM层面能正常直通第四块GPU,说明硬件本身没问题,问题出在OpenStack对资源的感知环节。下面给你几个针对性的排查和修复步骤:

1. 强制刷新计算节点的资源上报状态

Nova的Resource Tracker会定期同步计算节点的资源状态,但如果同步机制出现卡顿,就会出现实际资源可用但Nova认为已耗尽的情况。你可以手动触发资源重新扫描和上报:

  • 先在控制节点确认计算节点服务状态正常:
    openstack compute service list
    
  • 登录到异常的计算节点(比如compute-23),重启nova-compute服务,让它重新扫描PCI设备并上报最新状态:
    sudo systemctl restart nova-compute
    
  • 回到控制节点,查看该计算节点的PCI资源统计,确认可用设备数是否正确:
    openstack hypervisor show compute-23
    

2. 清理Nova本地的PCI设备缓存文件

Nova会在计算节点本地缓存PCI设备状态,这个文件如果出现异常,会导致资源统计错误:

  • 登录计算节点,查看缓存文件的内容(路径可能因发行版略有不同,一般是这个):
    cat /var/lib/nova/pci_devices.json
    
    检查里面标记为"available": true的设备数量,如果和实际可用数不符(比如只有0或1个,但实际还有1个空闲),直接删除这个缓存文件:
    sudo rm /var/lib/nova/pci_devices.json
    
  • 再次重启nova-compute服务,让它重新生成正确的缓存文件。

3. 排查残留实例/僵尸域占用资源

有时候实例异常删除后,libvirt的残留域或者Nova的实例状态不同步,会导致GPU资源被“假占用”:

  • 在计算节点执行以下命令,查看所有KVM域(包括已停止的):
    virsh list --all
    
  • 如果发现状态为shut off但属于已删除OpenStack实例的域,手动清理:
    virsh destroy <domain-name-or-id>
    virsh undefine <domain-name-or-id>
    
  • 回到控制节点,同步实例状态,确保Nova感知到这些残留实例已被清理:
    nova-manage cell_v2 sync_instances --verbose
    

4. 重启控制节点的核心服务

如果是Conductor或Scheduler的资源缓存出现问题,重启这两个服务可以强制刷新它们的资源视图:

sudo systemctl restart nova-conductor nova-scheduler

额外检查点

虽然你说配置没问题,但可以再快速核对下nova.conf里的PCI相关配置:

  • 确认pci_passthrough_whitelist已经正确包含RTX3090的vendor_id(10de)和product_id(2204/1aef)
  • 确认flavor绑定的PCI别名x1、x2对应的设备规格和实际GPU一致,且每个实例的PCI请求数量正确(比如是否每个实例只申请1张GPU,而不是多张)

这些步骤应该能解决资源缓存不同步导致的PCI申请失败问题,建议在业务低峰期操作,避免影响现有运行的实例。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 11:53:05