taskstats: add e/u/stime for TGID command
The elapsed time, user CPU time and system CPU time for the thread group status request are presently left at zero. Fill these in. [akpm@linux-foundation.org: run ktime_get_ns() a single time] [akpm@linux-foundation.org: include linux/sched/cputime.h for task_cputime()] Link: http://lkml.kernel.org/r/1488508424-12322-1-git-send-email-xiao.zhang@windriver.com Signed-off-by: Zhang Xiao <xiao.zhang@windriver.com> Cc: Balbir Singh <bsingharora@gmail.com> Cc: Oleg Nesterov <oleg@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
eaa0d190bf
commit
8c733420bd
1 changed files with 14 additions and 0 deletions
|
@ -30,6 +30,7 @@
|
|||
#include <linux/pid_namespace.h>
|
||||
#include <net/genetlink.h>
|
||||
#include <linux/atomic.h>
|
||||
#include <linux/sched/cputime.h>
|
||||
|
||||
/*
|
||||
* Maximum length of a cpumask that can be specified in
|
||||
|
@ -210,6 +211,8 @@ static int fill_stats_for_tgid(pid_t tgid, struct taskstats *stats)
|
|||
struct task_struct *tsk, *first;
|
||||
unsigned long flags;
|
||||
int rc = -ESRCH;
|
||||
u64 delta, utime, stime;
|
||||
u64 start_time;
|
||||
|
||||
/*
|
||||
* Add additional stats from live tasks except zombie thread group
|
||||
|
@ -227,6 +230,7 @@ static int fill_stats_for_tgid(pid_t tgid, struct taskstats *stats)
|
|||
memset(stats, 0, sizeof(*stats));
|
||||
|
||||
tsk = first;
|
||||
start_time = ktime_get_ns();
|
||||
do {
|
||||
if (tsk->exit_state)
|
||||
continue;
|
||||
|
@ -238,6 +242,16 @@ static int fill_stats_for_tgid(pid_t tgid, struct taskstats *stats)
|
|||
*/
|
||||
delayacct_add_tsk(stats, tsk);
|
||||
|
||||
/* calculate task elapsed time in nsec */
|
||||
delta = start_time - tsk->start_time;
|
||||
/* Convert to micro seconds */
|
||||
do_div(delta, NSEC_PER_USEC);
|
||||
stats->ac_etime += delta;
|
||||
|
||||
task_cputime(tsk, &utime, &stime);
|
||||
stats->ac_utime += div_u64(utime, NSEC_PER_USEC);
|
||||
stats->ac_stime += div_u64(stime, NSEC_PER_USEC);
|
||||
|
||||
stats->nvcsw += tsk->nvcsw;
|
||||
stats->nivcsw += tsk->nivcsw;
|
||||
} while_each_thread(first, tsk);
|
||||
|
|
Loading…
Reference in a new issue