如何测量 OSX 中的 L1、L2、L3 缓存命中率和未命中率

How to measure L1, L2, L3 cache hits & misses in OSX

我有一个 C++ 程序,我想通过检查 CPU 缓存的命中数和未命中数来量化它的性能。

最好的方法是什么?

我尝试使用 Intel's Performance Counter Monitor,但它使用了未签名的内核扩展,该扩展在 Yosemite 上被禁用。我显然可以禁用检查以不加载未签名的 kexts,但我不想走那条路。

还有其他我不知道的可能方法吗?

您可以启用未签名的内核扩展 OS X(之后需要重启):

sudo nvram boot-args=kext-dev-mode=1

这会在您的机器上启用开发者模式,您可以 运行 Intel Performance Counter Monitor 只要它支持 Mac OS X 10.10 (Yosemite) 一般.

完成测试后不要忘记再次禁用它(否则是安全问题):

sudo nvram boot-args=kext-dev-mode=0

据我所知,英特尔的工具比缓存研磨要好得多,因为它使用硬件中的实际计数器而不是模拟 cpu 并且它是软件中的缓存特性。

如果您是苹果开发者计划会员,原则上可以申请kext签名证书,自行签名。但他们通常不会将它们分发给内部使用,并建议您启用 kext-dev-mode 或禁用 SIP(​​取决于版本)。另一个好方法是要求英特尔提供其 kext 的签名版本!