Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp1331294pxb; Fri, 6 Nov 2020 07:05:03 -0800 (PST) X-Google-Smtp-Source: ABdhPJxtBZ5oDU+WEnGhlPoeNpkNQ4oK4LYzJb9AAcelw0gUEO3wpBFecyC1+WhyXoRgt/YdxbZ0 X-Received: by 2002:a05:6402:30b5:: with SMTP id df21mr2398685edb.146.1604675103726; Fri, 06 Nov 2020 07:05:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604675103; cv=none; d=google.com; s=arc-20160816; b=qtAA+aOOvgFrvX5nFB7+AmiJjYskVyhbrnF7LQBt9plfcwPmuvPgPqv3pNj1MvqVba EBl2LuRBVXGnaisAe89nAGzvVfiAWKYx/Uxxz2IWYK+ltGg63sHk9Pqeeedhywm/8CC3 hdMu0K4e5GG++kxkEHGfUh8nIPtF+6NqLuh9xfjnyQoae3z0O1RUhznpSzHG0P0N93RT 60erWfo/tbizRQwa6NwWaQQBPhGLPVLXTbQj+tWrihlWK6DpuWoNZk4n9qlwn6nDyB1Y 81aUOcB3CgexholbuwKFS/LsPXlLofI0mfzn2LeV54AI0WQLkhsQeoDc5JXWwR+HLWye N2bQ== 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-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=Wb/h3BkhDXtHxQwGiLnU9PYyWzHSeCJp4JZdvPWa4Qs=; b=ROoeBwhJFbQno3B6Yz8VU8GawnREX+NnfdJza+RoWkxgklR/9ahrFjTcE06Cqy3O4E soU0sY7CnuKRR/BTEdE3seW+ni3hgS6iwEpyNICJm/gDvGK0jO71kkT69vjYIkjSNYpn /x8NrLMFkyrMuGXbtAc4JticQqR324e/2LaVUxmkVRb7lVqNpNhmRpFt4lBceqAkTmVw SLF9tFtCDQ6xe7/vMenuv180GnI7CUln+ZC2YsDvkUK5VbKR/lSOrqaSmVGGzvnE5TQu yf1DqITfrAgZVz6RCtuo5W79HQdIhNrRrol7o7I+n6YUEaJiGifv/bYqtBUVO+8oVoel aD/g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@163.com header.s=s110527 header.b=LxoGur1e; 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=163.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id j14si1025143ejx.329.2020.11.06.07.04.37; Fri, 06 Nov 2020 07:05:03 -0800 (PST) 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=@163.com header.s=s110527 header.b=LxoGur1e; 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=163.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727463AbgKFPCx (ORCPT + 99 others); Fri, 6 Nov 2020 10:02:53 -0500 Received: from m12-12.163.com ([220.181.12.12]:49583 "EHLO m12-12.163.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727055AbgKFPCw (ORCPT ); Fri, 6 Nov 2020 10:02:52 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=Date:From:Subject:Message-ID:MIME-Version; bh=Wb/h3 BkhDXtHxQwGiLnU9PYyWzHSeCJp4JZdvPWa4Qs=; b=LxoGur1eK0erFAxYPdPgF a2bWPwEUvdv0GIz1TsEsypKvyDRQHa8p93KCl6EBYQM9hSLFf05HhImfflS+XNp6 9+aVzSLOd8hvOuADT+rD/HtqGHOjKlar5dSqZa91qWkFriCni8U/fcKWEnodPGgu jKGMbw/6U5n7Cm9wYVveRg= Received: from localhost (unknown [110.251.190.92]) by smtp8 (Coremail) with SMTP id DMCowACX8feVZKVfrt9sAA--.18912S2; Fri, 06 Nov 2020 22:58:29 +0800 (CST) Date: Fri, 6 Nov 2020 22:58:35 +0800 From: Tao Zhou To: Xuewen Yan Cc: mingo@redhat.com, peterz@infradead.org, juri.lelli@redhat.com, vincent.guittot@linaro.org, dietmar.eggemann@arm.com, rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de, bristot@redhat.com, linux-kernel@vger.kernel.org, xuewen.yan@unisoc.com, xuewyan@foxmail.com, t1zhou@163.com Subject: Re: [PATCH v3] sched: revise the initial value of the util_avg. Message-ID: <20201106145835.GA25870@geo.homenetwork> References: <1604632923-4243-1-git-send-email-xuewen.yan@unisoc.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1604632923-4243-1-git-send-email-xuewen.yan@unisoc.com> X-CM-TRANSID: DMCowACX8feVZKVfrt9sAA--.18912S2 X-Coremail-Antispam: 1Uf129KBjvJXoWxGrWUJrykAr1xXw48ArWUArb_yoWrWrWkpr 43WFW7Jw4DKw17Way8Zr48uFyUtwn8t34agF18AryfAFyrCryjqrnYqa93Z342vrWUK34x Ar4F9342gFyjgr7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07jfOzxUUUUU= X-Originating-IP: [110.251.190.92] X-CM-SenderInfo: vwr2x0rx6rljoofrz/1tbiXRbUllWBkz9gdQAAsk Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Nov 06, 2020 at 11:22:03AM +0800, Xuewen Yan wrote: > According to the original code logic: > cfs_rq->avg.util_avg > sa->util_avg = -------------------- * se->load.weight > cfs_rq->avg.load_avg > but for fair_sched_class in 64bits platform: > se->load.weight = 1024 * sched_prio_to_weight[prio]; > cfs_rq->avg.util_avg > so the -------------------- must be extremely small, the > cfs_rq->avg.load_avg > judgment condition "sa->util_avg < cap" could be established. > It's not fair for those tasks who has smaller nice value. > > Signed-off-by: Xuewen Yan > --- > changes since V2: > > *kernel/sched/fair.c | 6 +++++- > * 1 file changed, 5 insertions(+), 1 deletion(-) > * > *diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > *index 290f9e3..079760b 100644 > *--- a/kernel/sched/fair.c > *+++ b/kernel/sched/fair.c > *@@ -794,7 +794,11 @@ void post_init_entity_util_avg(struct task_struct *p) > * > * if (cap > 0) { > * if (cfs_rq->avg.util_avg != 0) { > *- sa->util_avg = cfs_rq->avg.util_avg * se->load.weight; > *+ if (p->sched_class == &fair_sched_class) > *+ sa->util_avg = cfs_rq->avg.util_avg * se_weight(se); > *+ else > *+ sa->util_avg = cfs_rq->avg.util_avg * se->load.weight; > *+ > * sa->util_avg /= (cfs_rq->avg.load_avg + 1); > * > * if (sa->util_avg > cap) > * > --- > comment from Vincent Guittot : > > > > According to the original code logic: > > cfs_rq->avg.util_avg > > sa->util_avg = -------------------- * se->load.weight > > cfs_rq->avg.load_avg > > this should have been scale_load_down(se->load.weight) from the beginning > > > but for fair_sched_class: > > se->load.weight = 1024 * sched_prio_to_weight[prio]; > > This is only true for 64bits platform otherwise scale_load and > scale_load_down are nop > > > cfs_rq->avg.util_avg > > so the -------------------- must be extremely small, the > > cfs_rq->avg.load_avg > > judgment condition "sa->util_avg < cap" could be established. > > It's not fair for those tasks who has smaller nice value. > > > > Signed-off-by: Xuewen Yan > > --- > > kernel/sched/fair.c | 6 +++++- > > 1 file changed, 5 insertions(+), 1 deletion(-) > > > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > > index 290f9e3..079760b 100644 > > --- a/kernel/sched/fair.c > > +++ b/kernel/sched/fair.c > > @@ -794,7 +794,11 @@ void post_init_entity_util_avg(struct task_struct *p) > > > > if (cap > 0) { > > if (cfs_rq->avg.util_avg != 0) { > > We should now use cpu_util() instead of cfs_rq->avg.util_avg which > takes into account other classes > > > - sa->util_avg = cfs_rq->avg.util_avg * se->load.weight; > > + if (p->sched_class == &fair_sched_class) > > + sa->util_avg = cfs_rq->avg.util_avg * se_weight(se); > > + else > > + sa->util_avg = cfs_rq->avg.util_avg * se->load.weight; > > Why this else keeps using se->load.weight ? > > Either we uses sa->util_avg = cfs_rq->avg.util_avg * se_weight(se); > for all classes > > Or we want a different init value for other classes. But in this case > se->load.weight is meaningless and we should simply set them to 0 > although we could probably compute a value based on bandwidth for > deadline class. > > --- > kernel/sched/fair.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index 290f9e3..c6186cc 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -794,7 +794,7 @@ void post_init_entity_util_avg(struct task_struct *p) > > if (cap > 0) { > if (cfs_rq->avg.util_avg != 0) { > - sa->util_avg = cfs_rq->avg.util_avg * se->load.weight; > + sa->util_avg = cfs_rq->avg.util_avg * se_weight(se); Please refer to this MessageID: 20161208012722.GA4128@geo in lkml web site if you want. Just a notice and no matter here. My head do not work now. I can't remember more things that time.. > sa->util_avg /= (cfs_rq->avg.load_avg + 1); > > if (sa->util_avg > cap) > -- > 1.9.1 >