From: Matt Helsley <matthltc@us.ibm.com>
To: Benjamin Blum <bblum@google.com>
Cc: Paul Menage <menage@google.com>,
Matt Helsley <matthltc@us.ibm.com>,
linux-kernel@vger.kernel.org,
containers@lists.linux-foundation.org, akpm@linux-foundation.org,
serue@us.ibm.com, lizf@cn.fujitsu.com
Subject: Re: [PATCH 5/6] Makes procs file writable to move all threads by tgid at once
Date: Fri, 24 Jul 2009 14:06:57 -0700 [thread overview]
Message-ID: <20090724210657.GL5878@count0.beaverton.ibm.com> (raw)
In-Reply-To: <2f86c2480907241353l63818dfehb20c9d4918a3f069@mail.gmail.com>
On Fri, Jul 24, 2009 at 01:53:53PM -0700, Benjamin Blum wrote:
> On Fri, Jul 24, 2009 at 1:47 PM, Paul Menage<menage@google.com> wrote:
> > On Fri, Jul 24, 2009 at 10:23 AM, Matt Helsley<matthltc@us.ibm.com> wrote:
> >>
> >> Well, I imagine holding tasklist_lock is worse than cgroup_mutex in some
> >> ways since it's used even more widely. Makes sense not to use it here..
> >
> > Just to clarify - the new "procs" code doesn't use cgroup_mutex for
> > its critical section, it uses a new cgroup_fork_mutex, which is only
> > taken for write during cgroup_proc_attach() (after all setup has been
> > done, to ensure that no new threads are created while we're updating
> > all the existing threads). So in general there'll be zero contention
> > on this lock - the cost will be the cache misses due to the rwlock
> > bouncing between the different CPUs that are taking it in read mode.
>
> Right. The different options so far are:
>
> Global rwsem: only needs one lock, but prevents all forking when a
> write is in progress. It should be quick enough, if it's just "iterate
> down the threadgroup list in O(n)". In the good case, fork() slows
> down by a cache miss when taking the lock in read mode.
I noticed your point about only one process contending for write on
the new semaphore since cgroup_mutex is also held on the write side.
However won't there be cacheline bouncing as lots of readers contend not
for the read side of the lock itself but the cacheline needed to take it?
> Threadgroup-local rwsem: Needs adding a field to task_struct. Only
> forks within the same threadgroup would block on a write to the procs
> file, and the zero-contention case is the same as before.
This seems like it would be better.
> Using tasklist_lock: Currently, the call to cgroup_fork() (which
> starts the race) is very far above where tasklist_lock is taken in
> fork, so taking tasklist_lock earlier is very infeasible. Could
> cgroup_fork() be moved downwards to inside it, and if so, how much
> restructuring would be needed? Even if so, this still adds stuff that
> is being done (unnecessarily) while holding a global mutex.
Yup.
> > What happened to the big-reader lock concept from 2.4.x? That would be
> > applicable here - minimizing the overhead on the critical path when
> > the write operation is expected to be very rare.
Supplanted by RCU perhaps? *shrug*
Cheers,
-Matt Helsley
next prev parent reply other threads:[~2009-07-24 21:07 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-24 3:21 [PATCH 0/6] CGroups: cgroup memberlist enhancement+fix Ben Blum
2009-07-24 3:21 ` [PATCH 1/6] Adds a read-only "procs" file similar to "tasks" that shows only unique tgids Ben Blum
2009-07-24 3:21 ` [PATCH 2/6] Ensures correct concurrent opening/reading of pidlists across pid namespaces Ben Blum
2009-07-24 3:21 ` [PATCH 3/6] Quick vmalloc vs kmalloc fix to the case where array size is too large Ben Blum
2009-07-27 5:14 ` Li Zefan
2009-07-27 15:49 ` Benjamin Blum
2009-07-24 3:21 ` [PATCH 4/6] Changes css_set freeing mechanism to be under RCU Ben Blum
2009-07-24 3:22 ` [PATCH 5/6] Makes procs file writable to move all threads by tgid at once Ben Blum
2009-07-24 10:02 ` Louis Rilling
2009-07-24 10:08 ` Louis Rilling
2009-07-24 19:05 ` Benjamin Blum
2009-07-24 21:52 ` Benjamin Blum
2009-07-24 21:57 ` Paul Menage
2009-08-03 10:52 ` Louis Rilling
2009-07-29 0:23 ` Benjamin Blum
2009-08-03 11:00 ` Louis Rilling
2009-07-24 15:50 ` Matt Helsley
2009-07-24 16:01 ` Paul Menage
2009-07-24 17:23 ` Matt Helsley
2009-07-24 17:47 ` Paul Menage
2009-07-24 20:53 ` Benjamin Blum
2009-07-24 21:06 ` Matt Helsley [this message]
2009-07-24 21:36 ` Paul Menage
2009-11-09 17:07 ` Daniel Lezcano
2009-11-10 1:29 ` Li Zefan
2009-11-10 10:26 ` Daniel Lezcano
2009-11-11 2:07 ` Li Zefan
2009-11-11 20:06 ` Daniel Lezcano
2009-07-24 3:22 ` [PATCH 6/6] Lets ss->can_attach and ss->attach do whole threadgroups at a time Ben Blum
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=20090724210657.GL5878@count0.beaverton.ibm.com \
--to=matthltc@us.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=bblum@google.com \
--cc=containers@lists.linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lizf@cn.fujitsu.com \
--cc=menage@google.com \
--cc=serue@us.ibm.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
all inboxes | Powered by JetHome®