如何对PCIe和DMA进行基准测试?

时间:2017-09-08 06:13:42

标签: performance latency dma pci-e dpdk

我正在使用连接到Dell PowerEdge服务器的Intel x520和x540双端口NIC。所有NIC端口都可以10Gbps工作,因此总共40 Gbps。该系统有2个插座,包含Xeon E5-2640 v3 CPU(Haswell Microarchitecture)。

我面临许多问题,可以使用PCIe和DMA基准测试解决。但是,我找不到任何正确的方法来做同样的事情。即使使用基于DPDK的驱动程序和库(具有64字节数据包),我也无法实现40Gbps的吞吐量。我需要以64字节大小执行实验,并且无法更改数据包大小。

我使用DPDK-pktgen生成数据包并使用Intel-PCM计算事件,。/ pcm-pci.x。但是,计数是一种方式,从某种意义上说,我正在计算事件的数量,并且无法确定系统可以支持的每个事件的最大数量。来自pcm-pci.x的结果:

Skt   PCIeRdCur    RFO     CRd     DRd      ItoM    PRd    WiL
0      73 M      3222 K   784 K    63 M     52 M     0    2791 K

我的网卡连接到套接字0,这就是我没有输入套接字1结果的原因。

有没有办法对PCIe总线和DMA引擎进行基准测试?有没有办法在IO子系统(每个级别)获得数据包处理的精确延迟(不能使用rdtsc()来测量硬件级别的延迟)?

1 个答案:

答案 0 :(得分:0)

您没有提到您的CPU内核是否以100%的利用率运行?如果它们以最大容量运行而您没有获得40Gbps的线路速率,则问题可能与软件有关。

看看SystemTap;您可以使用它来调试和记录内核事件和函数的运行时间,延迟和抖动(创建一个自然图)。这篇博文有一个很好的例子:https://blog.cloudflare.com/revenge-listening-sockets/

这实际上并不是您所要求的,但您可以使用它来帮助缩小测试中的瓶颈。您可以使用SystemTap监视内核函数调用计数,执行时间(延迟)和抖动,Linux下的perf对于监视系统性能(上下文切换,分支遗漏等)非常有用,请参阅here和{{3}这些将帮助您缩小软件的瓶颈。

这可能会导致您使用与此类硬件直接交互的功能:here

^说明:

  

writel将“long”写入内存映射的I / O地址。在这种情况下,   地址是tx_ring->尾部(这是一个硬件地址)和   要写的价值是我。对设备的写入会触发设备   让它知道其他数据已准备好从RAM和DMA进行DMA   写入网络。

或者这些工具可能会导致您导致导致延迟的软件功能,例如,它可能具有较高的现金未命中率。

修改

你也没有提到操作系统版本,内核版本,网卡驱动程序和固件版本等。对于我使用DPDK获得良好性能的经验非常重要,您使用的是最新的网卡固件,驱动程序和最近的内核建立。