From: Michael Holzheu <holzheu@linux.vnet.ibm.com>
To: Shailabh Nagar <nagar1234@in.ibm.com>,
Andrew Morton <akpm@linux-foundation.org>,
Venkatesh Pallipadi <venki@google.com>,
Suresh Siddha <suresh.b.siddha@intel.com>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Ingo Molnar <mingo@elte.hu>, Oleg Nesterov <oleg@redhat.com>,
John stultz <johnstul@us.ibm.com>,
Thomas Gleixner <tglx@linutronix.de>,
Balbir Singh <balbir@linux.vnet.ibm.com>,
Martin Schwidefsky <schwidefsky@de.ibm.com>,
Heiko Carstens <heiko.carstens@de.ibm.com>,
Roland McGrath <roland@redhat.com>
Cc: linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org
Subject: [RFC][PATCH v2 6/7] taskstats: Fix accounting for non-leader thread exec
Date: Thu, 11 Nov 2010 18:03:58 +0100 [thread overview]
Message-ID: <20101111170815.808518393@linux.vnet.ibm.com> (raw)
In-Reply-To: 20101111170352.732381138@linux.vnet.ibm.com
[-- Attachment #1: 06-taskstats-top-fix-exec.patch --]
[-- Type: text/plain, Size: 2453 bytes --]
From: Michael Holzheu <holzheu@linux.vnet.ibm.com>
If a non-leader thread calls exec(), in the de_thread() function it
gets some of the identity of the old thread group leader e.g. the PID
and the start time. But it keeps the old CPU times. This may lead to
confusion in user space, because CPU time can go backwards for the
thread group leader. For example the top command shows the following
for that test case:
# top -H
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
17278 root 20 0 84128 664 500 R >>9999.0<< 0.0 0:02.75 pthread_exec
To fix this problem, this patch exchanges the accounting data between the
exec() calling thread an the thread group leader in de_thread().
One problem with this patch could be that the scheduler might get confused
by the CPU time change.
Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
---
fs/exec.c | 22 +++++++++++++++++++---
1 file changed, 19 insertions(+), 3 deletions(-)
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -844,16 +844,32 @@ static int de_thread(struct task_struct
/*
* The only record we have of the real-time age of a
- * process, regardless of execs it's done, is start_time.
+ * process, regardless of execs it's done, is start_time
+ * and the accounting data.
* All the past CPU time is accumulated in signal_struct
* from sister threads now dead. But in this non-leader
* exec, nothing survives from the original leader thread,
* whose birth marks the true age of this process now.
* When we take on its identity by switching to its PID, we
- * also take its birthdate (always earlier than our own).
+ * also take its birthdate (always earlier than our own)
+ * and the accounting data.
*/
tsk->start_time = leader->start_time;
-
+ swap(tsk->nvcsw, leader->nvcsw);
+ swap(tsk->nivcsw, leader->nivcsw);
+ swap(tsk->min_flt, leader->min_flt);
+ swap(tsk->ioac, leader->ioac);
+ swap(tsk->utime, leader->utime);
+ swap(tsk->stime, leader->stime);
+ swap(tsk->gtime, leader->gtime);
+ swap(tsk->sttime, leader->sttime);
+ swap(tsk->acct_time, leader->acct_time);
+ swap(tsk->real_start_time, leader->real_start_time);
+#ifndef CONFIG_VIRT_CPU_ACCOUNTING
+ swap(tsk->prev_utime, leader->prev_utime);
+ swap(tsk->prev_stime, leader->prev_stime);
+ swap(tsk->prev_sttime, leader->prev_sttime);
+#endif
BUG_ON(!same_thread_group(leader, tsk));
BUG_ON(has_group_leader_pid(tsk));
/*
next prev parent reply other threads:[~2010-11-11 17:08 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-11 17:03 [RFC][PATCH v2 0/7] taskstats: Enhancements for precise process accounting (version 2) Michael Holzheu
2010-11-11 17:03 ` [RFC][PATCH v2 1/7] taskstats: Add new taskstats command TASKSTATS_CMD_ATTR_PIDS Michael Holzheu
2010-11-13 19:20 ` Peter Zijlstra
2010-11-15 15:53 ` Michael Holzheu
2010-11-15 16:06 ` Peter Zijlstra
2010-11-15 17:09 ` Michael Holzheu
2010-11-15 17:21 ` Peter Zijlstra
2010-11-16 12:16 ` Michael Holzheu
2010-11-16 12:36 ` Peter Zijlstra
2010-11-13 19:39 ` Peter Zijlstra
2010-11-13 20:00 ` Balbir Singh
2010-11-15 14:50 ` Michael Holzheu
2010-11-11 17:03 ` [RFC][PATCH v2 2/7] taskstats: Add "/proc/taskstats" Michael Holzheu
2010-11-11 17:03 ` [RFC][PATCH v2 3/7] taskstats: Add thread group ID to taskstats structure Michael Holzheu
2010-11-11 17:03 ` [RFC][PATCH v2 4/7] taskstats: Add per task steal time accounting Michael Holzheu
2010-11-13 19:38 ` Peter Zijlstra
2010-11-15 14:50 ` Martin Schwidefsky
2010-11-15 15:11 ` Peter Zijlstra
2010-11-15 17:42 ` Martin Schwidefsky
2010-11-15 17:45 ` Peter Zijlstra
2010-11-15 17:47 ` Peter Zijlstra
2010-11-15 17:48 ` Peter Zijlstra
2010-11-15 17:50 ` Peter Zijlstra
2010-11-15 17:59 ` Martin Schwidefsky
2010-11-15 18:08 ` Peter Zijlstra
2010-11-16 8:51 ` Martin Schwidefsky
2010-11-16 12:16 ` Peter Zijlstra
2010-11-16 15:33 ` Martin Schwidefsky
2010-11-16 15:45 ` Peter Zijlstra
2010-11-16 16:05 ` Martin Schwidefsky
2010-11-16 18:39 ` Jeremy Fitzhardinge
2010-11-16 16:38 ` Avi Kivity
2010-11-16 16:43 ` Peter Zijlstra
2010-11-16 16:56 ` Avi Kivity
2010-11-16 17:06 ` Avi Kivity
2010-11-11 17:03 ` [RFC][PATCH v2 5/7] taskstats: Improve cumulative CPU " Michael Holzheu
2010-11-13 18:38 ` Oleg Nesterov
2010-11-15 15:55 ` Martin Schwidefsky
2010-11-15 16:03 ` Peter Zijlstra
2010-11-15 17:49 ` Martin Schwidefsky
2010-11-15 17:51 ` Peter Zijlstra
2010-11-15 18:00 ` Martin Schwidefsky
2010-11-15 18:10 ` Peter Zijlstra
2010-11-16 8:54 ` Martin Schwidefsky
2010-11-16 16:57 ` Michael Holzheu
2010-11-18 17:10 ` Oleg Nesterov
2010-11-19 19:46 ` Michael Holzheu
2010-11-16 17:34 ` Michael Holzheu
2010-11-16 17:50 ` Oleg Nesterov
2010-11-18 16:34 ` Oleg Nesterov
2010-11-11 17:03 ` Michael Holzheu [this message]
2010-11-11 17:11 ` [RFC][PATCH v2 7/7] taskstats: Precise process accounting user space Michael Holzheu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20101111170815.808518393@linux.vnet.ibm.com \
--to=holzheu@linux.vnet.ibm.com \
--cc=a.p.zijlstra@chello.nl \
--cc=akpm@linux-foundation.org \
--cc=balbir@linux.vnet.ibm.com \
--cc=heiko.carstens@de.ibm.com \
--cc=johnstul@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=nagar1234@in.ibm.com \
--cc=oleg@redhat.com \
--cc=roland@redhat.com \
--cc=schwidefsky@de.ibm.com \
--cc=suresh.b.siddha@intel.com \
--cc=tglx@linutronix.de \
--cc=venki@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox