2008-02-05 05:55:43

by Sripathi Kodi

[permalink] [raw]
Subject: [PATCH] RUSAGE_THREAD

Hi Andrew,

This adds the RUSAGE_THREAD option for the getrusage system call.
This is essentially Roland's patch from http://lkml.org/lkml/2008/1/18/589,
but the line about RUSAGE_LWP line has been removed, as suggested
by Ulrich and Christoph.

Thanks,
Sripathi.

This adds the RUSAGE_THREAD option for the getrusage system call.

Signed-off-by: Roland McGrath <[email protected]>
Signed-off-by: Sripathi Kodi <[email protected]>
---
include/linux/resource.h | 1 +
kernel/sys.c | 31 ++++++++++++++++++++++---------
2 files changed, 23 insertions(+), 9 deletions(-)

diff -uprN linux-2.6.24_org/include/linux/resource.h linux-2.6.24/include/linux/resource.h
--- linux-2.6.24_org/include/linux/resource.h 2008-02-05 10:13:04.000000000 +0530
+++ linux-2.6.24/include/linux/resource.h 2008-02-05 10:14:59.000000000 +0530
@@ -19,6 +19,7 @@ struct task_struct;
#define RUSAGE_SELF 0
#define RUSAGE_CHILDREN (-1)
#define RUSAGE_BOTH (-2) /* sys_wait4() uses this */
+#define RUSAGE_THREAD 1 /* only the calling thread */

struct rusage {
struct timeval ru_utime; /* user time used */
diff -uprN linux-2.6.24_org/kernel/sys.c linux-2.6.24/kernel/sys.c
--- linux-2.6.24_org/kernel/sys.c 2008-02-05 10:13:02.000000000 +0530
+++ linux-2.6.24/kernel/sys.c 2008-02-05 10:13:21.000000000 +0530
@@ -1554,6 +1554,19 @@ out:
*
*/

+static void accumulate_thread_rusage(struct task_struct *t, struct rusage *r,
+ cputime_t *utimep, cputime_t *stimep)
+{
+ *utimep = cputime_add(*utimep, t->utime);
+ *stimep = cputime_add(*stimep, t->stime);
+ r->ru_nvcsw += t->nvcsw;
+ r->ru_nivcsw += t->nivcsw;
+ r->ru_minflt += t->min_flt;
+ r->ru_majflt += t->maj_flt;
+ r->ru_inblock += task_io_get_inblock(t);
+ r->ru_oublock += task_io_get_oublock(t);
+}
+
static void k_getrusage(struct task_struct *p, int who, struct rusage *r)
{
struct task_struct *t;
@@ -1563,6 +1576,11 @@ static void k_getrusage(struct task_stru
memset((char *) r, 0, sizeof *r);
utime = stime = cputime_zero;

+ if (who == RUSAGE_THREAD) {
+ accumulate_thread_rusage(p, r, &utime, &stime);
+ goto out;
+ }
+
rcu_read_lock();
if (!lock_task_sighand(p, &flags)) {
rcu_read_unlock();
@@ -1595,14 +1613,7 @@ static void k_getrusage(struct task_stru
r->ru_oublock += p->signal->oublock;
t = p;
do {
- utime = cputime_add(utime, t->utime);
- stime = cputime_add(stime, t->stime);
- r->ru_nvcsw += t->nvcsw;
- r->ru_nivcsw += t->nivcsw;
- r->ru_minflt += t->min_flt;
- r->ru_majflt += t->maj_flt;
- r->ru_inblock += task_io_get_inblock(t);
- r->ru_oublock += task_io_get_oublock(t);
+ accumulate_thread_rusage(t, r, &utime, &stime);
t = next_thread(t);
} while (t != p);
break;
@@ -1614,6 +1625,7 @@ static void k_getrusage(struct task_stru
unlock_task_sighand(p, &flags);
rcu_read_unlock();

+out:
cputime_to_timeval(utime, &r->ru_utime);
cputime_to_timeval(stime, &r->ru_stime);
}
@@ -1627,7 +1639,8 @@ int getrusage(struct task_struct *p, int

asmlinkage long sys_getrusage(int who, struct rusage __user *ru)
{
- if (who != RUSAGE_SELF && who != RUSAGE_CHILDREN)
+ if (who != RUSAGE_SELF && who != RUSAGE_CHILDREN &&
+ who != RUSAGE_THREAD)
return -EINVAL;
return getrusage(current, who, ru);
}


2008-02-22 17:45:19

by Michael Kerrisk

[permalink] [raw]
Subject: Re: [PATCH] RUSAGE_THREAD



Sripathi Kodi wrote:
> Hi Andrew,
>
> This adds the RUSAGE_THREAD option for the getrusage system call.
> This is essentially Roland's patch from http://lkml.org/lkml/2008/1/18/589,
> but the line about RUSAGE_LWP line has been removed, as suggested
> by Ulrich and Christoph.
>
> Thanks,
> Sripathi.
>
> This adds the RUSAGE_THREAD option for the getrusage system call.

Sripathi,

Could you write some small piece of text for the getrusage.2 man page that
describes the intended behavior of RUSAGE_THREAD?

Thanks,

Michael

--
Michael Kerrisk
Maintainer of the Linux man-pages project
http://www.kernel.org/doc/man-pages/
Want to report a man-pages bug? Look here:
http://www.kernel.org/doc/man-pages/reporting_bugs.html

2008-02-27 11:41:37

by Sripathi Kodi

[permalink] [raw]
Subject: Re: [PATCH] RUSAGE_THREAD

On Friday 22 February 2008 23:13, Michael Kerrisk wrote:
> Sripathi Kodi wrote:
> > Hi Andrew,
> >
> > This adds the RUSAGE_THREAD option for the getrusage system call.
> > This is essentially Roland's patch from
> > http://lkml.org/lkml/2008/1/18/589, but the line about RUSAGE_LWP
> > line has been removed, as suggested by Ulrich and Christoph.
> >
> > Thanks,
> > Sripathi.
> >
> > This adds the RUSAGE_THREAD option for the getrusage system call.
>
> Sripathi,
>
> Could you write some small piece of text for the getrusage.2 man page
> that describes the intended behavior of RUSAGE_THREAD?

Michael,

Please take a look at the following patch to getrusage.2. This is the first
time I have edited a manpage, so I hope I have done it correctly!

Also, the RUSAGE_THREAD patch is currently in -mm, but not in mainline
yet. Hoping that it will make it, I have put a line in the patch that it is
supported from 2.6.25 onwards.

Thanks,
Sripathi.

PS: I fixed spelling error in Ulrich's mail id in the CC list.

Signed-off-by: Sripathi Kodi <[email protected]>

--- getrusage.2.org 2008-02-27 17:00:57.000000000 +0530
+++ getrusage.2 2008-02-27 17:01:28.000000000 +0530
@@ -44,12 +44,22 @@ getrusage \- get resource usage
.PP
.BR getrusage ()
returns current resource usages, for a \fIwho\fP
-of either
+of
+.B RUSAGE_THREAD,
.B RUSAGE_SELF
or
.BR RUSAGE_CHILDREN .
-The former asks for resources used by the current process,
-the latter for resources used by those of its children
+.PP
+.B RUSAGE_THREAD
+asks for resources used by the calling thread.
+.PP
+.B RUSAGE_SELF
+asks for resources used by the current process,
+which is the sum of resources used by all threads
+in the process.
+.PP
+.B RUSAGE_CHILDREN
+asks for resources used by those of its children
that have terminated and have been waited for.
.PP
.in +0.5i
@@ -130,6 +140,9 @@ Since Linux 2.6,
and
.I ru_nivcsw
are also maintained.
+.PP
+.B RUSAGE_THREAD
+is supported only in Linux kernel versions 2.6.25 and above.
.SH "SEE ALSO"
.BR getrlimit (2),
.BR times (2),

2008-03-10 15:34:41

by Michael Kerrisk

[permalink] [raw]
Subject: Re: [PATCH] RUSAGE_THREAD



Sripathi Kodi wrote:
> On Friday 22 February 2008 23:13, Michael Kerrisk wrote:
>> Sripathi Kodi wrote:
>>> Hi Andrew,
>>>
>>> This adds the RUSAGE_THREAD option for the getrusage system call.
>>> This is essentially Roland's patch from
>>> http://lkml.org/lkml/2008/1/18/589, but the line about RUSAGE_LWP
>>> line has been removed, as suggested by Ulrich and Christoph.
>>>
>>> Thanks,
>>> Sripathi.
>>>
>>> This adds the RUSAGE_THREAD option for the getrusage system call.
>> Sripathi,
>>
>> Could you write some small piece of text for the getrusage.2 man page
>> that describes the intended behavior of RUSAGE_THREAD?
>
> Michael,
>
> Please take a look at the following patch to getrusage.2. This is the first
> time I have edited a manpage, so I hope I have done it correctly!
>
> Also, the RUSAGE_THREAD patch is currently in -mm, but not in mainline
> yet. Hoping that it will make it, I have put a line in the patch that it is
> supported from 2.6.25 onwards.

Sripathi,

Thanks for the patch -- looks reasonable to me.

I see that RUSAGE_THREAD didin't make the cut for 2.6.25. If you remember,
could you ping me when it does hit mainline.

Cheers,

Michael


> PS: I fixed spelling error in Ulrich's mail id in the CC list.
>
> Signed-off-by: Sripathi Kodi <[email protected]>
>
> --- getrusage.2.org 2008-02-27 17:00:57.000000000 +0530
> +++ getrusage.2 2008-02-27 17:01:28.000000000 +0530
> @@ -44,12 +44,22 @@ getrusage \- get resource usage
> .PP
> .BR getrusage ()
> returns current resource usages, for a \fIwho\fP
> -of either
> +of
> +.B RUSAGE_THREAD,
> .B RUSAGE_SELF
> or
> .BR RUSAGE_CHILDREN .
> -The former asks for resources used by the current process,
> -the latter for resources used by those of its children
> +.PP
> +.B RUSAGE_THREAD
> +asks for resources used by the calling thread.
> +.PP
> +.B RUSAGE_SELF
> +asks for resources used by the current process,
> +which is the sum of resources used by all threads
> +in the process.
> +.PP
> +.B RUSAGE_CHILDREN
> +asks for resources used by those of its children
> that have terminated and have been waited for.
> .PP
> .in +0.5i
> @@ -130,6 +140,9 @@ Since Linux 2.6,
> and
> .I ru_nivcsw
> are also maintained.
> +.PP
> +.B RUSAGE_THREAD
> +is supported only in Linux kernel versions 2.6.25 and above.
> .SH "SEE ALSO"
> .BR getrlimit (2),
> .BR times (2),
>

--
Michael Kerrisk
Maintainer of the Linux man-pages project
http://www.kernel.org/doc/man-pages/
Want to report a man-pages bug? Look here:
http://www.kernel.org/doc/man-pages/reporting_bugs.html