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