gpt4 book ai didi

process - 如何使用 dtrace 显示每个进程消耗的微秒 cpu?

转载 作者:行者123 更新时间:2023-12-04 05:12:02 25 4
gpt4 key购买 nike

在 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)。

做到这一点的最佳方法是什么?

最佳答案

好的,通过更多的工作,我已经解决了我的问题。

这是在间隔内为所有进程(但显示每个进程)获取微秒的方法。

#!/usr/sbin/dtrace -qs

dtrace:::BEGIN {
total = 0;
starttimestamp=timestamp;
printf("Starting...\n");
}

sched:::on-cpu
/pid!=0/
{
self->start = vtimestamp;
}

sched:::off-cpu
/self->start && pid!=0/
{
this->time = vtimestamp - self->start;
total += this->time;

@proctime[pid,uid,execname,curpsinfo->pr_psargs] = sum( this->time/1000 );

self->start = 0;
}
dtrace:::END {
printf("Elapsed time %d usec\n",(timestamp-starttimestamp)/1000);
printf("Total Time on CPU: %d us\n",total/1000);
printa(@proctime);
}

关于process - 如何使用 dtrace 显示每个进程消耗的微秒 cpu?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14806842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com