返回

如何从原始计数器中获取缓存未命中率?

Linux

从原始计数器中显示缓存未命中率

问题:从原始计数器中获取缓存未命中率的挑战

当使用 perf 工具测量缓存未命中率时,您可能会遇到一些限制。对于某些处理器,某些缓存计数器可能被标记为“<not supported>”。此外, perf 可能无法自动计算和显示这些计数器的百分比。

解决方案:使用原始计数器和后处理

为了解决这些挑战,您可以使用以下步骤从原始计数器中获取缓存未命中率:

  • 收集原始计数器数据 :使用 perf 测量缓存加载和未命中计数器。指定原始计数器代码和掩码,如 cpu/event=0x80,umask=0x01,name=L1-icache-loads/
  • 计算未命中率 :收集原始计数器数据后,使用 Python 的 perf-tools 包或其他工具计算缓存未命中率。公式为:未命中率 = 未命中计数 / 加载计数
  • 显示未命中率 :将计算出的未命中率打印到控制台或将其保存到文件中。

问题:针对特定处理器的定制配置

问题 :某些处理器可能需要针对 perf 事件代码和掩码进行特定配置才能支持缓存计数器。

解决方法:重新编译内核和配置 perf

要针对特定处理器配置 perf,可以采取以下步骤:

  • 重新编译内核 :启用 CONFIG_PERF_EVENTSCONFIG_PMC_CORE 内核选项并重新编译内核。
  • 加载内核模块 :使用 sudo modprobe msrsudo modprobe pmu 加载内核模块。
  • 配置 perf :使用 sudo perf probe 命令添加事件代码和掩码,例如:sudo perf probe --add --code 0x80 --event L1-icache-load-misses

执行这些步骤后,perf 应能够支持特定处理器的缓存计数器并提供未命中率。

结论

通过使用原始计数器和后处理或针对特定处理器的自定义配置,您可以从 perf 中获取缓存未命中率。这使您可以分析缓存性能并识别潜在的性能瓶颈。

常见问题解答

问:为什么我无法从 perf 中获取某些缓存计数器的支持?
答:某些处理器可能需要针对特定事件代码和掩码进行配置。重新编译内核并配置 perf 可以解决此问题。

问:如何计算缓存未命中率?
答:未命中率等于未命中计数除以加载计数。

问:我是否需要重新编译内核才能使用 perf
答:通常情况下,您不需要重新编译内核。但是,对于某些处理器,定制配置可能需要重新编译内核。

问:是否可以使用其他工具来获取缓存未命中率?
答:是的,可以使用 cachetoppmapvmstat 等其他工具来获取缓存未命中率。

问:如何针对我的特定处理器优化缓存性能?
答:确定缓存未命中率并识别频繁未命中的数据有助于优化缓存性能。您可以使用缓存命中率计数器来衡量优化措施的有效性。