![我可以故意禁用 PCIe 通道吗?或者降低 PCIe 宽度?](https://linux22.com/image/678964/%E6%88%91%E5%8F%AF%E4%BB%A5%E6%95%85%E6%84%8F%E7%A6%81%E7%94%A8%20PCIe%20%E9%80%9A%E9%81%93%E5%90%97%EF%BC%9F%E6%88%96%E8%80%85%E9%99%8D%E4%BD%8E%20PCIe%20%E5%AE%BD%E5%BA%A6%EF%BC%9F.png)
我正在我的服务器上进行一些测试,并想降低我的 PCIe 设备(或其 PCIe 桥)的宽度。
如果相关的话,我弄清楚了如何根据 PCI 规范使用 Linux 的 setpci 并更改 Link Control 2 Register 的“目标链接速度”来降低速度。这使我能够从 8GT/s 降至 5GT/s 甚至 2.5GT/s。
下面是一个工作示例:
Server:~ # setpci -s 83:04.0 98.w=1:ff
Server:~ # setpci -s 83:04.0 78.w=20:20
Server:~ # ./check_speed_width
84:00.0 has reported reduced PCIe speed: 2.5GT/s instead of 8GT/s
bridge device 83:04.0 has reported reduced PCIe speed: 2.5GT/s instead of 8GT/s
Server:~ # setpci -s 83:04.0 98.w=2:ff
Server:~ # setpci -s 83:04.0 78.w=20:20
Server:~ # ./check_speed_width
84:00.0 has reported reduced PCIe speed: 5GT/s instead of 8GT/s
bridge device 83:04.0 has reported reduced PCIe speed: 5GT/s instead of 8GT/s
到目前为止,我对降低宽度的一些想法是:
也许我只是错过了一个可写寄存器?目标链接速度是一个具有读写功能的寄存器。说到宽度寄存器,我只看到 PCI 规范中列出的只读寄存器。
也许有一种方法可以禁用一些与 PCIe 规范无关的通道?
我知道如果出现问题,设备可以训练/初始化到较低的宽度。那么也许我可以向特定车道注入错误并导致其丢弃车道?