如何检查多久的过程花费在Linux中等待CPU?CPU争(等待时间),在Linux中
例如,在加载的系统我想检查SQL*Loader(SQLLDR)过程中等待的时间。
,如果有一个命令行工具来做到这一点这将是有益的。
如何检查多久的过程花费在Linux中等待CPU?CPU争(等待时间),在Linux中
例如,在加载的系统我想检查SQL*Loader(SQLLDR)过程中等待的时间。
,如果有一个命令行工具来做到这一点这将是有益的。
我很快就把这一起打了一遍。它打印出任务切换中最小和最大的“干扰”...
#include <sys/time.h>
#include <stdio.h>
double seconds()
{
timeval t;
gettimeofday(&t, NULL);
return t.tv_sec + t.tv_usec/1000000.0;
}
int main()
{
double min = 999999999, max = 0;
while (true)
{
double c = -(seconds() - seconds());
if (c < min)
{
min = c;
printf("%f\n", c);
fflush(stdout);
}
if (c > max)
{
max = c;
printf("%f\n", c);
fflush(stdout);
}
}
return 0;
}
下面介绍如何进行测量。有多个进程,大于你的processors * cores * threading capability
等待(阻止)事件的数量,这些事件会同时唤醒它们。一个这样的事件是多播网络分组。使用类似PAPI(或更符合您的需求的仪器库)来测量您的流程之间实际和虚拟“唤醒”时间的差异。从实验的几次迭代中,您可以估算出您的过程的CPU争用时间。很明显,对于多核处理器来说,这并不准确,但它可能会对你有所帮助。
干杯。
我有一段时间回到这个问题。我结束了使用getrusage: 您可以得到详细的帮助: http://www.opengroup.org/onlinepubs/009695399/functions/getrusage.html
getrusage填充rusage结构。
测量等待时间用的getrusage
你可以在你的代码的开头调用的getrusage,然后再在最后调用它,或者在执行过程中的一些合适的点。你有initial_rusage和final_rusage。您的进程花费的用户时间用rusage-> ru_utime.tv_sec表示,进程花费的系统时间用rusage-> ru_stime.tv_sec表示。
因此,通过该过程花费的总的用户的时间将是: user_time = final_rusage.ru_utime.tv_sec - initial_rusage.ru_utime.tv_sec
由过程所花费的总系统时间将是: SYSTEM_TIME = final_rusage.ru_stime.tv_sec - initial_rusage.ru_stime.tv_sec
如果TOTAL_TIME是的getrusage的两个电话之间经过,则等待时间会 WAIT_TIME = TOTAL_TIME时间 - (user_time + SYSTEM_TIME)
希望这会他lps
你测量的是调度延迟,而不是争用延迟。 – 2010-07-14 11:00:37
我错过了“我想检查一下sqlldr进程等待的时间”部分。 我的测试显示了它没有花费在CPU上的最长时间。 ps -elF显示花费的CPU总时间。 我想知道更准确的是/ proc/ /。 可以拍摄快照,运行长查询并再次检查。 未花费在CPU上的数量是时间流逝减去与CPU一起花费的时间,类似的东西。 –
Mike
2010-07-15 01:10:58