使用SystemTap计算CPU利用率

时间:2017-02-05 13:54:34

标签: performance profiling cpu systemtap utilization

我想使用SystemTap获取CPU利用率(%us%sy%id%wa)。我编写了一个使用timer.profile探针并计算处理器滴答的脚本:

#! /usr/bin/env stap

probe timer.profile {
# probe perf.sw.cpu_clock {
  if (!user_mode()) {
    if (pid() == 0) {
      iticks <<< 1
    } else {
      kticks <<< 1
    }
  } else {
    uticks <<< 1
  }
  ticks <<< 1  
}

global uticks, kticks, ticks, iticks

probe timer.s(1), end {
  allticks = @count(ticks)

  # printf("us: %d, sy: %d, id: %d, tot: %d\n",
  #        @count(uticks), @count(kticks), @count(iticks), allticks);
  printf("us: %d, sy: %d, id: %d\n",
         @count(uticks)*100/allticks, 
         @count(kticks)*100/allticks,
         @count(iticks)*100/allticks);

  delete uticks
  delete kticks
  delete iticks
  delete ticks
}

上述脚本产生的值与其他系统工具不同,如vmstat。当我应用已知负载(计算大文件的校验和)时,vmstat告诉CPU为25%us,为什么我的脚本提供35%us。当执行主要在内核中运行的任务时,示例适用 - 我的stap脚本的值大约增加了7到10%。

  1. 造成这种差异的原因是什么 - 这个剧本有缺陷吗?
  2. 如何计算等待I / O(wa%)所花费的刻度数?

0 个答案:

没有答案