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