Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp1932711pxj; Sat, 5 Jun 2021 07:23:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyCJpRdi2qADoE8jTsQdhN1I/HlFzUOSXKj+3hE4p63Wm5inEw4RD0Ychjb2TZc5fkqSxsM X-Received: by 2002:a17:906:17cb:: with SMTP id u11mr9590673eje.231.1622902996576; Sat, 05 Jun 2021 07:23:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622902996; cv=none; d=google.com; s=arc-20160816; b=LIepjl1pMY6cl0sEF2RvNioYHYCddgFtwMsJ/vjsjhVu//Fh7F1UUN+XS369uHpwRx aubFes5uTfJsse5HWNJktQ/abs8GMhw5R70o78Z8+6Digje80h0WJNUb9i+b6fN/A6mz 1p4x1ZSyfT7qorZobaB4clmm5SwNl2F3MWkCnFnhIFePG0CKXY7htNDdvLfzDw20VKhF Z5VrOLVwusxeDYQVdDiCUj9yIS339AoxFmV5b/5SV2DtLpYSP+84/++qcDP+i7cRo974 AkUUYj6IGphMONn/plG+bTcSUOldOsk97lrkjgCjhJrvcvIBvBd58a9v3bIzFTeDboOM LV+Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=qmvpWMmzKlnVR+fAM3hKoIiyosBvv946w2U+fqpnXOU=; b=GvtAWhJYT0cegZA+gsfAWIOxTbzEqG9VdOzDrX+UwEec6CNAzr7D2PxgW4Q9eq9IFy UqYGui6DFFQiPp+ErfjILRr+aILwKByHUmy6paY80nMFkzoTlsnbxJEiQXCi6p0RrdGa ydhuZMixSPU6jkgzwrdytPZHBeVM8e5/pab2C0tCAAMhsLiGkIr2/uSVeih3ZRtVI9A8 OJqR325p6nJmomLGIILxjs83oEv74KiNEi7xrdHJWQsVjbE7yBNqbdsZ5naF+Yh4MC1c ARq5sKPOlYhBVuN2naRvlBBZwDCIin+OvGfTFcPPA/0/SxTLZOUsVyYxaT/4pcm3+lxX lQrA== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id gq9si7249179ejb.720.2021.06.05.07.22.22; Sat, 05 Jun 2021 07:23:16 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229996AbhFEOP4 (ORCPT + 99 others); Sat, 5 Jun 2021 10:15:56 -0400 Received: from foss.arm.com ([217.140.110.172]:33512 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229930AbhFEOPz (ORCPT ); Sat, 5 Jun 2021 10:15:55 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 4B02B12FC; Sat, 5 Jun 2021 07:14:07 -0700 (PDT) Received: from e107158-lin.cambridge.arm.com (e107158-lin.cambridge.arm.com [10.1.195.57]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 4A2843F73D; Sat, 5 Jun 2021 07:14:05 -0700 (PDT) Date: Sat, 5 Jun 2021 15:14:03 +0100 From: Qais Yousef To: Xuewen Yan Cc: Quentin Perret , Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Benjamin Segall , Mel Gorman , Daniel Bristot de Oliveira , linux-kernel , Chunyan Zhang , Ryan Y , Patrick Bellasi , tj@kernel.org Subject: Re: [PATCH] sched/uclamp: Avoid setting cpu.uclamp.min bigger than cpu.uclamp.max Message-ID: <20210605141403.xlizhezj556ywvg4@e107158-lin.cambridge.arm.com> References: <20210602123803.15738-1-xuewen.yan94@gmail.com> <20210604160839.2op4ak75vle3gmt3@e107158-lin.cambridge.arm.com> <20210605114908.mqfsip5pskamls6k@e107158-lin.cambridge.arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 06/05/21 21:24, Xuewen Yan wrote: > Hi Qais > > On Sat, Jun 5, 2021 at 7:49 PM Qais Yousef wrote: > > > > > > > In addition,In your patch: > > > 6938840392c89 ("sched/uclamp: Fix wrong implementation of cpu.uclamp.min") > > > https://lkml.kernel.org/r/20210510145032.1934078-2-qais.yousef@arm.com > > > > > > + 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; > > > > > > When the clamp_id = UCLAMP_MIN, why not judge the uc_req.value is > > > bigger than task_group(p)->uclamp[UCLAMP_MAX] ? > > > > Because of the requirement I pointed you to in cgroup-v2.rst. We must allow any > > value to be requested. > > > > Ultimately if we had > > > > cpu.uclamp.min = 80 > > cpu.uclamp.max = 50 > > > > then we want to remember the original request but make sure the effective value > > is capped. > > > > For the user in the future modifies the values such that > > > > cpu.uclamp.max = max > > > > Then we want to remember cpu.uclamp.min = 80 and apply it since now the > > cpu.uclamp.max was relaxed to allow the boost value. > > > > > Because when the p->uclamp_req[UCLAMP_MIN] > task_group(p)->uclamp[UCLAMP_MAX], > > > the patch can not clamp the p->uclamp_req[UCLAMP_MIN/MAX] into > > > [ task_group(p)->uclamp[UCLAMP_MAX], task_group(p)->uclamp[UCLAMP_MAX] ]. > > > > > > Is it necessary to fix it here? > > > > Nope. We must allow any combination values to be accepted and remember them so > > if one changes we ensure the new effective value is updated accordingly. > > This is how cgroups API works. > > Sorry. I may not have expressed it clearly. In your patch (which has > not yet merged into the mainline): > > 6938840392c89 ("sched/uclamp: Fix wrong implementation of cpu.uclamp.min") > https://lkml.kernel.org/r/20210510145032.1934078-2-qais.yousef@arm.com > > This patch will not affect p->uclamp_req, but consider the following situation: > > tg->cpu.uclamp.min = 0 > tg->cpu.uclamp.max = 50% > > p->uclamp_req[UCLAMP_MIN] = 60% > p->uclamp_req[UCLAMP_MIN] = 80% > > The function call process is as follows: > uclamp_eff_value() -> uclamp_eff_get() ->uclamp_tg_restrict() > > with your patch, the result is: > > p->effective_uclamp_min = 60% > p->effective_uclamp_max = 50% Are you saying my patch introduced a regression? If there's a bug I would not expect my patch to have had an impact in this area. uclamp_tg_restrict() uses taskgroup(p)->uclamp[] which is the effective uclamp that is capped in cpu_util_update_eff(). Are you statically analyzing the code or this is the outcome of an experiment you ran on hardware? Cheers -- Qais Yousef > > It would not affect the uclamp_task_util(p), but affect the rq: > when p enqueued: > rq->uclamp[UCLAMP_MIN] = 60% > rq->uclamp[UCLAMP_MIN] = 50% > > futher more, in uclamp_rq_util_with() { > ... > > min_util = READ_ONCE(rq->uclamp[UCLAMP_MIN].value); //60% > max_util = READ_ONCE(rq->uclamp[UCLAMP_MAX].value);//50% > ... > if (unlikely(min_util >= max_util)) > return min_util; > > return clamp(util, min_util, max_util); > ... > } > as a result, it would return 60%. > > Thanks! > xuewen