Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp904103ybl; Thu, 12 Dec 2019 06:44:42 -0800 (PST) X-Google-Smtp-Source: APXvYqyvBayFJYBZZ9ISo83RC2+x2RiKC3yRwQ/WGwbbihfcBtk4eJLL+yyDEXYSJZV7rwup4nEc X-Received: by 2002:a9d:5885:: with SMTP id x5mr8204720otg.132.1576161881908; Thu, 12 Dec 2019 06:44:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1576161881; cv=none; d=google.com; s=arc-20160816; b=BKR3mthS+PdAHpX8OLPbBQ3XSPV/ABiDp4FsGHG+X+oxkCG4PvJLsiNR6Dzs5pW5qq HtVudi9BpqJ6snLolbpXXW4Ih13/ubJYOBvy4uYxQiCP3jPDe+Y0+H91h2diHWdjc+IE Qg4SXU6kCMhXsNIiyX1hqBrBnWeyN+nG0bOZ5nKkI5XF/5cVTKL1nOyUJQL/OPC3GTm+ xzjW+FHj/b9xV5OCGjrm4IpAiNxQmy3xmPT57VmfT82CQhRwBcSzQoPQCZVI12sJtNTS EN4TbF29KFX1zxMIZShmoLkva6drGtkgDjTspNDcmuIdbBp7XCTeZGPzcgf5TB3GbmBf LmIA== 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=N5G7jVR8jrzdBPy1iijWR72mstQdRtiFM6UnKFQsBgQ=; b=gjy1E++k0A11k1QaBP+yCtHid6FtA975wLFIBOYOx1RzrTTryK2Heg+iafjtig9gSO Si346byQ9Lnc59lOTRcA8geVnYlUfUOOfJUwZ/P4s8HC/bpeLCNQywOgX+t8hInoWS26 pYkBofb1V2UbQvKwHSCS/34aBwCX9dnqDDtTpnERR1LUVm8cxUIPPdjsz+II3ELUnxEc cZhMmV/9pmL1ATyqsw1Q7q0K6OKPTOyxyyHoQoDbY86CKRlY8w5gu7DFjyGr9mxi2Vu1 VltXuCG0wZ+zrXix/GWt/Sk1Hcv1vFcVSI1woEQp2Gu0kyqVDKmzN+dT1pp1RHLdoiNJ rNoQ== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j18si3158312otq.275.2019.12.12.06.44.27; Thu, 12 Dec 2019 06:44:41 -0800 (PST) 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729734AbfLLOnz (ORCPT + 99 others); Thu, 12 Dec 2019 09:43:55 -0500 Received: from szxga04-in.huawei.com ([45.249.212.190]:7679 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729266AbfLLOnz (ORCPT ); Thu, 12 Dec 2019 09:43:55 -0500 Received: from DGGEMS409-HUB.china.huawei.com (unknown [172.30.72.59]) by Forcepoint Email with ESMTP id B6E1D8ADCCDE0913A27E; Thu, 12 Dec 2019 22:43:52 +0800 (CST) Received: from huawei.com (10.175.113.25) by DGGEMS409-HUB.china.huawei.com (10.3.19.209) with Microsoft SMTP Server id 14.3.439.0; Thu, 12 Dec 2019 22:43:42 +0800 From: Cheng Jian To: , , CC: , , , , , , , Subject: [PATCH] sched/fair: Optimize select_idle_cpu Date: Thu, 12 Dec 2019 22:41:02 +0800 Message-ID: <20191212144102.181510-1-cj.chengjian@huawei.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-Originating-IP: [10.175.113.25] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org select_idle_cpu will scan the LLC domain for idle CPUs, it's always expensive. so commit 1ad3aaf3fcd2 ("sched/core: Implement new approach to scale select_idle_cpu()") introduces a way to limit how many CPUs we scan. But this also lead to the following issue: Our threads are all bind to the front CPUs of the LLC domain, and now all the threads runs on the last CPU of them. nr is always less than the cpumask_weight, for_each_cpu_wrap can't find the CPU which our threads can run on, so the threads stay at the last CPU all the time. Fixes: 1ad3aaf3fcd2 ("sched/core: Implement new approach to scale select_idle_cpu()") Signed-off-by: Cheng Jian --- kernel/sched/fair.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 08a233e97a01..16a29b570803 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -5834,6 +5834,7 @@ static int select_idle_cpu(struct task_struct *p, struct sched_domain *sd, int t s64 delta; int this = smp_processor_id(); int cpu, nr = INT_MAX, si_cpu = -1; + struct cpumask cpus; this_sd = rcu_dereference(*this_cpu_ptr(&sd_llc)); if (!this_sd) @@ -5859,11 +5860,11 @@ static int select_idle_cpu(struct task_struct *p, struct sched_domain *sd, int t time = cpu_clock(this); - for_each_cpu_wrap(cpu, sched_domain_span(sd), target) { + cpumask_and(&cpus, sched_domain_span(sd), p->cpus_ptr); + + for_each_cpu_wrap(cpu, &cpus, target) { if (!--nr) return si_cpu; - if (!cpumask_test_cpu(cpu, p->cpus_ptr)) - continue; if (available_idle_cpu(cpu)) break; if (si_cpu == -1 && sched_idle_cpu(cpu)) -- 2.20.1