mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Matt Helsley <matthltc@us.ibm.com>
To: Paul Menage <menage@google.com>
Cc: "Serge E. Hallyn" <serue@us.ibm.com>,
	Benjamin Blum <bblum@google.com>,
	containers@lists.linux-foundation.org, akpm@linux-foundation.org,
	linux-kernel@vger.kernel.org, Rafael Wysocki <rjw@sisk.pl>,
	Linux Power Management <linux-pm@lists.linux-foundation.org>
Subject: Re: [PATCH 6/6] Makes procs file writable to move all threads by tgid at once
Date: Tue, 4 Aug 2009 14:40:38 -0700	[thread overview]
Message-ID: <20090804214038.GA5141@count0.beaverton.ibm.com> (raw)
In-Reply-To: <6599ad830908031255j68ce047x7165bfefa62ed53c@mail.gmail.com>

[ Cc'ing Rafael and linux-pm for more eyes on proposed freezer usage. ]

On Mon, Aug 03, 2009 at 12:55:33PM -0700, Paul Menage wrote:
> On Mon, Aug 3, 2009 at 12:45 PM, Serge E. Hallyn<serue@us.ibm.com> wrote:
> >
> > This is probably a stupid idea, but...  what about having zero
> > overhead at clone(), and instead, at cgroup_task_migrate(),
> > dequeue_task()ing all of the affected threads for the duration of
> > the migrate?
> 
> That doesn't sound too unreasonable, actually - it would certainly
> simplify things a fair bit. Is there a standard API for doing that?

I'm all for simplifying cgroup locking. I doubt anybody's against
it, given the "right" simplification.

I'm not sure if the freezer is actually the right thing to
use for this though. Perhaps CFS/scheduler folks could advise?

> dequeue_task() itself doesn't really look like a public API. I guess
> that the task freezer would be one way to accomplish this?
 
The freezer won't actually remove the task from the runqueue -- just
cause it to go into a schedule() loop until it's thawed.

[ Incidentally, sorry if this is a dumb question, but why don't frozen
tasks go onto a special wait queue rather than loop around schedule() ? 
At least for the cgroup freezer I can imagine keeping the wait queue
with the cgroup subsystem... ]

The freezer sends a fake signal to the task which will interrupt syscalls
and userspace to handle the signal. So all of the frozen tasks would be
looping around schedule() just inside the syscall entry layer "handling"
the fake signal until they are thawed.

This could interrupt a read of the cgroup pidlist for example.

I don't think it's 100% reliable -- vfork-ing tasks could delay freezing
the task "indefinitely" if the vfork'ing userspace tasks are 
clueless/malicious.

However the signaling code used there uses kick_process() which may be
needed for this idea.

So if I understand correctly it goes something like:

for each thread
	dequeue from runqueue onto ?what?
	kick thread (I think this should ensure that the thread is no longer
			"current" on any CPU since we dequeued..)

<seems we'd need something to ensure that the previous operations on each
thread have "completed" as far as all other cpus are concerned...>

for each thread
	cgroup migrate

for each thread
	enqueue back on runqueue from ?what? (is this still the right
						queue?)

Cheers,
	-Matt Helsley

  parent reply	other threads:[~2009-08-04 21:40 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-31  1:51 [PATCH v2 0/6] CGroups: cgroup memberlist enhancement+fix Ben Blum
2009-07-31  1:51 ` [PATCH 1/6] Adds a read-only "procs" file similar to "tasks" that shows only unique tgids Ben Blum
2009-07-31  1:51 ` [PATCH 2/6] Ensures correct concurrent opening/reading of pidlists across pid namespaces Ben Blum
2009-07-31  1:51 ` [PATCH 3/6] Quick vmalloc vs kmalloc fix to the case where array size is too large Ben Blum
2009-07-31  1:51 ` [PATCH 4/6] Changes css_set freeing mechanism to be under RCU Ben Blum
2009-07-31  1:51 ` [PATCH 5/6] Lets ss->can_attach and ss->attach do whole threadgroups at a time Ben Blum
2009-08-03  2:22   ` Li Zefan
2009-08-04  0:35     ` Benjamin Blum
2009-07-31  1:51 ` [PATCH 6/6] Makes procs file writable to move all threads by tgid at once Ben Blum
2009-08-03  3:00   ` Li Zefan
2009-08-04  0:56     ` Benjamin Blum
2009-08-04  1:05       ` Paul Menage
2009-08-04  1:11         ` Benjamin Blum
2009-08-04  1:09       ` Li Zefan
2009-08-04  1:19         ` Benjamin Blum
2009-08-04  1:45           ` Li Zefan
2009-08-04  1:55             ` Paul Menage
2009-08-03 17:54   ` Serge E. Hallyn
2009-08-03 18:07     ` Paul Menage
2009-08-03 18:13     ` Benjamin Blum
2009-08-03 18:55       ` Serge E. Hallyn
2009-08-03 19:45         ` Serge E. Hallyn
2009-08-03 19:55           ` Paul Menage
2009-08-04 14:01             ` Serge E. Hallyn
2009-08-04 21:40             ` Matt Helsley [this message]
2009-08-04 18:48           ` Paul Menage
2009-08-04 19:01             ` Serge E. Hallyn
2009-08-04 19:14             ` Benjamin Blum
2009-08-04 19:28               ` Paul Menage
2009-08-05 10:20                 ` Louis Rilling
2009-08-05 16:11                   ` Paul Menage
2009-08-05 16:42                     ` Louis Rilling
2009-08-05 16:53                       ` Peter Zijlstra
2009-08-06  0:01                       ` Benjamin Blum
2009-08-06  9:58                         ` Louis Rilling
2009-08-06 10:04                           ` Louis Rilling
2009-08-06 10:28                           ` Paul Menage
2009-08-06 10:34                             ` Peter Zijlstra
2009-08-06 10:42                               ` Paul Menage
2009-08-06 11:02                                 ` Peter Zijlstra
2009-08-06 11:24                                   ` Paul Menage
2009-08-06 11:39                                     ` Peter Zijlstra
2009-08-06 15:19                                       ` Paul E. McKenney
2009-08-06 15:24                                         ` Peter Zijlstra
2009-08-06 15:37                                           ` Paul E. McKenney
2009-08-06 11:24                             ` Louis Rilling
2009-08-06 11:40                               ` Paul Menage
2009-08-06 14:54                                 ` Louis Rilling
2009-08-08  1:41                                 ` Benjamin Blum
2009-08-08  1:51                                   ` Benjamin 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=20090804214038.GA5141@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=linux-pm@lists.linux-foundation.org \
    --cc=menage@google.com \
    --cc=rjw@sisk.pl \
    --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®