Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp3028638pxk; Mon, 7 Sep 2020 00:32:13 -0700 (PDT) X-Google-Smtp-Source: ABdhPJymo1qNfHvmhy4xp5MNMaZtbmX5tYSHTmEXgewecAIARjMFyAshl7iIR0r6l4JohdoeMOyl X-Received: by 2002:aa7:dcd9:: with SMTP id w25mr19484241edu.280.1599463932961; Mon, 07 Sep 2020 00:32:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1599463932; cv=none; d=google.com; s=arc-20160816; b=xUPE9eV2veBTxXicdFlK2DgozagXw+1wmDr39ZlcEsZs+cswKk20tkv57/LEPbWBwC a8LZsQl449wJbSsOKBAgOPPgd7zY4bNBmWp2OaQuaYB1YC4d+RKuUMhQLHsjL3aclkfG xrgYW9zNSp9MOE2D8T8X8hq/Ca3C3N3fwCrzdupQn8BSw/SC1a7l/+HPu5WY/qYMEK1Y 7onTLF6ySGgHl9v62zFX8EHiECPg9P+mbWOd0EBX/3HYNB2Wawrm5RiCWpsjgj00khxL WKcLqtJMndG8VozpDboHK4xjbUYMFG3PXBzkeBgC7NIHMEDuvqm5eLS80j5Ae/0Qxpkx 6SnQ== 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:mime-version :message-id:date:subject:cc:to:from; bh=VoQNHho6DcPK7YzgyP5BgVM9Lm0JnhB8g6zC0MXvCDI=; b=hhVdAOIskFjaglTk6B1cCmgnYyUI0zSXFH/cTcbMBlmETUSTiZlWGK2ru5BHsg34uo 7bFh0+3gVDSo2CiSDUCT5DPnLUWzMy5jJ1uWOGkQJx5YKTnIkUt4jpQbh8HMWjZPGcAf MHYLX18irhZce9eM30DWavrugIO3ApQCQH/vING/PiVWygn1qdgpza0NRwlXFz8XFkPy t3EaXqpIJR57uXToiC8Y/LWMkiT57Cjvt8vrpIpcvGRUnrLtg0vwSQdjiepUv9Z/EC2K Myj6WQRvSLBix/SUNpjnI7bIw3GmNOVrHGJDHrcs+E/gJn6+una52dmtppTjq9G2Evlh 3pyA== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id x18si10302519ejd.51.2020.09.07.00.31.50; Mon, 07 Sep 2020 00:32:12 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727030AbgIGHaU (ORCPT + 99 others); Mon, 7 Sep 2020 03:30:20 -0400 Received: from szxga06-in.huawei.com ([45.249.212.32]:48696 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726443AbgIGHaQ (ORCPT ); Mon, 7 Sep 2020 03:30:16 -0400 Received: from DGGEMS402-HUB.china.huawei.com (unknown [172.30.72.59]) by Forcepoint Email with ESMTP id 62890A3BBFCE23E8395C; Mon, 7 Sep 2020 15:30:11 +0800 (CST) Received: from SWX921481.china.huawei.com (10.126.201.74) by DGGEMS402-HUB.china.huawei.com (10.3.19.202) with Microsoft SMTP Server id 14.3.487.0; Mon, 7 Sep 2020 15:30:04 +0800 From: Barry Song To: , , , , , , , CC: , Barry Song , Mel Gorman , Peter Zijlstra , Valentin Schneider , Phil Auld , Hillf Danton , Ingo Molnar Subject: [PATCH] sched/fair: use dst group while checking imbalance for NUMA balancer Date: Mon, 7 Sep 2020 19:27:08 +1200 Message-ID: <20200907072708.8664-1-song.bao.hua@hisilicon.com> X-Mailer: git-send-email 2.21.0.windows.1 MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-Originating-IP: [10.126.201.74] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Something is wrong. In find_busiest_group(), we are checking if src has higher load, however, in task_numa_find_cpu(), we are checking if dst will have higher load after balancing. It seems it is not sensible to check src. It maybe cause wrong imbalance value, for example, if dst_running = env->dst_stats.nr_running + 1 results in 3 or above, and src_running = env->src_stats.nr_running - 1 results in 1; The current code is thinking imbalance as 0 since src_running is smaller than 2. This is inconsistent with load balancer. Fixes: fb86f5b211 ("sched/numa: Use similar logic to the load balancer for moving between domains with spare capacity") Cc: Mel Gorman Cc: Peter Zijlstra Cc: Vincent Guittot Cc: Juri Lelli Cc: Dietmar Eggemann Cc: Valentin Schneider Cc: Phil Auld Cc: Hillf Danton Cc: Ingo Molnar Signed-off-by: Barry Song --- kernel/sched/fair.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 1a68a05..90cfee7 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -1548,7 +1548,7 @@ struct task_numa_env { static unsigned long cpu_load(struct rq *rq); static unsigned long cpu_util(int cpu); -static inline long adjust_numa_imbalance(int imbalance, int src_nr_running); +static inline long adjust_numa_imbalance(int imbalance, int nr_running); static inline enum numa_type numa_classify(unsigned int imbalance_pct, @@ -1925,7 +1925,7 @@ static void task_numa_find_cpu(struct task_numa_env *env, src_running = env->src_stats.nr_running - 1; dst_running = env->dst_stats.nr_running + 1; imbalance = max(0, dst_running - src_running); - imbalance = adjust_numa_imbalance(imbalance, src_running); + imbalance = adjust_numa_imbalance(imbalance, dst_running); /* Use idle CPU if there is no imbalance */ if (!imbalance) { @@ -8957,7 +8957,7 @@ static inline void update_sd_lb_stats(struct lb_env *env, struct sd_lb_stats *sd } } -static inline long adjust_numa_imbalance(int imbalance, int src_nr_running) +static inline long adjust_numa_imbalance(int imbalance, int nr_running) { unsigned int imbalance_min; @@ -8966,7 +8966,7 @@ static inline long adjust_numa_imbalance(int imbalance, int src_nr_running) * tasks that remain local when the source domain is almost idle. */ imbalance_min = 2; - if (src_nr_running <= imbalance_min) + if (nr_running <= imbalance_min) return 0; return imbalance; -- 2.7.4