LLCMisses 和 CacheMisses 在硬件计数器上的区别

Difference between LLCMisses and CacheMisses on Hardware Counters

LLCMisses 和 CacheMisses 有什么区别?

两个计数器返回的值通常应该相同。

BenchmarkDotNet 中可用的计数器是由 Windows ETW 基础设施提供的。不幸的是,据我所知,Microsoft 没有提供关于它们的任何具体信息,但我们可以从我们看到的信息中合理地推断出一些信息。

在 Intel 系统上,我看到了完整的 PMC 源列表,该列表以 8 个条目结尾,这些条目具有顺序 ID。这八个条目中的前七个(UnhaltedCoreCyclesInstructionRetiredUnhaltedReferenceCycles, LLCReference, LLCMisses, BranchInstructionRetired, BranchMispredictsRetired) 几乎完全匹配七个英特尔架构性能事件计数器的名称和顺序(参见性能监控章节英特尔软件开发人员手册了解详情)。

8 中的最后一个,LbrInserts,可能是指 Intel Last Branch Record 性能监控功能。因此,假设这些来源直接映射到那些特定的 x86 计数器似乎是合理的,没有它们,它们将不会出现在架构上。

在列出的其他 5 个来源中,TotalIssues returns 与 InstructionRetired 的值相同; BranchInstructions 匹配 BranchInstructionRetiredCacheMisses 匹配 LLCMissesBranchMispredictions 匹配 BranchMispredictsRetiredTotalCycles 匹配 UnhaltedCoreCycles

据推测,其他 CPU 架构定义了自己的特定于架构的源,这些源映射到不同的特定于架构的计数器,例如ARM 上的 BranchMispredictions 可能映射到 BR_MIS_PRED 计数器,它与 Intel 的 Branch Mispredicts Retired 具有不同的语义,但仍然表示分支错误预测的概念。

那么实际的答案是,如果您要分发具有预定义值的软件,如果您想要 Intel 计数器的特定含义,则选择 LLCMisses。如果您只想要缓存未命中的概念,您可以选择 CacheMisses 这样它也可以在具有不同性能计数器的其他体系结构上工作。如果您只是 运行 在本地,那么您选择哪个并不重要。