Linux device driver pcie原始吞吐量测试
我正在通过内核模块进行PCIE吞吐量测试,测试结果数字非常奇怪(写入速度为210MB/s,但PCIE gen1 x1的读取速度仅为60MB/s)。如果我的测试配置中有错误的方法,我想征求您的建议和更正 我的测试配置如下: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链路为第1代,宽度为x1,MPS 128B。两个董事会都运作 Linux操作系统
- 在根端口端,我们分配一个内存缓冲区,其大小为4MB。 我们将入站PCIE内存事务映射到此缓冲区
- 在端点端,我们对远程缓冲区进行DMA读/写,并 测量吞吐量。通过此测试,端点将始终是 事务的发起人
- EP写测试的测试结果为214MB/s,只有60MB/s 用于EP读取测试。PCIe的写测试吞吐量是合理的 Gen1 x1,但EP读取吞吐量太低
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)
欢迎提出任何建议和建议。提前感谢嗨,有几点需要考虑,在这两种情况下,链接训练花费相同的时间吗?RC向EP建议的流量控制积分是多少,如果这些积分很少,DMA试图发送大块数据,则会对throuput产生不利影响。