我正在通过内核模块进行 PCIE 吞吐量测试,测试结果数字很奇怪(PCIE gen1 x1 的写入速度为 210MB/s,但读取速度仅为 60MB/s)。如果我的测试配置中有错误的方法,我想请您提出建议和更正。
我的测试配置如下:
- 一块板配置为根端口,一块板配置为端点。PCIE 链路为 gen 1,宽度 x1,MPS 128B。两块板都运行 Linux 操作系统
- 在 Root Port 端,我们分配了一个内存缓冲区,其大小为 4MB。我们将入站 PCIE 内存事务映射到此缓冲区。
- 在端点端,我们对远程缓冲区进行 DMA 读/写并测量吞吐量。通过此测试,端点将始终是事务的发起者。
- EP Write 测试的测试结果是 214MB/s,EP Read 测试只有 60MB/s。PCIe Gen1 x1 的写入测试吞吐量是合理的,但 EP 读取吞吐量太低。
对于 RP 板,我使用 PCIE 以太网 e1000e 卡对其进行了测试,并获得了最大吞吐量 ~900Mbps。我只是想知道在以太网 TX 路径的情况下,以太网卡(扮演端点角色)也执行 EP 读取请求,并且可以通过更小的 DMA 传输获得高吞吐量(~110MB/s),所以我的 DMA 一定有问题EP 读取配置。
DMA 读取测试的细节可以总结为以下伪代码:
dest_buffer = kmalloc(1MB)
memset(dest_buffer, 0)
dest_phy_addr = dma_map_single(destination_buffer)
source_phy_addr = outbound region of Endpoint
get_time(t1)
Loop 100 times
Issue DMA read from source_phy_addr to dest_phy_addr
wait for DMA read completion
get_time(t2)
throughput = (1MB * 100)/(t2 - t1)
任何建议和建议表示赞赏。先谢谢了!