lkml.org 
[lkml]   [2011]   [May]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [patch 04/15] sched: validate CFS quota hierarchies
    Description typos + one bug.

    (2011/05/03 18:28), Paul Turner wrote:
    > Add constraints validation for CFS bandwidth hierachies.

    hierarchies

    >
    > Validate that:
    > sum(child bandwidth) <= parent_bandwidth
    >
    > In a quota limited hierarchy, an unconstrainted entity

    unconstrained

    > (e.g. bandwidth==RUNTIME_INF) inherits the bandwidth of its parent.
    >
    > Since bandwidth periods may be non-uniform we normalize to the maximum allowed
    > period, 1 second.
    >
    > This behavior may be disabled (allowing child bandwidth to exceed parent) via
    > kernel.sched_cfs_bandwidth_consistent=0
    >
    > Signed-off-by: Paul Turner <pjt@google.com>
    >
    > ---
    (snip)
    > +/*
    > + * normalize group quota/period to be quota/max_period
    > + * note: units are usecs
    > + */
    > +static u64 normalize_cfs_quota(struct task_group *tg,
    > + struct cfs_schedulable_data *d)
    > +{
    > + u64 quota, period;
    > +
    > + if (tg == d->tg) {
    > + period = d->period;
    > + quota = d->quota;
    > + } else {
    > + period = tg_get_cfs_period(tg);
    > + quota = tg_get_cfs_quota(tg);
    > + }
    > +
    > + if (quota == RUNTIME_INF)
    > + return RUNTIME_INF;
    > +
    > + return to_ratio(period, quota);
    > +}

    Since tg_get_cfs_quota() doesn't return RUNTIME_INF but -1,
    this function needs a fix like following.

    For fixed version, feel free to add:

    Reviewed-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>

    Thanks,
    H.Seto

    ---
    kernel/sched.c | 7 ++++---
    1 files changed, 4 insertions(+), 3 deletions(-)
    diff --git a/kernel/sched.c b/kernel/sched.c
    index d2562aa..f171ba5 100644
    --- a/kernel/sched.c
    +++ b/kernel/sched.c
    @@ -9465,16 +9465,17 @@ static u64 normalize_cfs_quota(struct task_group *tg,
    u64 quota, period;

    if (tg == d->tg) {
    + if (d->quota == RUNTIME_INF)
    + return RUNTIME_INF;
    period = d->period;
    quota = d->quota;
    } else {
    + if (tg_cfs_bandwidth(tg)->quota == RUNTIME_INF)
    + return RUNTIME_INF;
    period = tg_get_cfs_period(tg);
    quota = tg_get_cfs_quota(tg);
    }

    - if (quota == RUNTIME_INF)
    - return RUNTIME_INF;
    -
    return to_ratio(period, quota);
    }



    \
     
     \ /
      Last update: 2011-05-10 09:23    [from the cache]
    ©2003-2011 Jasper Spaans