Messages in this thread | | | Date | Wed, 10 Mar 2021 13:39:49 +0100 | From | Peter Zijlstra <> | Subject | Re: [PATCH v3 1/4] sched/fair: Introduce primitives for CFS bandwidth burst |
| |
On Thu, Jan 21, 2021 at 07:04:50PM +0800, Huaixin Chang wrote: > In this patch, we introduce the notion of CFS bandwidth burst. Unused > "quota" from pervious "periods" might be accumulated and used in the > following "periods". The maximum amount of accumulated bandwidth is > bounded by "burst". And the maximun amount of CPU a group can consume in > a given period is "buffer" which is equivalent to "quota" + "burst in > case that this group has done enough accumulation. > > Signed-off-by: Huaixin Chang <changhuaixin@linux.alibaba.com> > Signed-off-by: Shanpei Chen <shanpeic@linux.alibaba.com>
Not a valid SoB chain.
> --- > kernel/sched/core.c | 91 ++++++++++++++++++++++++++++++++++++++++++++-------- > kernel/sched/fair.c | 2 ++ > kernel/sched/sched.h | 2 ++ > 3 files changed, 82 insertions(+), 13 deletions(-) > > diff --git a/kernel/sched/core.c b/kernel/sched/core.c > index e7e453492cff..48d3bad12be2 100644 > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -7895,10 +7895,12 @@ static const u64 max_cfs_runtime = MAX_BW * NSEC_PER_USEC; > > static int __cfs_schedulable(struct task_group *tg, u64 period, u64 runtime); > > -static int tg_set_cfs_bandwidth(struct task_group *tg, u64 period, u64 quota) > +static int tg_set_cfs_bandwidth(struct task_group *tg, u64 period, u64 quota, > + u64 burst)
Non standard indentation.
> { > int i, ret = 0, runtime_enabled, runtime_was_enabled; > struct cfs_bandwidth *cfs_b = &tg->cfs_bandwidth; > + u64 buffer; > > if (tg == &root_task_group) > return -EINVAL; > @@ -7925,6 +7927,16 @@ static int tg_set_cfs_bandwidth(struct task_group *tg, u64 period, u64 quota) > if (quota != RUNTIME_INF && quota > max_cfs_runtime) > return -EINVAL; > > + /* > + * Bound burst to defend burst against overflow during bandwidth shift. > + */ > + if (burst > max_cfs_runtime) > + return -EINVAL; > + > + if (quota == RUNTIME_INF) > + buffer = RUNTIME_INF; > + else > + buffer = min(max_cfs_runtime, quota + burst);
Why do we care about buffer when RUNTIME_INF?
| |