我知道用户时间和系统时间之间的区别。但是,我不太确定这个美好的时光。我曾经知道很好的时间是在pr pr中使用的时间,但是当我做了一个实验时,我发现在我使用100%-CPU-using程序(无限循环做加入)之后,好时光并没有增长Java)到19.所以,我很困惑......
顺便说一下,我打算写一个C ++程序来监控CPU的使用情况。我现在所能做的就是两次读/ proc / stat并获得不同。但是,我不知道如何计算Totle时间。
total = user + sys + idle
或
total = user + sys + nice + idle
甚至
total = user + sys + nice + idle + iowait + ...
(整行)。
哪个是对的?
答案 0 :(得分:1)
Mpstat(1)读取/proc/stat
。潜入内核源代码树我发现了一个文件kernel/sched/cputime.c
,取自Linux 3.11.7源代码,它似乎包含更新/proc/stat
中反映的内容的相关位:
/*
* Account user cpu time to a process.
* @p: the process that the cpu time gets accounted to
* @cputime: the cpu time spent in user space since the last update
* @cputime_scaled: cputime scaled by cpu frequency
*/
void account_user_time(struct task_struct *p, cputime_t cputime,
cputime_t cputime_scaled)
{
int index;
/* Add user time to process. */
p->utime += cputime;
p->utimescaled += cputime_scaled;
account_group_user_time(p, cputime);
index = (TASK_NICE(p) > 0) ? CPUTIME_NICE : CPUTIME_USER;
/* Add user time to cpustat. */
task_group_account_field(p, index, (__force u64) cputime);
/* Account for user time used */
acct_account_cputime(p);
}
这暗示运行niced任务所花费的时间不包括在显示运行用户模式任务所花费的时间的列中(行index=
似乎与此相关)。