Re: [PATCH] sched/fair: limit burst to zero when cfs bandwidth is toggled off

From: zhaowenhui (A)
Date: Wed Nov 23 2022 - 03:52:48 EST




在 2022/9/30 16:32, zhaowenhui (A) 写道:


在 2022/8/30 11:19, 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@xxxxxxxxxx>
Signed-off-by: Zhao Wenhui <zhaowenhui8@xxxxxxxxxx>
---
  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

Dear Maintainers,
Hi, this patch has been reviewed by two reviewers over a month ago.
So, Any more suggestions for this patch or it can be picked?

Regards,
Zhao Wenhui

Peter,
Sorry to disturbed, for this patch is submitted long long time ago...
And this is my first patch, so I really wonder if there is something
to be improved for the patch.

Looking forward to your reply.

Thank you,
Zhao Wenhui