* Re: [PATCH 0/4] Container Freezer: Reuse Suspend Freezer
[not found] <20080403001529.052250759@us.ibm.com>
@ 2008-04-03 0:19 ` Matt Helsley
0 siblings, 0 replies; 11+ messages in thread
From: Matt Helsley @ 2008-04-03 0:19 UTC (permalink / raw)
To: Linux-Kernel; +Cc: Cedric Le Goater, linux-pm
On Wed, 2008-04-02 at 17:15 -0700, Matt Helsley wrote:
<snip>
> * Series
>
> Applies to 2.6.25-rc8-mm1
>
> The first patches make the freezer available to all architectures
> before implementing the freezer subsystem.
>
> [PATCH 1/4] Add TIF_FREEZE flag to all architectures
> [PATCH 2/4] Make refrigerator always available
> [PATCH 3/4] Implement freezer cgroup subsystem
> [PATCH 4/4] Skip frozen cgroups during power management resume
Argh. I forgot to add [RFC] tags to all of these!
> Each patch compiles, boots, and survives basic LTP containers and controllers
> tests.
>
> Comments are welcome.
>
> Cheers,
> -Matt Helsley
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [patch 0/4] Container Freezer: Reuse Suspend Freezer
@ 2008-06-24 13:58 Matt Helsley
0 siblings, 0 replies; 11+ messages in thread
From: Matt Helsley @ 2008-06-24 13:58 UTC (permalink / raw)
To: Rafael J. Wysocki
Cc: Paul Menage, Pavel Machek, Linux-Kernel, linux-pm,
Linux Containers
This patchset reuses the container infrastructure and the swsusp freezer to
freeze a group of tasks.
The freezer subsystem in the container filesystem defines a file named
freezer.state. Writing "FROZEN" to the state file will freeze all tasks in the
cgroup. Subsequently writing "RUNNING" will unfreeze the tasks in the cgroup.
Reading will return the current state.
* Examples of usage :
# mkdir /containers/freezer
# mount -t cgroup -ofreezer,signal freezer /containers
# mkdir /containers/0
# echo $some_pid > /containers/0/tasks
to get status of the freezer subsystem :
# cat /containers/0/freezer.state
RUNNING
to freeze all tasks in the container :
# echo FROZEN > /containers/0/freezer.state
# cat /containers/0/freezer.state
FREEZING
# cat /containers/0/freezer.state
FROZEN
to unfreeze all tasks in the container :
# echo RUNNING > /containers/0/freezer.state
# cat /containers/0/freezer.state
RUNNING
to kill all tasks in the container :
# echo 9 > /containers/0/signal.kill
I've taken Cedric's patches, forward-ported them to 2.6.26-rc5-mm2 + Rafael's
NOSIG patches.
Paul, Pavel asked me to send these to Rafael next. They are patches to make
the freezer useful for checkpoint/restart using cgroups so it would be nice
to get an explicit [N]Ack from you first.
Rafael, if Paul agrees, please consider applying these patches.
Changes since v2:
v3:
Ported to 2.6.26-rc5-mm2 with Rafael's freezer patches
Tested on 24 combinations of 3 architectures (x86, x86_64, ppc64)
with 8 different kernel configs varying power management
and cgroup config variables. Each patch builds and boots
in these 24 combinations.
Passes functional testing.
v2 (roughly patches 3 and 5):
Moved the "kill" file into a separate cgroup subsystem (signal) and
it's own patch.
Changed the name of the file from freezer.freeze to freezer.state.
Switched from taking 1 and 0 as input to the strings "FROZEN" and
"RUNNING", respectively. This helps keep the interface
human-usable if/when we need to more states.
Checked that stopped or interrupted is "frozen enough"
Since try_to_freeze() is called upon wakeup of these tasks
this should be fine. This idea comes from recent changes to
the freezer.
Checked that if (task == current) whilst freezing cgroup we're ok
Fixed bug where -EBUSY would always be returned when freezing
Added code to handle userspace retries for any remaining -EBUSY
Cheers,
-Matt Helsley
--
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 0/4] Container Freezer: Reuse Suspend Freezer
@ 2008-07-07 22:58 Matt Helsley
2008-07-07 23:02 ` Matt Helsley
2008-07-08 3:31 ` KAMEZAWA Hiroyuki
0 siblings, 2 replies; 11+ messages in thread
From: Matt Helsley @ 2008-07-07 22:58 UTC (permalink / raw)
To: Rafael J. Wysocki
Cc: Paul Menage, Pavel Machek, Linux-Kernel, linux-pm,
Linux Containers
This patchset reuses the container infrastructure and the swsusp freezer to
freeze a group of tasks.
The freezer subsystem in the container filesystem defines a file named
freezer.state. Writing "FROZEN" to the state file will freeze all tasks in the
cgroup. Subsequently writing "RUNNING" will unfreeze the tasks in the cgroup.
Reading will return the current state.
* Examples of usage :
# mkdir /containers/freezer
# mount -t cgroup -ofreezer,signal freezer /containers
# mkdir /containers/0
# echo $some_pid > /containers/0/tasks
to get status of the freezer subsystem :
# cat /containers/0/freezer.state
RUNNING
to freeze all tasks in the container :
# echo FROZEN > /containers/0/freezer.state
# cat /containers/0/freezer.state
FREEZING
# cat /containers/0/freezer.state
FROZEN
to unfreeze all tasks in the container :
# echo RUNNING > /containers/0/freezer.state
# cat /containers/0/freezer.state
RUNNING
to kill all tasks in the container :
# echo 9 > /containers/0/signal.kill
I've reworked Cedric's patches to use task_lock() to protect access to the
task's cgroup.
Paul, Pavel asked me to send these to Rafael next. They are patches to make
the freezer useful for checkpoint/restart using cgroups so it would be nice
to get an explicit [N]Ack from you first.
Rafael, if Paul agrees, please consider applying these patches.
Changes since v3:
v4 (Almost all of these changes are confined to patch 3):
Reworked the series to use task_lock() instead of RCU.
Reworked the series to use write_string() and read_seq_string()
cgroup methods.
Fixed the race Paul Menage identified.
Fixed up check_if_frozen() to do more than just test the FROZEN
flag. In some cases tasks could be stopped (T) and marked
FREEZING. When that happens we can safely assume that it
will be frozen immediately upon waking up in the kernel.
Waiting for it to get marked with PF_FROZEN in order to
transition to the FROZEN state would block unnecessarily.
Removed freezer_ prefix from static functions in cgroup_freezer.c.
Simplified STATE_ switch.
Updated the locking comments.
v3:
Ported to 2.6.26-rc5-mm2 with Rafael's freezer patches
Tested on 24 combinations of 3 architectures (x86, x86_64, ppc64)
with 8 different kernel configs varying power management
and cgroup config variables. Each patch builds and boots
in these 24 combinations.
Passes functional testing.
v2 (roughly patches 3 and 5):
Moved the "kill" file into a separate cgroup subsystem (signal) and
it's own patch.
Changed the name of the file from freezer.freeze to freezer.state.
Switched from taking 1 and 0 as input to the strings "FROZEN" and
"RUNNING", respectively. This helps keep the interface
human-usable if/when we need to more states.
Checked that stopped or interrupted is "frozen enough"
Since try_to_freeze() is called upon wakeup of these tasks
this should be fine. This idea comes from recent changes to
the freezer.
Checked that if (task == current) whilst freezing cgroup we're ok
Fixed bug where -EBUSY would always be returned when freezing
Added code to handle userspace retries for any remaining -EBUSY
Cheers,
-Matt Helsley
--
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/4] Container Freezer: Reuse Suspend Freezer
2008-07-07 22:58 [PATCH " Matt Helsley
@ 2008-07-07 23:02 ` Matt Helsley
2008-07-08 3:31 ` KAMEZAWA Hiroyuki
1 sibling, 0 replies; 11+ messages in thread
From: Matt Helsley @ 2008-07-07 23:02 UTC (permalink / raw)
To: Rafael J. Wysocki
Cc: Paul Menage, Pavel Machek, Linux-Kernel, linux-pm,
Linux Containers
On Mon, 2008-07-07 at 15:58 -0700, Matt Helsley wrote:
> This patchset reuses the container infrastructure and the swsusp freezer to
> freeze a group of tasks.
>
> The freezer subsystem in the container filesystem defines a file named
> freezer.state. Writing "FROZEN" to the state file will freeze all tasks in the
> cgroup. Subsequently writing "RUNNING" will unfreeze the tasks in the cgroup.
> Reading will return the current state.
>
> * Examples of usage :
>
> # mkdir /containers/freezer
> # mount -t cgroup -ofreezer,signal freezer /containers
> # mkdir /containers/0
> # echo $some_pid > /containers/0/tasks
>
> to get status of the freezer subsystem :
>
> # cat /containers/0/freezer.state
> RUNNING
>
> to freeze all tasks in the container :
>
> # echo FROZEN > /containers/0/freezer.state
> # cat /containers/0/freezer.state
> FREEZING
> # cat /containers/0/freezer.state
> FROZEN
>
> to unfreeze all tasks in the container :
>
> # echo RUNNING > /containers/0/freezer.state
> # cat /containers/0/freezer.state
> RUNNING
>
> to kill all tasks in the container :
>
> # echo 9 > /containers/0/signal.kill
>
> I've reworked Cedric's patches to use task_lock() to protect access to the
> task's cgroup.
>
> Paul, Pavel asked me to send these to Rafael next. They are patches to make
> the freezer useful for checkpoint/restart using cgroups so it would be nice
> to get an explicit [N]Ack from you first.
>
> Rafael, if Paul agrees, please consider applying these patches.
>
> Changes since v3:
> v4 (Almost all of these changes are confined to patch 3):
> Reworked the series to use task_lock() instead of RCU.
> Reworked the series to use write_string() and read_seq_string()
> cgroup methods.
FYI - This means these patches need Paul's patches introducing
write_string(). I can certainly restore the old code for .read
and .write, but I was anticipating write_string() making it into various
trees first. If that's not necessarily the case please let me know.
Cheers,
-Matt
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/4] Container Freezer: Reuse Suspend Freezer
2008-07-07 22:58 [PATCH " Matt Helsley
2008-07-07 23:02 ` Matt Helsley
@ 2008-07-08 3:31 ` KAMEZAWA Hiroyuki
2008-07-08 19:39 ` Matt Helsley
1 sibling, 1 reply; 11+ messages in thread
From: KAMEZAWA Hiroyuki @ 2008-07-08 3:31 UTC (permalink / raw)
To: Matt Helsley
Cc: Rafael J. Wysocki, Linux Containers, Paul Menage, Linux-Kernel,
Pavel Machek, linux-pm
Hi, could I make brief questions ?
On Mon, 07 Jul 2008 15:58:23 -0700
Matt Helsley <matthltc@us.ibm.com> wrote:
> to get status of the freezer subsystem :
>
> # cat /containers/0/freezer.state
> RUNNING
>
> to freeze all tasks in the container :
>
> # echo FROZEN > /containers/0/freezer.state
> # cat /containers/0/freezer.state
> FREEZING
> # cat /containers/0/freezer.state
> FROZEN
>
I'm just curious.
1. When we see FREEZING and have to retry ?
While there are some threads which wait for some event ?
2. What happens when FROZEN threads are moved to other group ?
Can we move them ?
Can we wake them up (if it can be moved) ?
What operations are allowed to frozen threads ?
Thanks,
-Kame
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/4] Container Freezer: Reuse Suspend Freezer
2008-07-08 3:31 ` KAMEZAWA Hiroyuki
@ 2008-07-08 19:39 ` Matt Helsley
2008-07-08 20:06 ` Paul Menage
0 siblings, 1 reply; 11+ messages in thread
From: Matt Helsley @ 2008-07-08 19:39 UTC (permalink / raw)
To: KAMEZAWA Hiroyuki
Cc: Rafael J. Wysocki, Cedric Le Goater, Linux Containers,
Paul Menage, Linux-Kernel, Pavel Machek, linux-pm
Cedric was accidentally not Cc'd on the introduction (PATCH 0). Adding
him.
On Tue, 2008-07-08 at 12:31 +0900, KAMEZAWA Hiroyuki wrote:
> Hi, could I make brief questions ?
>
> On Mon, 07 Jul 2008 15:58:23 -0700
> Matt Helsley <matthltc@us.ibm.com> wrote:
> > to get status of the freezer subsystem :
> >
> > # cat /containers/0/freezer.state
> > RUNNING
> >
> > to freeze all tasks in the container :
> >
> > # echo FROZEN > /containers/0/freezer.state
> > # cat /containers/0/freezer.state
> > FREEZING
> > # cat /containers/0/freezer.state
> > FROZEN
> >
> I'm just curious.
>
> 1. When we see FREEZING and have to retry ?
One example is when some processes are in the a specific portion of
vfork() you might see FREEZING and have to retry.
> While there are some threads which wait for some event ?
Depending on which kind of "wait" they are performing, yes. If it's
uninterruptible sleep and the PF_FROZEN flag is not set then you might
see FREEZING.
> 2. What happens when FROZEN threads are moved to other group ?
> Can we move them ?
If the destination cgroup is not FROZEN, yes.
If the destination cgroup is FREEZING this works as expected.
If the destination cgroup is RUNNING you'd have a problem unfreezing the
task. This happends because the cgroup has a state inconsistent with the
task's state. To unfreeze the task you'd have to try to freeze and then
unfreeze the destination cgroup.
There are several ways I could change this.
One is to try and disallow users from moving frozen tasks. That doesn't
seem like a good approach since it would require a new cgroups interface
"can_detach()".
However we can prevent attach so I could add checks that look at the
attaching tasks's state and refuse the attach when the task's state
(unfrozen, frozen) is inconsistent with the cgroup state (RUNNING,
FREEZING, FROZEN). I'll send a fifth patch on top of this series showing
this idea.
Rather than refuse to allow attach we could change the destination
cgroup's state during attach so that the two states are consistent.
However, this introduces more ugly cases for userspace to be aware of.
> Can we wake them up (if it can be moved) ?
You can't wake them until you've unfrozen them.
> What operations are allowed to frozen threads ?
Any operation that doesn't require the threads to run.
Cheers,
-Matt Helsley
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/4] Container Freezer: Reuse Suspend Freezer
2008-07-08 19:39 ` Matt Helsley
@ 2008-07-08 20:06 ` Paul Menage
2008-07-08 20:07 ` Paul Menage
0 siblings, 1 reply; 11+ messages in thread
From: Paul Menage @ 2008-07-08 20:06 UTC (permalink / raw)
To: Matt Helsley
Cc: KAMEZAWA Hiroyuki, Rafael J. Wysocki, Cedric Le Goater,
Linux Containers, Linux-Kernel, Pavel Machek, linux-pm
On Tue, Jul 8, 2008 at 12:39 PM, Matt Helsley <matthltc@us.ibm.com> wrote:
>
> One is to try and disallow users from moving frozen tasks. That doesn't
> seem like a good approach since it would require a new cgroups interface
> "can_detach()".
Detaching from the old cgroup happens at the same time as attaching to
the new cgroup, so can_attach() would work here.
Paul
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/4] Container Freezer: Reuse Suspend Freezer
2008-07-08 20:06 ` Paul Menage
@ 2008-07-08 20:07 ` Paul Menage
2008-07-09 21:58 ` Matt Helsley
0 siblings, 1 reply; 11+ messages in thread
From: Paul Menage @ 2008-07-08 20:07 UTC (permalink / raw)
To: Matt Helsley
Cc: KAMEZAWA Hiroyuki, Rafael J. Wysocki, Cedric Le Goater,
Linux Containers, Linux-Kernel, Pavel Machek, linux-pm
On Tue, Jul 8, 2008 at 1:06 PM, Paul Menage <menage@google.com> wrote:
> On Tue, Jul 8, 2008 at 12:39 PM, Matt Helsley <matthltc@us.ibm.com> wrote:
>>
>> One is to try and disallow users from moving frozen tasks. That doesn't
>> seem like a good approach since it would require a new cgroups interface
>> "can_detach()".
>
> Detaching from the old cgroup happens at the same time as attaching to
> the new cgroup, so can_attach() would work here.
And the whole can_attach()/attach() protocol needs reworking anyway,
see my email (hopefully) later today.
Paul
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/4] Container Freezer: Reuse Suspend Freezer
2008-07-08 20:07 ` Paul Menage
@ 2008-07-09 21:58 ` Matt Helsley
2008-07-10 0:42 ` KAMEZAWA Hiroyuki
0 siblings, 1 reply; 11+ messages in thread
From: Matt Helsley @ 2008-07-09 21:58 UTC (permalink / raw)
To: Paul Menage
Cc: KAMEZAWA Hiroyuki, Rafael J. Wysocki, Cedric Le Goater,
Linux Containers, Linux-Kernel, Pavel Machek, linux-pm
On Tue, 2008-07-08 at 13:07 -0700, Paul Menage wrote:
> On Tue, Jul 8, 2008 at 1:06 PM, Paul Menage <menage@google.com> wrote:
> > On Tue, Jul 8, 2008 at 12:39 PM, Matt Helsley <matthltc@us.ibm.com> wrote:
> >>
> >> One is to try and disallow users from moving frozen tasks. That doesn't
> >> seem like a good approach since it would require a new cgroups interface
> >> "can_detach()".
> >
> > Detaching from the old cgroup happens at the same time as attaching to
> > the new cgroup, so can_attach() would work here.
Update: I've made a patch implementing this. However it might be better
to just modify attach() to thaw the moving task rather than disallow
moving the frozen task. Serge, Cedric, Kame-san, do you have any
thoughts on which is more useful and/or intuitive?
> And the whole can_attach()/attach() protocol needs reworking anyway,
> see my email (hopefully) later today.
>
> Paul
Interesting. I look forward to seeing this.
Cheers,
-Matt
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/4] Container Freezer: Reuse Suspend Freezer
2008-07-09 21:58 ` Matt Helsley
@ 2008-07-10 0:42 ` KAMEZAWA Hiroyuki
2008-07-10 14:40 ` Serge E. Hallyn
0 siblings, 1 reply; 11+ messages in thread
From: KAMEZAWA Hiroyuki @ 2008-07-10 0:42 UTC (permalink / raw)
To: Matt Helsley
Cc: Paul Menage, Rafael J. Wysocki, Cedric Le Goater,
Linux Containers, Linux-Kernel, Pavel Machek, linux-pm
On Wed, 09 Jul 2008 14:58:43 -0700
Matt Helsley <matthltc@us.ibm.com> wrote:
>
> On Tue, 2008-07-08 at 13:07 -0700, Paul Menage wrote:
> > On Tue, Jul 8, 2008 at 1:06 PM, Paul Menage <menage@google.com> wrote:
> > > On Tue, Jul 8, 2008 at 12:39 PM, Matt Helsley <matthltc@us.ibm.com> wrote:
> > >>
> > >> One is to try and disallow users from moving frozen tasks. That doesn't
> > >> seem like a good approach since it would require a new cgroups interface
> > >> "can_detach()".
> > >
> > > Detaching from the old cgroup happens at the same time as attaching to
> > > the new cgroup, so can_attach() would work here.
>
> Update: I've made a patch implementing this. However it might be better
> to just modify attach() to thaw the moving task rather than disallow
> moving the frozen task. Serge, Cedric, Kame-san, do you have any
> thoughts on which is more useful and/or intuitive?
>
Thank you for explanation in previous mail.
Hmm, just thawing seems atractive but it will confuse people (I think).
I think some kind of process-group is freezed by this freezer and "moving
freezed task" is wrong(unexpected) operation in general. And there will
be no demand to do that from users.
I think just taking "moving freezed task" as error-operation and returning
-EBUSY is better.
Thanks,
-Kame
> > And the whole can_attach()/attach() protocol needs reworking anyway,
> > see my email (hopefully) later today.
> >
> > Paul
>
> Interesting. I look forward to seeing this.
>
> Cheers,
> -Matt
>
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/4] Container Freezer: Reuse Suspend Freezer
2008-07-10 0:42 ` KAMEZAWA Hiroyuki
@ 2008-07-10 14:40 ` Serge E. Hallyn
0 siblings, 0 replies; 11+ messages in thread
From: Serge E. Hallyn @ 2008-07-10 14:40 UTC (permalink / raw)
To: KAMEZAWA Hiroyuki
Cc: Matt Helsley, Linux Containers, Linux-Kernel, Rafael J. Wysocki,
Cedric Le Goater, Pavel Machek, Paul Menage, linux-pm
Quoting KAMEZAWA Hiroyuki (kamezawa.hiroyu@jp.fujitsu.com):
> On Wed, 09 Jul 2008 14:58:43 -0700
> Matt Helsley <matthltc@us.ibm.com> wrote:
>
> >
> > On Tue, 2008-07-08 at 13:07 -0700, Paul Menage wrote:
> > > On Tue, Jul 8, 2008 at 1:06 PM, Paul Menage <menage@google.com> wrote:
> > > > On Tue, Jul 8, 2008 at 12:39 PM, Matt Helsley <matthltc@us.ibm.com> wrote:
> > > >>
> > > >> One is to try and disallow users from moving frozen tasks. That doesn't
> > > >> seem like a good approach since it would require a new cgroups interface
> > > >> "can_detach()".
> > > >
> > > > Detaching from the old cgroup happens at the same time as attaching to
> > > > the new cgroup, so can_attach() would work here.
> >
> > Update: I've made a patch implementing this. However it might be better
> > to just modify attach() to thaw the moving task rather than disallow
> > moving the frozen task. Serge, Cedric, Kame-san, do you have any
> > thoughts on which is more useful and/or intuitive?
> >
>
> Thank you for explanation in previous mail.
>
> Hmm, just thawing seems atractive but it will confuse people (I think).
>
> I think some kind of process-group is freezed by this freezer and "moving
> freezed task" is wrong(unexpected) operation in general. And there will
> be no demand to do that from users.
> I think just taking "moving freezed task" as error-operation and returning
> -EBUSY is better.
>
> Thanks,
> -Kame
I'm torn. Allowing the moves is kind of cool, but I think I agree that
we should start out with the simpler semantics, which in this case is
disallowing the move. The race Li may have found will only become more
complicated when both sides of the race can change the task's frozen
state.
-serge
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2008-07-10 15:44 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20080403001529.052250759@us.ibm.com>
2008-04-03 0:19 ` [PATCH 0/4] Container Freezer: Reuse Suspend Freezer Matt Helsley
2008-06-24 13:58 [patch " Matt Helsley
-- strict thread matches above, loose matches on Subject: below --
2008-07-07 22:58 [PATCH " Matt Helsley
2008-07-07 23:02 ` Matt Helsley
2008-07-08 3:31 ` KAMEZAWA Hiroyuki
2008-07-08 19:39 ` Matt Helsley
2008-07-08 20:06 ` Paul Menage
2008-07-08 20:07 ` Paul Menage
2008-07-09 21:58 ` Matt Helsley
2008-07-10 0:42 ` KAMEZAWA Hiroyuki
2008-07-10 14:40 ` Serge E. Hallyn
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox