[lkml]   [2008]   [Aug]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Subject[PATCH 0/6] Container Freezer: Reuse Suspend Freezer
    This patch series introduces a cgroup subsystem that utilizes the swsusp
    freezer to freeze a group of tasks. It's immediately useful for batch job
    management scripts. It should also be useful in the future for implementing
    container checkpoint/restart.

    The freezer subsystem in the container filesystem defines a cgroup file named
    freezer.state. Reading freezer.state will return the current state of the
    cgroup. Writing "FROZEN" to the state file will freeze all tasks in the
    cgroup. Subsequently writing "RUNNING" will unfreeze the tasks in the cgroup.

    * Examples of usage :

    # mkdir /containers/freezer
    # mount -t cgroup -ofreezer freezer /containers
    # mkdir /containers/0
    # echo $some_pid > /containers/0/tasks

    to get status of the freezer subsystem :

    # cat /containers/0/freezer.state

    to freeze all tasks in the container :

    # echo FROZEN > /containers/0/freezer.state
    # cat /containers/0/freezer.state
    # cat /containers/0/freezer.state

    to unfreeze all tasks in the container :

    # echo RUNNING > /containers/0/freezer.state
    # cat /containers/0/freezer.state

    Andrew, since I hear Rafael doesn't have time to review these (again) at this
    time, please consider these patches for -mm.

    -Matt Helsley

    Changes since v4:
    Split out write_string as a separate patch for easier merging
    with trees lacking certain cgroup patches at the time.
    Checked use of task alloc lock for races with swsusp freeze/thaw --
    looks safe because there are explicit barriers to handle
    freeze/thaw races for individual tasks, we explicitly
    handle partial group freezing, and partial group thawing
    should be resolved without changing swsusp's loop.
    Updated the patches to Linus' git tree as of approximately
    Added Pavel and Serge's Acked-by lines to Acked patches

    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.

    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


     \ /
      Last update: 2008-08-01 07:13    [W:0.033 / U:7.252 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site