DPDK转发测试时,大量的“ dTLB-load-misses”

时间:2018-08-29 12:15:00

标签: arm tlb dpdk

最近,我正在尝试使用DPDK“ testpmd”应用程序进行一些转发测试。我发现一些有趣的东西。

当512个描述符用于TX和RX时,性能要好于使用4096个描述符。用“ perf”命令检查计数器后,我发现观察到大量的“ dTLB-load-misses ”。大约是512个描述符的100倍。但是页面错误始终为零。使用“:u”和“:k”参数,似乎大多数TLB未命中都在用户空间中。所有缓冲区都在一个大页面中,用于存储网络有效载荷的数据,并且该大页面的大小为512MB。每个缓冲区小于3KB。缓冲区和描述符是一对一的映射。

那么,有什么线索可以找到大量的TLB失误吗?会对性能产生影响吗?(降级)

谢谢

1 个答案:

答案 0 :(得分:3)

通常,CPU TLB缓存容量取决于页面大小。这意味着对于4KB页面和512MB页面,可能会有不同数量的L1 / L2 TLB缓存条目。

例如,对于ARM Cortex-A75:

  

数据微型TLB是一个48条目的完全关联TLB,供加载和存储操作使用。缓存条目仅具有4KB,16KB,64KB和1MB的VA到PA映射粒度。

来源:ARM Info Center

对于ARM Cortex-A55:

  

Cortex-A55 L1数据TLB仅支持4KB页面。   在L2 TLB之后,其他任何页面尺寸都会破裂,并将适当的页面尺寸发送到L1 TLB。

来源:ARM Info Center

基本上,这意味着512MB的大页面映射将被分解为较小的尺寸(最小为4K),只有那些小片段将被缓存在L1 dTLB中。

因此,即使您的应用程序适合单个512MB页面,性能仍将在很大程度上取决于实际的内存占用。