Messages in this thread | | | Date | Tue, 30 Aug 2022 11:19:24 +0800 | Subject | Re: [PATCH] sched/fair: limit burst to zero when cfs bandwidth is toggled off | From | "zhaowenhui (A)" <> |
| |
在 2022/8/9 20:03, Zhao Wenhui 写道: > When the quota value in CFS bandwidth is set to -1, that imples the > cfs bandwidth is toggled off. So the burst feature is supposed to > be disable as well. > > Currently, when quota is -1, burst will not be check, so that it can be > set to almost arbitery value. Examples: > mkdir /sys/fs/cgroup/cpu/test > echo -1 > /sys/fs/cgroup/cpu/test/cpu.cfs_quota_us > echo 10000000000000000 > /sys/fs/cgroup/cpu/test/cpu.cfs_burst_us > > Moreover, after the burst modified by this way, quota can't be set > to any value: > echo 100000 > cpu.cfs_quota_us > -bash: echo: write error: Invalid argument > > This patch can ensure the burst value being zero and unalterable, > when quota is set to -1. > > Fixes: f4183717b370 ("sched/fair: Introduce the burstable CFS controller") > Reported-by: Zhao Gongyi <zhaogongyi@huawei.com> > Signed-off-by: Zhao Wenhui <zhaowenhui8@huawei.com> > --- > kernel/sched/core.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/kernel/sched/core.c b/kernel/sched/core.c > index ee28253c9ac0..4c1fc01d8c68 100644 > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -10584,6 +10584,12 @@ static int tg_set_cfs_bandwidth(struct task_group *tg, u64 period, u64 quota, > burst + quota > max_cfs_runtime)) > return -EINVAL; > > + /* > + * Ensure burst equals to zero when quota is -1. > + */ > + if (quota == RUNTIME_INF && burst) > + return -EINVAL; > + > /* > * Prevent race between setting of cfs_rq->runtime_enabled and > * unthrottle_offline_cfs_rqs(). > @@ -10643,8 +10649,10 @@ static int tg_set_cfs_quota(struct task_group *tg, long cfs_quota_us) > > period = ktime_to_ns(tg->cfs_bandwidth.period); > burst = tg->cfs_bandwidth.burst; > - if (cfs_quota_us < 0) > + if (cfs_quota_us < 0) { > quota = RUNTIME_INF; > + burst = 0; > + } > else if ((u64)cfs_quota_us <= U64_MAX / NSEC_PER_USEC) > quota = (u64)cfs_quota_us * NSEC_PER_USEC; > else
Gentle ping.
Thanks, Zhao Wenhui
| |