lkml.org 
[lkml]   [2008]   [Jun]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 4/6] res_counter: basic hierarchy support
    On Fri, 13 Jun 2008 18:34:02 +0900 KAMEZAWA Hiroyuki wrote:

    > Add a hierarhy support to res_counter. This patch itself just supports
    > "No Hierarchy" hierarchy, as a default/basic hierarchy system.
    >
    > Changelog: v3 -> v4.
    > - cut out from hardwall hierarchy patch set.
    > - just support "No hierarchy" model.
    >
    > Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    > ---
    > Documentation/controllers/resource_counter.txt | 27 +++++-
    > include/linux/res_counter.h | 15 +++
    > kernel/res_counter.c | 107 ++++++++++++++++++++-----
    > mm/memcontrol.c | 1
    > 4 files changed, 129 insertions(+), 21 deletions(-)
    >
    > Index: linux-2.6.26-rc5-mm3/kernel/res_counter.c
    > ===================================================================
    > --- linux-2.6.26-rc5-mm3.orig/kernel/res_counter.c
    > +++ linux-2.6.26-rc5-mm3/kernel/res_counter.c
    > +
    >
    > +/**
    > + * res_counter_set_ops() -- reset res->counter.ops to be passed ops.
    > + * @coutner: a counter to be set ops.

    typo:
    * @counter:

    > + * @ops: res_counter_ops
    > + *
    > + * This operations is allowed only when there is no parent or parent's
    > + * hierarchy_model == RES_CONT_NO_HIERARCHY. returns 0 at success.
    > + */
    > +
    > +int res_counter_set_ops(struct res_counter *counter,
    > + struct res_counter_ops *ops)
    > +{
    > + struct res_counter *parent;
    > + /*
    > + * This operation is allowed only when parents's hierarchy
    > + * is NO_HIERARCHY or this is ROOT.
    > + */
    > + parent = counter->parent;
    > + if (parent && parent->ops.hierarchy_model != RES_CONT_NO_HIERARCHY)
    > + return -EINVAL;
    > +
    > + counter->ops = *ops;
    > +
    > + return 0;
    > +}
    > +
    > +
    > int res_counter_charge_locked(struct res_counter *counter, unsigned long val)
    > {
    > if (counter->usage + val > counter->limit) {

    > Index: linux-2.6.26-rc5-mm3/Documentation/controllers/resource_counter.txt
    > ===================================================================
    > --- linux-2.6.26-rc5-mm3.orig/Documentation/controllers/resource_counter.txt
    > +++ linux-2.6.26-rc5-mm3/Documentation/controllers/resource_counter.txt
    > @@ -39,11 +39,14 @@ to work with it.
    > The failcnt stands for "failures counter". This is the number of
    > resource allocation attempts that failed.
    >
    > - e. res_counter_ops.
    > + e. parent
    > + parent of this res_counter under hierarchy.
    > +
    > + f. res_counter_ops.
    > Callbacks for helping resource_counter per each subsystem.
    > - shrink_usage() .... called at limit change (decrease).
    >
    > - f. spinlock_t lock
    > + g. spinlock_t lock
    >
    > Protects changes of the above values.
    >
    > @@ -157,7 +160,25 @@ counter fields. They are recommended to
    > Returns 0 at success. Any error code is acceptable but -EBUSY will be
    > suitable to show "the kernel can't shrink usage."
    >
    > -6. Usage example
    > +6. Hierarchy
    > +
    > + Groups of res_counter can be controlled under some tree (cgroup tree).
    > + Taking the tree into account, res_counter can be under some hierarchical
    > + control. THe res_counter itself supports hierarchy_model and calls

    The

    > + registered callbacks at suitable events.
    > +
    > + For keeping sanity of hierarchy, hierarchy_model of a res_counter can be
    > + changed when parent's hierarchy_model is RES_CONT_NO_HIERARCHY.
    > + res_counter doesn't count # of children by itself but some subysystem should
    > + be aware that it has no children if necessary.
    > + (don't want to fully duplicate cgroup's hierarchy. Cost of remembering parent
    > + is cheap.)
    > +
    > + a. Independent hierarchy (RES_CONT_NO_HIERARCHY) model
    > + This is no relationship between parent and children.
    > +
    > +
    > +7. Usage example
    >
    > a. Declare a task group (take a look at cgroups subsystem for this) and
    > fold a res_counter into it


    ---
    ~Randy
    Linux Plumbers Conference, 17-19 September 2008, Portland, Oregon USA
    http://linuxplumbersconf.org/


    \
     
     \ /
      Last update: 2008-06-24 00:53    [W:0.034 / U:31.220 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site