我想使用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%。
wa%
)所花费的刻度数?