如何可靠地监控CPU频率(在linux中)?

时间:2017-03-23 05:10:27

标签: linux-kernel kernel cpu hardware frequency

我想要监控各个内核的CPU工作频率。我不确定监控CPU频率的正确方法是什么,以更低的开销可靠地形成内核级别和硬件级别。

如果有人能回答我的几个问题,我将非常感激。

假设我通过将应用程序固定到核心来运行应用程序。我想监视它在执行阶段(开始到结束)所需的频率并捕获它。我想要从硬件级别(从MSR可能)获得所需的准确频率。

不确定捕获此内容的准确方法是什么?有办法吗?是否有任何工具或命令可以直接从MSR中读取频率值?

我尝试了几种选择,不确定这是否反映了正确的频率:

注意:我试图每隔10ms,20ms,30ms,等等对核心频率进行采样。

来自内核级别:

  1. 我正在阅读一个sysfs文件:
  2. cat / sys / devices / system / cpu / cpu2 / cpufreq / cpuinfo_cur_freq

    不确定上面是否每隔10ms,20ms等给出正确的频率值。是否每隔10ms时间间隔读取此文件会产生任何开销?

    1. 然后我正在使用turbostat命令,但这并没有告诉我在指定的时间间隔内特定核心的正确频率是多少,而是告诉我繁忙的%等,但我正在寻找一个准确的采样频率我指定的时间间隔
    2. 问题:

      1. 从系统角度监控CPU频率的最佳且最可靠的方法是什么?

      2. 我可以用来监控CPU频率的最小采样间隔时间(我知道这取决于CPU调控器)。我目前正在假设并感兴趣Ondemand power governor正在设置核心,我试图监控CPU频率。

      3. 如果有人可以指导我,那将是一个很大的帮助。

1 个答案:

答案 0 :(得分:0)

我假设您希望在应用程序事件的基础上跟踪cpu频率之间的所有更改,而不是这些sysfs提供的摘要:

cpufreq有跟踪点跟踪 - trace_cpu_frequency(), 并且您可以添加其他自定义跟踪点来跟踪应用程序的事件 - 例如将消息写入trace / trace_marker。 您可以在执行后看到记录的所有事件,包括cpufreq TP和跟踪标记。