Linux device driver pcie原始吞吐量测试

Linux device driver pcie原始吞吐量测试,linux-device-driver,throughput,pci-e,Linux Device Driver,Throughput,Pci E,我正在通过内核模块进行PCIE吞吐量测试,测试结果数字非常奇怪(写入速度为210MB/s,但PCIE gen1 x1的读取速度仅为60MB/s)。如果我的测试配置中有错误的方法,我想征求您的建议和更正 我的测试配置如下: 一块板配置为根端口,一块板配置为 终点。PCIE链路为第1代,宽度为x1,MPS 128B。两个董事会都运作 Linux操作系统 在根端口端,我们分配一个内存缓冲区,其大小为4MB。 我们将入站PCIE内存事务映射到此缓冲区 在端点端,我们对远程缓冲区进行DMA读/写,并 测

我正在通过内核模块进行PCIE吞吐量测试,测试结果数字非常奇怪(写入速度为210MB/s,但PCIE gen1 x1的读取速度仅为60MB/s)。如果我的测试配置中有错误的方法,我想征求您的建议和更正

我的测试配置如下:

  • 一块板配置为根端口,一块板配置为 终点。PCIE链路为第1代,宽度为x1,MPS 128B。两个董事会都运作 Linux操作系统
  • 在根端口端,我们分配一个内存缓冲区,其大小为4MB。 我们将入站PCIE内存事务映射到此缓冲区
  • 在端点端,我们对远程缓冲区进行DMA读/写,并 测量吞吐量。通过此测试,端点将始终是 事务的发起人
  • EP写测试的测试结果为214MB/s,只有60MB/s 用于EP读取测试。PCIe的写测试吞吐量是合理的 Gen1 x1,但EP读取吞吐量太低
对于RP板,我使用PCIE以太网e1000e卡对其进行了测试,获得了最大吞吐量~900Mbps。我只是想知道在Ethernet TX path的情况下,以太网卡(扮演端点角色)也执行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)

欢迎提出任何建议和建议。提前感谢