在 Solaris 上使用 dtrace,我可以使用以下脚本在从 start 到 control-C 的时间间隔内为给定进程(或 execname)累积 on-cpu 时间:
!/usr/sbin/dtrace -qs
dtrace:::BEGIN {
total = 0;
}
sched:::on-cpu
/execname == $$1/
{
self->start = vtimestamp;
}
sched:::off-cpu
/self->start/
{
this->time = vtimestamp - self->start;
total += this->time;
self->start = 0;
}
dtrace:::END {
printf("Total Time on CPU: %d us\n",total/1000);
}
(累积时间具有细粒度,允许纳/微秒累积。)
在同一时间范围内,我想在一个数组中累积所有或多个进程,并报告所有累积的 CPU 中断时间 (^C)。
做这个的最好方式是什么?