Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp3210342ybh; Mon, 16 Mar 2020 18:17:20 -0700 (PDT) X-Google-Smtp-Source: ADFU+vvpGyMIyC2MMIA5aaqDEiRx3JVNGgg3O6wPfPnt6cSPY3+iEsiIcU13btXDIK/31eHYx4SS X-Received: by 2002:a54:468b:: with SMTP id k11mr1679581oic.134.1584407840177; Mon, 16 Mar 2020 18:17:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1584407840; cv=none; d=google.com; s=arc-20160816; b=lTGQVoZ9N/LolRgH9X4a9AL0jsi+NHOXq29lw8aFJnRHStEddGO2uRJxHW5VNlob6P tPskbIBqAzcwpAC9bmqcyGd56z++Xn9AN/Qeze7Wvf1beVL+ait0UBVi8fQuMqI4J7Ek d7YDZXi+0jbalunc3OiezPu5g1lJl/DsXaZ/VCiXFRjddcHGzAMua+djYd+fL4OaI/IE PeqmLO4LGhQkaXXKJ17k32D/v/VJV4GrV6dWwKQEUi+ahhjp9tBn08nxHw9JiVi5mxtC aSwWNvAUbYzFQq878dSTfVdS6rD8QCQTFtZq14Dy6opwSofPqk7Ii5ZdzNAGMWuPmbxd bwiw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:mime-version:user-agent:date:message-id:subject :from:to; bh=cUt5ouWZv8sqEs5uH3J3+ezbQ7UBTui0jNdC8ECUaa0=; b=LdCjRHOetWHdEWY4egryBF4wyDTflslgGYsah01UHgoRX3PvgYp9IPLMDKERXQT8HZ b8lP5ZfizlARzfX+IKRAl8Uk23iJ9jTrb+RsXMjGekEesKj4Lt4/T35rAUpCespJWCk9 8YN/jv1a+Zlx7rTKMlsjvnvjhcri/tbqkEMADTuV69xEU5v/0zyhcJ18SbnwxWDr3sXm 61MxXjUms1Pj0cUIdSMHdEDvx+fS32vvHhOcJ+HZTaQOwUqaFdyBd33zMVGvw8pxWevx wXmhYVB4TMuG2YoCXSylQh/P7mn33mDF9XOXGl/IWYZ2XpDwLiru0sdkSVycplPyij0w XQ/Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q23si887786otg.271.2020.03.16.18.17.08; Mon, 16 Mar 2020 18:17:20 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1733128AbgCQBPE (ORCPT + 99 others); Mon, 16 Mar 2020 21:15:04 -0400 Received: from out30-43.freemail.mail.aliyun.com ([115.124.30.43]:56976 "EHLO out30-43.freemail.mail.aliyun.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1733025AbgCQBPE (ORCPT ); Mon, 16 Mar 2020 21:15:04 -0400 X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R281e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=e01e07488;MF=yun.wang@linux.alibaba.com;NM=1;PH=DS;RN=9;SR=0;TI=SMTPD_---0TspklhC_1584407699; Received: from testdeMacBook-Pro.local(mailfrom:yun.wang@linux.alibaba.com fp:SMTPD_---0TspklhC_1584407699) by smtp.aliyun-inc.com(127.0.0.1); Tue, 17 Mar 2020 09:15:00 +0800 To: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , "open list:SCHEDULER" From: =?UTF-8?B?546L6LSH?= Subject: [RESEND PATCH] sched: avoid scale real weight down to zero Message-ID: Date: Tue, 17 Mar 2020 09:14:35 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:68.0) Gecko/20100101 Thunderbird/68.4.2 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org During our testing, we found a case that shares no longer working correctly, the cgroup topology is like: /sys/fs/cgroup/cpu/A (shares=102400) /sys/fs/cgroup/cpu/A/B (shares=2) /sys/fs/cgroup/cpu/A/B/C (shares=1024) /sys/fs/cgroup/cpu/D (shares=1024) /sys/fs/cgroup/cpu/D/E (shares=1024) /sys/fs/cgroup/cpu/D/E/F (shares=1024) The same benchmark is running in group C & F, no other tasks are running, the benchmark is capable to consumed all the CPUs. We suppose the group C will win more CPU resources since it could enjoy all the shares of group A, but it's F who wins much more. The reason is because we have group B with shares as 2, since A->cfs_rq.load.weight == B->se.load.weight == B->shares/nr_cpus, so A->cfs_rq.load.weight become very small. And in calc_group_shares() we calculate shares as: load = max(scale_load_down(cfs_rq->load.weight), cfs_rq->avg.load_avg); shares = (tg_shares * load) / tg_weight; Since the 'cfs_rq->load.weight' is too small, the load become 0 after scale down, although 'tg_shares' is 102400, shares of the se which stand for group A on root cfs_rq become 2. While the se of D on root cfs_rq is far more bigger than 2, so it wins the battle. Thus when scale_load_down() scale real weight down to 0, it's no longer telling the real story, the caller will have the wrong information and the calculation will be buggy. This patch add check in scale_load_down(), so the real weight will be >= MIN_SHARES after scale, after applied the group C wins as expected. Cc: Ben Segall Reviewed-by: Vincent Guittot Suggested-by: Peter Zijlstra Signed-off-by: Michael Wang --- kernel/sched/sched.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index 2a0caf394dd4..75c283f22256 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -118,7 +118,13 @@ extern long calc_load_fold_active(struct rq *this_rq, long adjust); #ifdef CONFIG_64BIT # define NICE_0_LOAD_SHIFT (SCHED_FIXEDPOINT_SHIFT + SCHED_FIXEDPOINT_SHIFT) # define scale_load(w) ((w) << SCHED_FIXEDPOINT_SHIFT) -# define scale_load_down(w) ((w) >> SCHED_FIXEDPOINT_SHIFT) +# define scale_load_down(w) \ +({ \ + unsigned long __w = (w); \ + if (__w) \ + __w = max(MIN_SHARES, __w >> SCHED_FIXEDPOINT_SHIFT); \ + __w; \ +}) #else # define NICE_0_LOAD_SHIFT (SCHED_FIXEDPOINT_SHIFT) # define scale_load(w) (w) -- 2.14.4.44.g2045bb6