Wil*_* Tu 8 linux linux-device-driver pci-bus pci-e
我发现我的MMIO读/写延迟非常高.我希望有人能给我一些建议.
在内核空间中,我编写了一个简单的程序来读取PCIe设备的BAR0地址中的4字节值.该设备是PCIe Intel 10G NIC,并插在我的Xeon E5服务器上的PCIe x16总线上.我使用rdtsc来测量MMIO读取开始和结束之间的时间,代码片段如下所示:
vaddr = ioremap_nocache(0xf8000000, 128); // addr is the BAR0 of the device
rdtscl(init);
ret = readl(vaddr);
rmb();
rdtscl(end);
Run Code Online (Sandbox Code Playgroud)
我期望(end,init)之间的经过时间小于1us,毕竟,遍历PCIe数据链路的数据应该只有几纳秒.但是,我的测试结果显示至少5.5用于执行MMIO PCIe设备读取.我想知道这是否合理.我将我的代码更改为远程内存屏障(rmb),但仍然可以获得大约5美分的延迟.
本文提到了PCIe延迟测量.通常它不到1us.www.cl.cam.ac.uk/~awm22/.../miller2009motivating.pdf我是否需要进行任何特殊配置(如内核或设备)才能获得更低的MMIO访问延迟?或者有没有人有过这样的经历?
如果网卡需要通过网络(可能通过交换机)从远程主机获取数据,则 5.5us 是合理的读取时间。如果您正在读取本地 PCIe 设备中的寄存器,则应该小于 1us。我没有任何使用 Intel 10G NIC 的经验,但使用过 Infiniband 和定制卡。
| 归档时间: |
|
| 查看次数: |
2216 次 |
| 最近记录: |