From: Ravikiran G Thirumalai <kiran@scalex86.org>
To: Oleg Nesterov <oleg@tv-sign.ru>
Cc: Christoph Lameter <clameter@engr.sgi.com>,
Shai Fultheim <shai@scalex86.org>,
Nippun Goel <nippung@calsoftinc.com>,
linux-kernel@vger.kernel.org, Andrew Morton <akpm@osdl.org>
Subject: Re: [rfc][patch] Avoid taking global tasklist_lock for single threadedprocess at getrusage()
Date: Mon, 9 Jan 2006 12:54:42 -0800 [thread overview]
Message-ID: <20060109205442.GB3691@localhost.localdomain> (raw)
In-Reply-To: <43C2B1B7.635DDF0B@tv-sign.ru>
On Mon, Jan 09, 2006 at 09:55:51PM +0300, Oleg Nesterov wrote:
> Ravikiran G Thirumalai wrote:
> >
> >
> > Don't we still need rmb for the RUSAGE_SELF case? we do not take the
> > siglock for rusage self and the non c* signal fields are written to
> > at __exit_signal...
>
> I think it is unneeded because RUSAGE_SELF case is "racy" anyway even
> if we held both locks, task_struct->xxx counters can change at any
> moment.
>
> But may be you are right.
Hmm...access to task_struct->xxx has been racy, but accessing the
signal->* counters were not. What if read of the signal->utime was a
hoisted read and signal->stime was a read after the counter is updated?
This was not a possibility earlier no?
>
> > What is wrong with optimizing by not taking the siglock in RUSAGE_BOTH
> > and RUSAGE_CHILDREN? I would like to add that in too unless I am
> > missing something and the optimization is incorrect.
>
> We can't have contention on ->siglock when need_lock == 0, so why should
> we optimize this case?
We would be saving 1 buslocked operation in that case (on some arches), a
cacheline fetch for exclusive (since signal and sighand are on different memory
locations), and disabling/enabling onchip interrupts. But yes, this would be a
smaller optimization....Unless you have strong objections this can also
go in?
Thanks,
Kiran
Signed-off-by: Ravikiran Thirumalai <kiran@scalex86.org>
Index: linux-2.6.15-mm2/kernel/sys.c
===================================================================
--- linux-2.6.15-mm2.orig/kernel/sys.c 2006-01-09 12:44:30.000000000 -0800
+++ linux-2.6.15-mm2/kernel/sys.c 2006-01-09 12:45:07.000000000 -0800
@@ -1730,14 +1730,16 @@ static void k_getrusage(struct task_stru
switch (who) {
case RUSAGE_BOTH:
case RUSAGE_CHILDREN:
- spin_lock_irqsave(&p->sighand->siglock, flags);
+ if (need_lock)
+ spin_lock_irqsave(&p->sighand->siglock, flags);
utime = p->signal->cutime;
stime = p->signal->cstime;
r->ru_nvcsw = p->signal->cnvcsw;
r->ru_nivcsw = p->signal->cnivcsw;
r->ru_minflt = p->signal->cmin_flt;
r->ru_majflt = p->signal->cmaj_flt;
- spin_unlock_irqrestore(&p->sighand->siglock, flags);
+ if (need_lock)
+ spin_unlock_irqrestore(&p->sighand->siglock, flags);
if (who == RUSAGE_CHILDREN)
break;
next prev parent reply other threads:[~2006-01-09 20:54 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-12-24 17:52 [rfc][patch] Avoid taking global tasklist_lock for single threaded process at getrusage() Oleg Nesterov
2005-12-27 20:21 ` Christoph Lameter
2005-12-28 12:38 ` [rfc][patch] Avoid taking global tasklist_lock for single threadedprocess " Oleg Nesterov
2005-12-28 18:33 ` Ravikiran G Thirumalai
2005-12-28 22:57 ` Ravikiran G Thirumalai
2005-12-30 17:57 ` Oleg Nesterov
2006-01-04 23:16 ` Ravikiran G Thirumalai
2006-01-05 19:17 ` Oleg Nesterov
2006-01-06 9:46 ` Ravikiran G Thirumalai
2006-01-06 17:23 ` Christoph Lameter
2006-01-06 19:46 ` Ravikiran G Thirumalai
2006-03-20 18:04 ` Oleg Nesterov
2006-03-22 22:18 ` Ravikiran G Thirumalai
2006-03-23 18:18 ` Oleg Nesterov
2006-01-06 23:52 ` Andrew Morton
2006-01-08 11:49 ` Oleg Nesterov
2006-01-08 19:58 ` Ravikiran G Thirumalai
2006-01-09 18:55 ` Oleg Nesterov
2006-01-09 20:54 ` Ravikiran G Thirumalai [this message]
2006-01-10 19:03 ` Oleg Nesterov
2006-01-16 20:56 ` Ravikiran G Thirumalai
2006-01-17 19:59 ` Oleg Nesterov
2006-01-17 19:52 ` Ravikiran G Thirumalai
2006-01-18 9:17 ` Oleg Nesterov
2006-01-03 18:18 ` Christoph Lameter
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=20060109205442.GB3691@localhost.localdomain \
--to=kiran@scalex86.org \
--cc=akpm@osdl.org \
--cc=clameter@engr.sgi.com \
--cc=linux-kernel@vger.kernel.org \
--cc=nippung@calsoftinc.com \
--cc=oleg@tv-sign.ru \
--cc=shai@scalex86.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.