【发布时间】:2013-07-21 09:21:30
【问题描述】:
我发现我的 MMIO 读/写延迟过高。希望有人能给我一些建议。
在内核空间中,我编写了一个简单的程序来读取 PCIe 设备的 BAR0 地址中的 4 字节值。该设备是一个 PCIe Intel 10G NIC,插入到我的 Xeon E5 服务器上的 PCIe x16 总线上。我用rdtsc来测量MMIO读取开始到结束的时间,代码sn-p是这样的:
vaddr = ioremap_nocache(0xf8000000, 128); // addr is the BAR0 of the device
rdtscl(init);
ret = readl(vaddr);
rmb();
rdtscl(end);
我预计 (end, init) 之间经过的时间小于 1us,毕竟通过 PCIe 数据链路的数据应该只有几纳秒。但是,我的测试结果显示至少 5.5 次用于 MMIO PCIe 设备读取。我想知道这是否合理。我将代码更改为远程内存屏障 (rmb) ,但仍然得到大约 5 us 的延迟。
本文提到了 PCIe 延迟测量。通常小于1us。 www.cl.cam.ac.uk/~awm22/.../miller2009motivating.pdf 我是否需要进行任何特殊配置(例如内核或设备)来降低 MMIO 访问延迟?或者有没有人有过这样做的经验?
【问题讨论】:
标签: linux linux-device-driver pci-e pci-bus