昇腾社区首页
中文
注册
开发者
下载

【P2P带宽】开启IOMMU导致ACS使能,导致跨环PIX链路带宽值低

问题现象

Atlas 200T A2 Box16/Atlas 200I A2 Box16 异构子框的PIX链路(即PCIe Switch,NPU1->PCIE -> PCIE SWITCH -> PCIE -> NPU2)带宽性能低于预期,且单向带宽和双向带宽几乎一致。

可能原因

  • 原因一:使能PCIe ACS功能,导致PIX链路带宽性能低。

    PCIe ACS功能简介:ACS(Access Control Services)协议通过设置相关的Control Bit能够决定一个TLP可以被正常路由、阻塞或者重定向。ACS可以应用于RCs,Switches和Multi-Function Devices。如果单功能设备支持SR-IOV功能,则ACS可以将该设备当成多功能设备,并使能某些ACS功能。通过在PCIe Switch上开启ACS服务,可以禁止P2P发送,强制PCIe Switch将所有地址的访问请求送到RC,从而避免peer-to-peer访问的风险。

  • 原因二:开启iommu,强制使能PCIe ACS功能,导致PIX链路带宽性能低。

    关闭ACSCtl后,发现PIX链路带宽还是很低。通过分析内核代码,发现可能与iommu有关。在detect_intel_iommu函数中通过调用pci_request_acs打开了ACS功能。即启动项开启iommu时强制使能ACS。

确认方法(原因一)

执行lspci -s ${NPU的PCIe BDF号} -vvv | grep ACSCtl命令,查看ACSCtl是否为关闭状态,关闭时显示为减号。

解决措施(原因一)

若不为减号,则需要关闭。关闭脚本如下:
for pdev in `lspci -vvv|grep -E "^[a-f]|^[0-9]|ACSCtl"|grep ACSCtl -B1|grep -E "^[a-f]|^[0-9]"|awk '{print $1}'`
do
setpci -s $pdev ECAP_ACS+06.w=0000
done

确认方法(原因二)

执行lspci -vvv命令,发现有IOMMU group信息,说明开启了iommu。

解决措施(原因二)

  1. 在/etc/default/grub文件中的 “GRUB_CMDLINE_LINUX” 配置项里,删除 “intel_iommu = on” 和 “iommu = pt”,并添加 “intel_iommu = off”。

  2. 执行update-grub命令,然后重启操作系统。

  3. 【可选】在BIOS中,将“Inter(R) VT for Directed I/O (VT-d)”设置为“Disable”。

  4. 重启操作系统后确认iommu是否关闭。

    执行dmesg | grep -i dmar命令,确认IOMMU为disabled。

    执行lspci -vvvv命令,确认无IOMMU group信息。

  5. 重新测试PIX链路带宽。