LLCMisses 和 CacheMisses 在硬件计数器上的区别
Difference between LLCMisses and CacheMisses on Hardware Counters
LLCMisses 和 CacheMisses 有什么区别?
两个计数器返回的值通常应该相同。
BenchmarkDotNet 中可用的计数器是由 Windows ETW 基础设施提供的。不幸的是,据我所知,Microsoft 没有提供关于它们的任何具体信息,但我们可以从我们看到的信息中合理地推断出一些信息。
在 Intel 系统上,我看到了完整的 PMC 源列表,该列表以 8 个条目结尾,这些条目具有顺序 ID。这八个条目中的前七个(UnhaltedCoreCycles
、InstructionRetired
、UnhaltedReferenceCycles
, LLCReference
, LLCMisses
, BranchInstructionRetired
, BranchMispredictsRetired
) 几乎完全匹配七个英特尔架构性能事件计数器的名称和顺序(参见性能监控章节英特尔软件开发人员手册了解详情)。
8 中的最后一个,LbrInserts
,可能是指 Intel Last Branch Record 性能监控功能。因此,假设这些来源直接映射到那些特定的 x86 计数器似乎是合理的,没有它们,它们将不会出现在架构上。
在列出的其他 5 个来源中,TotalIssues
returns 与 InstructionRetired
的值相同; BranchInstructions
匹配 BranchInstructionRetired
,CacheMisses
匹配 LLCMisses
,BranchMispredictions
匹配 BranchMispredictsRetired
,TotalCycles
匹配 UnhaltedCoreCycles
。
据推测,其他 CPU 架构定义了自己的特定于架构的源,这些源映射到不同的特定于架构的计数器,例如ARM 上的 BranchMispredictions
可能映射到 BR_MIS_PRED
计数器,它与 Intel 的 Branch Mispredicts Retired 具有不同的语义,但仍然表示分支错误预测的概念。
那么实际的答案是,如果您要分发具有预定义值的软件,如果您想要 Intel 计数器的特定含义,则选择 LLCMisses
。如果您只想要缓存未命中的概念,您可以选择 CacheMisses
这样它也可以在具有不同性能计数器的其他体系结构上工作。如果您只是 运行 在本地,那么您选择哪个并不重要。
LLCMisses 和 CacheMisses 有什么区别?
两个计数器返回的值通常应该相同。
BenchmarkDotNet 中可用的计数器是由 Windows ETW 基础设施提供的。不幸的是,据我所知,Microsoft 没有提供关于它们的任何具体信息,但我们可以从我们看到的信息中合理地推断出一些信息。
在 Intel 系统上,我看到了完整的 PMC 源列表,该列表以 8 个条目结尾,这些条目具有顺序 ID。这八个条目中的前七个(UnhaltedCoreCycles
、InstructionRetired
、UnhaltedReferenceCycles
, LLCReference
, LLCMisses
, BranchInstructionRetired
, BranchMispredictsRetired
) 几乎完全匹配七个英特尔架构性能事件计数器的名称和顺序(参见性能监控章节英特尔软件开发人员手册了解详情)。
8 中的最后一个,LbrInserts
,可能是指 Intel Last Branch Record 性能监控功能。因此,假设这些来源直接映射到那些特定的 x86 计数器似乎是合理的,没有它们,它们将不会出现在架构上。
在列出的其他 5 个来源中,TotalIssues
returns 与 InstructionRetired
的值相同; BranchInstructions
匹配 BranchInstructionRetired
,CacheMisses
匹配 LLCMisses
,BranchMispredictions
匹配 BranchMispredictsRetired
,TotalCycles
匹配 UnhaltedCoreCycles
。
据推测,其他 CPU 架构定义了自己的特定于架构的源,这些源映射到不同的特定于架构的计数器,例如ARM 上的 BranchMispredictions
可能映射到 BR_MIS_PRED
计数器,它与 Intel 的 Branch Mispredicts Retired 具有不同的语义,但仍然表示分支错误预测的概念。
那么实际的答案是,如果您要分发具有预定义值的软件,如果您想要 Intel 计数器的特定含义,则选择 LLCMisses
。如果您只想要缓存未命中的概念,您可以选择 CacheMisses
这样它也可以在具有不同性能计数器的其他体系结构上工作。如果您只是 运行 在本地,那么您选择哪个并不重要。