arm - DPDK转发测试时出现大量 "dTLB-load-misses"

标签 arm dpdk tlb huge-pages

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

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

那么有什么线索可以找到大量的 TLB 未命中?会不会对性能有影响(退化)?

最佳答案

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

例如,对于 ARM Cortex-A75:

The data micro TLB is a 48-entry fully associative TLB that is used by load and store operations. The cache entries have 4KB, 16KB, 64KB, and 1MB granularity of VA to PA mappings only.

来源:ARM Info Center

对于 ARM Cortex-A55:

The Cortex-A55 L1 data TLB supports 4KB pages only. Any other page sizes are fractured after the L2 TLB and the appropriate page size sent to the L1 TLB.

来源:ARM Info Center

基本上,这意味着 512MB 的大页面映射将被分解成更小的尺寸(低至 4K),并且只有那些小部分将被缓存在 L1 dTLB 中。

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

关于arm - DPDK转发测试时出现大量 "dTLB-load-misses",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52077230/

相关文章:

c++ - 在 Linux 上与 Eclipse 交叉编译,在 Windows 上与 Eclipse 交叉编译?

makefile - 构建 igb_uio 时的 DPDK 编译错误

caching - TLB 是否在多个内核之间共享?

cpu-architecture - 为什么在全关联 TLB 中 LRU 实现成本高昂?

linux - 为什么不在 ARM Linux Kernel 上为 vmalloc 填写页面错误中的 PTE 条目?

android - 找不到 Android 8.0-8.1 (Oreo) API 26-27 ARM 系统镜像

c - 在 STM32F411 Discovery 上实现 HD44780 LCD 时调试 HardFault

debugging - 如何调试使用大页面的 DPDK 应用程序

DPDK 突然停止工作并出现错误 'EAL: No available 1048576 kB hugepages reported'

assembly - 从Intel上的CPUID结果了解TLB