硬件计数器分析存在多种限制:
只能在具有硬件计数器且支持硬件计数器分析的处理器上收集硬件计数器数据。在其他系统中,硬件计数器分析功能处于禁用状态。具有 Unbreakable Enterprise Kernel 或 Red Hat 兼容内核 6.0 和更新版本的 Oracle Solaris 和 Oracle Linux 不支持硬件计数器。
在 cpustat(1) 命令运行过程中无法在运行 Oracle Solaris 的系统上收集硬件计数器数据,原因是 cpustat 控制了这些计数器,不允许用户进程使用它们。如果 cpustat 是在数据收集过程中启动的,则硬件计数器分析将终止,而且会在实验中记录一条错误。如果 root 使用硬件计数器启动 er_kernel 实验,也是如此。
如果正在执行硬件计数器分析,则无法使用自己代码中的硬件计数器。 如果调用不是来自收集器,则收集器将插入 libcpc 库函数并返回一个返回值 -1。您应当对程序进行适当编码,使其在无法访问硬件计数器时能够正常工作。如果没有进行编码来对此加以处理,或者如果超级用户调用了同样使用计数器的系统范围的工具,或者如果该系统不支持计数器,程序将在硬件计数器分析过程中失败。
如果您试图通过向进程附加 dbx 来在使用硬件计数器库的正在运行的程序上收集硬件计数器数据,则实验可能会被破坏。