GPU D3cold 电源状态:如何在不经意间把显卡变砖

发布: (2026年4月25日 GMT+8 02:15)
4 分钟阅读
原文: Dev.to

Source: Dev.to

症状

我的 NVIDIA Tesla P40 在一次虚拟机关闭后停止响应。没有显示错误信息;GPU 一直处于死机状态,直到主机完全重启后才恢复。

预期行为

对使用 GPU 直通的虚拟机进行干净的关闭后,GPU 应该保持在就绪状态。主机应能够优雅地处理电源状态的转换。

实际发生的情况

GPU 进入了 D3cold,一种低功耗状态,除非完整重启主机否则无法退出。即使在正确关闭虚拟机后也会出现,尤其在 Proxmox 8.4(内核 6.8.x)和 QEMU 8.0.1 环境下更为常见,因为 P40 缺乏 FLR(功能级复位)支持,导致主机无法对 GPU 进行复位。

修复方法

  1. 在直通设备之前禁用 D3cold

    echo 0 > /sys/bus/pci/devices/0000:08:00.0/d3cold_allowed
  2. 使用 udev 规则固定 GPU 的 PCI 地址,确保重启后仍在同一总线上:

    ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{device}=="0x1b80", ATTR{bus}=="0000:08", SYMLINK+="gpu-passthrough"
  3. 对于 Proxmox 8.4 用户,在虚拟机配置中 显式设置机器类型 以避免 QEMU 断言错误:

    -machine q35

这些步骤可以让 GPU 保持在同一 PCIe 总线上,防止其进入 D3cold 陷阱。

为什么重要

在 Proxmox 8.4 及更高版本上,像 P40(以及类似的 T4)这类不支持 FLR 的 GPU 容易出现此问题。如果不禁用 D3cold 并固定 PCI 地址,GPU 可能会永久失去响应,等同于“砖头”,只能通过电源循环恢复。

该问题并非 Proxmox 独有。任何缺少 GPU FLR 支持且依赖内核管理电源状态的系统都有风险。类似症状也在特定条件下的 AMD GPU 上观察到,尽管对应的缓解措施不同。

其他考虑

  • 在主机上运行 NVIDIA 驱动(而不是直通)可以提供更稳定的环境,避免 PCIe 总线不稳定和电源状态问题。NVIDIA Container Toolkit 在生产环境中使用效果良好。

  • 对于在 Kubernetes 或其他编排平台上运行依赖 GPU 直通的 AI 工作负载,确保 GPU 永不进入不可恢复的电源状态对于避免整机重启至关重要。

结论

在使用不支持 FLR 的 GPU 进行直通时,禁用 D3cold 并固定 GPU 的 PCI 地址是必不可少的步骤。实施这些修复可以防止 GPU 在虚拟机关闭或重启后变得无响应。

0 浏览
Back to Blog

相关文章

阅读更多 »

Vibe Coding 时如何编写 Prompt

为什么提示很重要 几年前,编码感觉像是一项个人运动:只有你、键盘,以及当出现问题时的 Stack Overflow。现在有了助手……