Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp2835788pxv; Mon, 12 Jul 2021 03:08:08 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxeI7A7Gj3FQ5vYRkFck9S1OS27gIa1VXVUaKc8/i0YPQABEaxM4oLG1KXTiS42W6ehXT/k X-Received: by 2002:a92:6809:: with SMTP id d9mr5400983ilc.107.1626084388718; Mon, 12 Jul 2021 03:06:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626084388; cv=none; d=google.com; s=arc-20160816; b=K2RQhzrUY6j5m9lwwoAo8bo8Do3+P9V899bIoiir0Q+xqCAl2sUm1Ey8g1rN4ueeij KvJmlzgg23Y+RcV/gGBrhuMEusvOAIOlEMD+ExP+vkojoj64RV0u7t+N1q7Kkq9xV2oa PHhVHUEy2kU2Zq2qUjEwlQ0iyh6NYj5gBwh7a3SP2BlNibqkV6mJRlJB/u3YqSHwsgZW 5hdponUMtlhdSxhUAO7tGXsNKPNe+ic5nkJ0a6w//YLWMCuAYPZM+cSVjJM+Dr9+rvcW 4SWAVZ6uf9PPhmc9MVDNCLdR1ZlDHqDitX497QBza0vQ4HzEG+g68OzVJeMSdhkyMwnY 4PUw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=0Sh8ZL5blQWi50WZZVINZxok7am6otWb6SMDdGedGdI=; b=IioQDc990GYwV7EP706ZDe2OFvDYYusYbep/Wt0zkV/k1x4G/D83dS9FY9nZtoA7S+ pbstCMTjIlVjZtNfib/s0ay5dCxYuhgLyzcSp5Qjbt6a2CgRxlpl5SdUVQ2eol9sGKPq /Tiu5J6eulEt0kWEsPEJkg8Ds6/qCZpFnAOabChg8cdZQFRoPcwEUz8QXmLnNukaASYe 7ZaYJOqVaUOztDAYy2m46qxVveAwPYP8OBTUzxx34Zj6HpjdP05DBn8QLbU4lsikdHix TtGrsslJ2PmC778Izh4H52g5+YYihw++sX7G5rZk/v+x2MKmuXqGeZ922mezvQFq5Bla bHpQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=eB0rS2He; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f10si5241377ila.58.2021.07.12.03.06.17; Mon, 12 Jul 2021 03:06:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=eB0rS2He; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345705AbhGLHio (ORCPT + 99 others); Mon, 12 Jul 2021 03:38:44 -0400 Received: from mail.kernel.org ([198.145.29.99]:42086 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244159AbhGLHK2 (ORCPT ); Mon, 12 Jul 2021 03:10:28 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 591DB613CA; Mon, 12 Jul 2021 07:06:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626073602; bh=euOi7siJ/ayk1/8dY5MN8MN8sdkfhzc8bSkdEUPYp+k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eB0rS2HejCaOAOJx/q76U/j5mroP0fHAiG6lhahqs5Df2WksKjmAqOIcvM82nuTJJ X517toxX3IFQ5D/YbfgXrpGI+5FiJQpFQtemPVzFQeF651ADMyzWhKfhewDRfJuWqO B0xEVsclDel5He+Y9v0wYa/dFceT6LEDZOlkYWcE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Qais Yousef , "Peter Zijlstra (Intel)" , Sasha Levin Subject: [PATCH 5.12 260/700] sched/uclamp: Fix wrong implementation of cpu.uclamp.min Date: Mon, 12 Jul 2021 08:05:43 +0200 Message-Id: <20210712061003.805408556@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210712060924.797321836@linuxfoundation.org> References: <20210712060924.797321836@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Qais Yousef [ Upstream commit 0c18f2ecfcc274a4bcc1d122f79ebd4001c3b445 ] cpu.uclamp.min is a protection as described in cgroup-v2 Resource Distribution Model Documentation/admin-guide/cgroup-v2.rst which means we try our best to preserve the minimum performance point of tasks in this group. See full description of cpu.uclamp.min in the cgroup-v2.rst. But the current implementation makes it a limit, which is not what was intended. For example: tg->cpu.uclamp.min = 20% p0->uclamp[UCLAMP_MIN] = 0 p1->uclamp[UCLAMP_MIN] = 50% Previous Behavior (limit): p0->effective_uclamp = 0 p1->effective_uclamp = 20% New Behavior (Protection): p0->effective_uclamp = 20% p1->effective_uclamp = 50% Which is inline with how protections should work. With this change the cgroup and per-task behaviors are the same, as expected. Additionally, we remove the confusing relationship between cgroup and !user_defined flag. We don't want for example RT tasks that are boosted by default to max to change their boost value when they attach to a cgroup. If a cgroup wants to limit the max performance point of tasks attached to it, then cpu.uclamp.max must be set accordingly. Or if they want to set different boost value based on cgroup, then sysctl_sched_util_clamp_min_rt_default must be used to NOT boost to max and set the right cpu.uclamp.min for each group to let the RT tasks obtain the desired boost value when attached to that group. As it stands the dependency on !user_defined flag adds an extra layer of complexity that is not required now cpu.uclamp.min behaves properly as a protection. The propagation model of effective cpu.uclamp.min in child cgroups as implemented by cpu_util_update_eff() is still correct. The parent protection sets an upper limit of what the child cgroups will effectively get. Fixes: 3eac870a3247 (sched/uclamp: Use TG's clamps to restrict TASK's clamps) Signed-off-by: Qais Yousef Signed-off-by: Peter Zijlstra (Intel) Link: https://lkml.kernel.org/r/20210510145032.1934078-2-qais.yousef@arm.com Signed-off-by: Sasha Levin --- kernel/sched/core.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 17f612045271..3fe7daf9d31d 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -1057,7 +1057,6 @@ uclamp_tg_restrict(struct task_struct *p, enum uclamp_id clamp_id) { struct uclamp_se uc_req = p->uclamp_req[clamp_id]; #ifdef CONFIG_UCLAMP_TASK_GROUP - struct uclamp_se uc_max; /* * Tasks in autogroups or root task group will be @@ -1068,9 +1067,23 @@ uclamp_tg_restrict(struct task_struct *p, enum uclamp_id clamp_id) if (task_group(p) == &root_task_group) return uc_req; - uc_max = task_group(p)->uclamp[clamp_id]; - if (uc_req.value > uc_max.value || !uc_req.user_defined) - return uc_max; + switch (clamp_id) { + case UCLAMP_MIN: { + struct uclamp_se uc_min = task_group(p)->uclamp[clamp_id]; + if (uc_req.value < uc_min.value) + return uc_min; + break; + } + case UCLAMP_MAX: { + struct uclamp_se uc_max = task_group(p)->uclamp[clamp_id]; + if (uc_req.value > uc_max.value) + return uc_max; + break; + } + default: + WARN_ON_ONCE(1); + break; + } #endif return uc_req; -- 2.30.2