服务器虚拟化必做:BIOS 一键关闭 ACS,彻底解锁 GPU/网卡 PCIe P2P 性能题

服务器在虚拟化或 GPU 直通(passthrough)场景里,“关 GPU 和网卡的 ACS” 主要是为了让 PCIe Peer-to-Peer(P2P)通信 能够直接进行,不被强制绕行 CPU 的 Root Complex,从而提高带宽、降低延迟,避免因 ACS 带来的隔离导致的性能下降。

一、为什么要关 ACS?

1. ACS 默认强制 P2P 流量绕行 RC(Root Complex),这会导致:

   GPU 之间无法直接通信(NVLink 除外),性能大幅下降。

   网卡与 GPU 之间无法直接通过 GPUDirect RDMA 通信。

2. 关闭 ACS 后,设备之间可以直接 P2P,适用于:

   多卡训练(如 PyTorch、NCCL)

   GPUDirect RDMA 场景(如 InfiniBand + GPU)

二、如何查看 ACS 是否开启?

系统类型查看命令
Linuxlspci -vvv | grep -i "ACS" 或 lspci -vvv | grep -i "acsctl"
Windows使用工具如 HWiNFO64 或 PCIeTree,查看设备属性中的 ACS 字段

若看到 `SrcValid+` 或 `ACS Enabled`,说明 ACS 已开启。

三、如何关闭 ACS?

✅ 方法 1:BIOS 设置(推荐)

BIOS 品牌路径示例
SupermicroAdvanced → Chipset → North Bridge → IIO Configuration → Intel VT-d → ACS Control → Disable
DellSystem Setup → Integrated Devices → Intel VT-d → ACS → Disable
HPESystem Utilities → Chipset Configuration → IOMMU → ACS → Disable

⚠️ 注意:不要关闭 VT-d(IOMMU),只关 ACS。

✅ 方法 2:Linux 下使用 `setpci`(不推荐,易失效)

 查看设备地址

lspci -nn | grep -i "GPU\|Ethernet"

 假设设备地址为 0000:02:00.0

setpci -s 02:00.0 220.w=0000

⚠️ 风险:重启失效,地址可能变化,建议仅用于测试。

✅ 方法 3:内核参数绕过(部分场景可用)

 编辑 /etc/default/grub

GRUB_CMDLINE_LINUX="... iommu=pt pci=assign-busses"

sudo update-grub && reboot

适用于不能关 ACS 的云平台,但效果有限。

四、验证是否关闭成功

lspci -vvv | grep -i "acsctl"

若所有设备显示 `SrcValid-`,说明已关闭。

✅ 总结建议

场景建议
裸机多卡训练直接 BIOS 关闭 ACS
云平台(无法改 BIOS)使用 NCCL_P2P_DISABLE=1 或换 gloo 后端
GPUDirect RDMA必须关闭 ACS,并确保 GPU 和网卡在同一 Root Complex 下

如需根据具体主板或系统进一步指导,欢迎提供品牌型号或系统版本。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值