硬件计数器溢出分析存在多种限制:
只能在具有硬件计数器且支持溢出分析的处理器上收集硬件计数器溢出数据。在其他系统中,硬件计数器溢出分析功能处于禁用状态。UltraSPARC III 处理器系列之前的 UltraSPARC 处理器不支持硬件计数器溢出分析。
在 cpustat(1) 命令运行过程中无法在运行 Solaris OS 的系统上收集硬件计数器溢出数据,原因是 cpustat 控制了这些计数器,不允许用户进程使用它们。如果 cpustat 是在数据收集过程中启动的,则硬件计数器溢出分析将终止,而且会在实验中记录一条错误。
如果正在执行硬件计数器溢出分析,则无法使用自己代码中的硬件计数器。如果调用不是来自收集器,则收集器将插入 libcpc 库函数并返回一个返回值 -1。您应当对程序进行适当编码,使其在无法访问硬件计数器时能够正常工作。如果没有进行编码来对此加以处理,或者如果超级用户调用了同样使用计数器的系统范围的工具,或者如果该系统不支持计数器,程序将在硬件计数器分析过程中失败。
如果您试图通过向进程附加 dbx 来在使用硬件计数器库的正在运行的程序上收集硬件计数器数据,则实验可能会被破坏。
要查看所有可用计数器的列表,请运行不带参数的 collect 命令。