Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1591729 > unrolled thread
| Started by | Zhang Xiao <xiao.zhang@windriver.com> |
|---|---|
| First post | 2017-03-03 09:10 +0100 |
| Last post | 2017-03-07 21:30 +0100 |
| Articles | 3 — 3 participants |
Back to article view | Back to linux.kernel
[PATCH] taskstats: Add e/u/stime for TGID command Zhang Xiao <xiao.zhang@windriver.com> - 2017-03-03 09:10 +0100
Re: [PATCH] taskstats: Add e/u/stime for TGID command Andrew Morton <akpm@linux-foundation.org> - 2017-03-07 00:50 +0100
Re: [PATCH] taskstats: Add e/u/stime for TGID command ZhangXiao <xiao.zhang@windriver.com> - 2017-03-07 21:30 +0100
| From | Zhang Xiao <xiao.zhang@windriver.com> |
|---|---|
| Date | 2017-03-03 09:10 +0100 |
| Subject | [PATCH] taskstats: Add e/u/stime for TGID command |
| Message-ID | <tgQrL-6Ey-1@gated-at.bofh.it> |
Add elapsed time, user CPU time and system CPU time to thread group status request. Signed-off-by: Zhang Xiao <xiao.zhang@windriver.com> --- kernel/taskstats.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/kernel/taskstats.c b/kernel/taskstats.c index 8a5e442..802a2bb 100644 --- a/kernel/taskstats.c +++ b/kernel/taskstats.c @@ -210,6 +210,7 @@ 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; /* * Add additional stats from live tasks except zombie thread group @@ -238,6 +239,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 = ktime_get_ns() - 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); -- 2.1.4
[toc] | [next] | [standalone]
| From | Andrew Morton <akpm@linux-foundation.org> |
|---|---|
| Date | 2017-03-07 00:50 +0100 |
| Message-ID | <tiay5-78t-1@gated-at.bofh.it> |
| In reply to | #1591729 |
On Fri, 3 Mar 2017 10:33:44 +0800 Zhang Xiao <xiao.zhang@windriver.com> wrote:
> Add elapsed time, user CPU time and system CPU time to
> thread group status request.
>
> --- a/kernel/taskstats.c
> +++ b/kernel/taskstats.c
> @@ -210,6 +210,7 @@ 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;
>
> /*
> * Add additional stats from live tasks except zombie thread group
> @@ -238,6 +239,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 = ktime_get_ns() - 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);
hm, OK, we were just leaving these at zero. Seems sane to me.
It would be more efficient and perhaps more deterministic to sample
ktime just once?
--- a/kernel/taskstats.c~taskstats-add-e-u-stime-for-tgid-command-fix
+++ a/kernel/taskstats.c
@@ -211,6 +211,7 @@ static int fill_stats_for_tgid(pid_t tgi
unsigned long flags;
int rc = -ESRCH;
u64 delta, utime, stime;
+ u64 start_time;
/*
* Add additional stats from live tasks except zombie thread group
@@ -228,6 +229,7 @@ static int fill_stats_for_tgid(pid_t tgi
memset(stats, 0, sizeof(*stats));
tsk = first;
+ start_time = ktime_get_ns();
do {
if (tsk->exit_state)
continue;
@@ -240,7 +242,7 @@ static int fill_stats_for_tgid(pid_t tgi
delayacct_add_tsk(stats, tsk);
/* calculate task elapsed time in nsec */
- delta = ktime_get_ns() - tsk->start_time;
+ delta = start_time - tsk->start_time;
/* Convert to micro seconds */
do_div(delta, NSEC_PER_USEC);
stats->ac_etime += delta;
_
[toc] | [prev] | [next] | [standalone]
| From | ZhangXiao <xiao.zhang@windriver.com> |
|---|---|
| Date | 2017-03-07 21:30 +0100 |
| Message-ID | <titU5-4iQ-3@gated-at.bofh.it> |
| In reply to | #1593799 |
在 2017年03月07日 06:40, Andrew Morton 写道:
> On Fri, 3 Mar 2017 10:33:44 +0800 Zhang Xiao <xiao.zhang@windriver.com> wrote:
>
>> Add elapsed time, user CPU time and system CPU time to
>> thread group status request.
>>
>> --- a/kernel/taskstats.c
>> +++ b/kernel/taskstats.c
>> @@ -210,6 +210,7 @@ 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;
>>
>> /*
>> * Add additional stats from live tasks except zombie thread group
>> @@ -238,6 +239,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 = ktime_get_ns() - 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);
>
> hm, OK, we were just leaving these at zero. Seems sane to me.
>
> It would be more efficient and perhaps more deterministic to sample
> ktime just once?
>
yes, that makes the code more readable. :-)
Thanks
Xiao
> --- a/kernel/taskstats.c~taskstats-add-e-u-stime-for-tgid-command-fix
> +++ a/kernel/taskstats.c
> @@ -211,6 +211,7 @@ static int fill_stats_for_tgid(pid_t tgi
> unsigned long flags;
> int rc = -ESRCH;
> u64 delta, utime, stime;
> + u64 start_time;
>
> /*
> * Add additional stats from live tasks except zombie thread group
> @@ -228,6 +229,7 @@ static int fill_stats_for_tgid(pid_t tgi
> memset(stats, 0, sizeof(*stats));
>
> tsk = first;
> + start_time = ktime_get_ns();
> do {
> if (tsk->exit_state)
> continue;
> @@ -240,7 +242,7 @@ static int fill_stats_for_tgid(pid_t tgi
> delayacct_add_tsk(stats, tsk);
>
> /* calculate task elapsed time in nsec */
> - delta = ktime_get_ns() - tsk->start_time;
> + delta = start_time - tsk->start_time;
> /* Convert to micro seconds */
> do_div(delta, NSEC_PER_USEC);
> stats->ac_etime += delta;
> _
>
>
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web