Thread (3 messages) 3 messages, 2 authors, 2008-12-16

Re: [PATCH, RESEND] getrusage: fill ru_maxrss value

flat view

From: Jiri Pirko <hidden>
Date: 2008-12-16 15:56:33
Also in: lkml

On Tue, 16 Dec 2008 16:20:54 +0100
Oleg Nesterov [off-list ref] wrote:
On 12/16, Jiri Pirko wrote:
quoted
This patch makes ->ru_maxrss value in struct rusage filled accordingly to
rss hiwater mark. This struct is filled as a parameter to
getrusage syscall. ->ru_maxrss value is set to pages which might be correct
as "time" application converts it to KBs.

To make this happen we extend struct signal_struct by two fields. The
first one is ->maxrss which we use to store rss hiwater of the task. The
second one is ->cmaxrss which we use to store highest rss hiwater of all
task childs. These values are used in k_getrusage() to actually fill
->ru_maxrss. k_getrusage() uses current rss hiwater value directly
if mm struct exists.

We clear the ->maxrss as a part of flush_old_exec() to be consistent
because bprm_mm_init() does not copy ->hiwater_rss.
Imho the patch is fine, but
quoted
@@ -1598,6 +1601,15 @@ static void k_getrusage(struct task_struct *p, int who, struct rusage *r)
 out:
 	cputime_to_timeval(utime, &r->ru_utime);
 	cputime_to_timeval(stime, &r->ru_stime);
+
+	task_lock(p);
+	if (p->mm) {
+		unsigned long maxrss = get_mm_hiwater_rss(p->mm);
+
+		if (r->ru_maxrss < maxrss)
+			r->ru_maxrss = maxrss;
+	}
+	task_unlock(p);
I think the code above should check "if (who != RUSAGE_CHILDREN) ?
Yes of course it should. Sorry I missed that :/ Will do new patch.
Oleg.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help