Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp972506pxb; Thu, 5 Nov 2020 19:25:51 -0800 (PST) X-Google-Smtp-Source: ABdhPJwcUJTxYWroaL57vAgNAW4wmXeff4vLNVwczpHr6Kb2uygAZglxdhCAtaCF+UE07csw0/n/ X-Received: by 2002:a50:fc89:: with SMTP id f9mr6263383edq.89.1604633151437; Thu, 05 Nov 2020 19:25:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604633151; cv=none; d=google.com; s=arc-20160816; b=PlE6R5m8bUmhaLeJ18sv7GDOgOeEG5OWtyX2eDI2bs/TP/2tg+FWZzKt69rgWCHhSB AdVBTgEtLYZ8Wg87Ds/gxv21/tpnkS1dqqVeasWX2QBVu3pTpEf7KLXrFGBm/HJ6a74m NWM3CkXF2LYJRtTrG0Vzk55UmA5DAPprUOAkwcEqGzbQJ8HtJdvmfdw+ca8X82TmJiZL NvSmtKrjxWOk3h+UNFvI61JLTrvE1mUDG0w35QPlsaGGAWdjhEqusCtRPTlcRnIXMwon ksKcHcWzOXhq5f7q45v4CefrfmCiBy/VnHMVzzAf8YKSS0VLZhdLBPB0DLfu5+UR7N2f 55kQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:date:subject:cc:to:from :dkim-signature; bh=MCR6fxf5dh6SK9Cu5TmCLk6YOZSSt4FotwiT2a01/Xo=; b=wpK9IswGsI20fUjkpUx2k26Mzn4cOKGvJslAQye0eqB1/djXpDZo7+8pM2Z9QsRiLU D3IGN0i1d/e3IXMpYt9+u3aXnUXEP2IJ/hP9j3fO/jyOyWOYzjEdZXbU4EYZ3f6KkGey quBM2pu0JQomBfdqNjtlCAoIFTgjuIN83pWzUxhJ+nTuL6PlUKMHS8Mj6tt77Ej6ayFt tcbnN8TtQVH7XejaWTNq7yPMS50QXbJTypPOblPPO1L5W8rkm8GhKaYMI8DbLJ7bdakV KQBk6Rhbsg8J9J0kdJH4Ktg3C9PGvALuj7iA41hBlYctALGjPmHCAZE8FoICD+AaJnX6 1z9g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=AfLjdy2F; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p18si2826206ejm.186.2020.11.05.19.25.28; Thu, 05 Nov 2020 19:25:51 -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=@gmail.com header.s=20161025 header.b=AfLjdy2F; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726055AbgKFDWT (ORCPT + 99 others); Thu, 5 Nov 2020 22:22:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52556 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725616AbgKFDWT (ORCPT ); Thu, 5 Nov 2020 22:22:19 -0500 Received: from mail-pg1-x542.google.com (mail-pg1-x542.google.com [IPv6:2607:f8b0:4864:20::542]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 71EA8C0613CF for ; Thu, 5 Nov 2020 19:22:19 -0800 (PST) Received: by mail-pg1-x542.google.com with SMTP id x13so2868300pgp.7 for ; Thu, 05 Nov 2020 19:22:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=MCR6fxf5dh6SK9Cu5TmCLk6YOZSSt4FotwiT2a01/Xo=; b=AfLjdy2FiymA8ZWx0aCLtMVHZk9NYJHWQRbcSiZ4i+HXu9hqI26Z7d3eJZAZmgjYBZ rGdfroGGG+M+Cgz8k7emJ1HdCJff0wR6Vchv/1PX/LItFTnS5c4s+4znIhOfYMQiaUGg M5iUtv49OnXAPLhaZ2Z7YXgUm+I2rc8lpxQYiYWIWCspGGBftMTXsmrDaqekxraoSBYX yZ9rxT+aGBtjyCRztX3O8J1RJslcuGS2+LTr2zLU1h51vEJp9+RvuscP1bmt1Jbcr+o/ 3PX5kPBlnkHxhD8NUK8FJm8LgKva2bmy0mKHwzfPMZPN5uh/b/KovvboP1nWbQXiAK+N bdRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=MCR6fxf5dh6SK9Cu5TmCLk6YOZSSt4FotwiT2a01/Xo=; b=J34Z+Qa75jh4pvmIRQ1grxRH5NONTULlNUlEyDU9VlSAI0b384Yw3Gyab0xgkZ+vi4 1yoq/lhdkILoQSsZqWkAx/pw/GOSwMDaMlV07msu4BxVgIVMjSRimxmAlg8ECuiecKTk +Sd0B3jqHaPaG9uKlW1SIZKQk7N4/7nWQNi41s8+IPRe0J7+VhF3ErHFI3IMU7uMRS+k kmD8ooJmeTtBxejdu5uk7ou6LCyzHKSlN3pfVepWGpnXEoKGXkuO9qwUegBuy5e0ujN5 kKL94G+e1G5FVC+3ct4bYja10c03xCYkwX5ip+oU/ZxXaeEBCBmxTdXl/3SWaDTslFIB xfvw== X-Gm-Message-State: AOAM530QsnzbyGe8PQtecj0QPBQoh8vpFzVMkWPl9aSxQO3QFIsSP/me PqmIEDugW2/YMH3lw/jeSnM= X-Received: by 2002:a65:47ca:: with SMTP id f10mr4982523pgs.298.1604632939047; Thu, 05 Nov 2020 19:22:19 -0800 (PST) Received: from bj10918pcu.spreadtrum.com ([117.18.48.82]) by smtp.gmail.com with ESMTPSA id c4sm24522pfo.62.2020.11.05.19.22.12 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 05 Nov 2020 19:22:18 -0800 (PST) From: Xuewen Yan X-Google-Original-From: Xuewen Yan To: mingo@redhat.com, peterz@infradead.org, juri.lelli@redhat.com, vincent.guittot@linaro.org Cc: 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 Subject: [PATCH v3] sched: revise the initial value of the util_avg. Date: Fri, 6 Nov 2020 11:22:03 +0800 Message-Id: <1604632923-4243-1-git-send-email-xuewen.yan@unisoc.com> X-Mailer: git-send-email 1.9.1 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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); sa->util_avg /= (cfs_rq->avg.load_avg + 1); if (sa->util_avg > cap) -- 1.9.1