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