Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp72904ybi; Tue, 18 Jun 2019 17:41:29 -0700 (PDT) X-Google-Smtp-Source: APXvYqwGtsZIvUrzY4FR5+6ajdWyGuSXI/8AzW4QOPnMGv6Gm4hF5856DyzEOgTtvYNdqP6LxpaN X-Received: by 2002:a62:6d41:: with SMTP id i62mr122511748pfc.227.1560904889844; Tue, 18 Jun 2019 17:41:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560904889; cv=none; d=google.com; s=arc-20160816; b=UL+mXZfkoCVVN2z34Q0T4PQsLm836gWRTfmqnLY4bsuAk9cML7z3TrHrDmL9dJCWMy TAAT5JVegibIaa/wrIySC385oDIYXyeLF0SHp8OXOyoZ4AfuLHGCyghI/fdRaUwwZa+9 g/Gm65aF1PHO9K8kaSObtn7FHtB2jgnb631MZyee85hfU+m2m1U48zAd3pG4TGU3HBhn A3l9Tr5iTRbhGnB5NJdkkpj9IZw0rqB3wnzLEUjHE1KYAgENWZQWV45N6iz9H8TLsIPv qtNOyZ9W4MNPhFx5+1qiSGjyhUvaG3bKHcXYPg6mlTagEeMKvDsPOChpBcHoS7G2JdDo t5gw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=Hvb16bwt26ZSY/9MTVMzsIdzO3PPNSUm5rw22PlGA5w=; b=K8W2fiIbONEr9B0zf8rThFxTCCkemrZtnGWSkPBUAYJURU81flrgSEazyTgRMBoiMB 1wUpEMHWUcST0bAjT5D/RCHp+/UZxWVoVmpuDkHb6ETgmRVVhLqg2CWatFIVcOk9jkEr ynpwiXKox7KNCRaleEwgmL2O6wwjGdEASsrcLT2IrlXkoocswAhJfffOzFDOwbc/ViXw hUQxcwb+pFlHcLeaveAC3D+OQbS6gjSlHhWG8mhR9mJ72vLhB4fyNtWEK6mRKQMwjf4M ieVYrianh1YTko40kDOcYcNzp14/q3GZ6yTpPgpwqAlEWf0+N9eZGRla2GOmpW5QYjC7 w9BA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Bhb1gZZb; 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=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b139si14994450pfb.38.2019.06.18.17.41.14; Tue, 18 Jun 2019 17:41:29 -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; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Bhb1gZZb; 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=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728195AbfFSAlE (ORCPT + 99 others); Tue, 18 Jun 2019 20:41:04 -0400 Received: from mail-oi1-f193.google.com ([209.85.167.193]:36988 "EHLO mail-oi1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726023AbfFSAlE (ORCPT ); Tue, 18 Jun 2019 20:41:04 -0400 Received: by mail-oi1-f193.google.com with SMTP id t76so9209544oih.4 for ; Tue, 18 Jun 2019 17:41:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=Hvb16bwt26ZSY/9MTVMzsIdzO3PPNSUm5rw22PlGA5w=; b=Bhb1gZZbB9Oukl+AW9mAy9W1Uv/KamKBE6qxGrdZPk5xQFGgEf8MsmH33i+IbYTYgh dJWCyqGzcMG8sv63hqXpWfOb6T81RT/Lg0J8zCq2rR9+PVSJuDLShwcZr9BZZhDHz8cA 1R4DVyBdcMhdyCP5/d0pM2kDH881nCXCzDLfiem9TImrkaSM3MU0n45bArHD0eOMjr0/ 11jZpBfzDlpIriL2qH9Jx1y8BkPztdAOSoQPNrYwQR2XNdUH8WonOap/h5MpQVgtcVBC bdSJ94kM48BkBK+H1e1BFJDl7VdwXvF0Fitq0Bf3e7IXCpWe0571wj86bAl6LvGA//Tl i7Iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Hvb16bwt26ZSY/9MTVMzsIdzO3PPNSUm5rw22PlGA5w=; b=DRGYDJJ8dscvygMnNHNQCaEqwfAoGzeBLesEN2OU8Sac15Pds04/Hd3k5YCNjy5Knp sME0X+GhAMZl/UX/SV/skhGQvmHUfHMNyaEpOapZin67qqpcZv1bDeviTRx0+LmhFD5x 4v4FRlUzilaneoJLBNx271V+bK3QAhO5ViSsxUqk+teVsUbACvvIdbjwbos9FYkj8ZjK GRnHpgYZtHWhsYKDB5Bg8VTnu+6QrUedQsyXJRsqzARhQXMSa768+m6GQWYnahriRm5I +tvWDc9+Q/OdipTlY5d9Nk8TLJEq/8+Yg2QGqCfvSPFamQG4YbH55czylWE5MGdcqI+R oLMw== X-Gm-Message-State: APjAAAVdfbnBIxEkwCbLnLOskC1U8Vx5KdGDEJpZYas/dSXBJmZb5n9l fznP8sHk05ps7bksSVXRE5Szb/FqcesB8BeEIorrnA== X-Received: by 2002:aca:51ce:: with SMTP id f197mr855473oib.33.1560904863876; Tue, 18 Jun 2019 17:41:03 -0700 (PDT) MIME-Version: 1.0 References: <1560827581-8827-1-git-send-email-wanpengli@tencent.com> In-Reply-To: <1560827581-8827-1-git-send-email-wanpengli@tencent.com> From: Wanpeng Li Date: Wed, 19 Jun 2019 08:42:19 +0800 Message-ID: Subject: Re: [PATCH] sched/nohz: Optimize get nohz timer target To: LKML Cc: Ingo Molnar , Peter Zijlstra , Ingo Molnar , Frederic Weisbecker Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Cc Frederic, On Tue, 18 Jun 2019 at 11:13, Wanpeng Li wrote: > > From: Wanpeng Li > > On a machine, cpu 0 is used for housekeeping, other 39 cpus are in > nohz_full mode. We can observe huge time burn in the loop for seaching > nearest busy housekeeper cpu by ftrace. > > 2) | get_nohz_timer_target() { > 2) 0.240 us | housekeeping_test_cpu(); > 2) 0.458 us | housekeeping_test_cpu(); > > ... > > 2) 0.292 us | housekeeping_test_cpu(); > 2) 0.240 us | housekeeping_test_cpu(); > 2) 0.227 us | housekeeping_any_cpu(); > 2) + 43.460 us | } > > This patch optimizes the searching logic by finding a nearest housekeeper > cpu in the housekeeping cpumask, it can minimize the worst searching time > from ~44us to < 10us in my testing. > > Cc: Ingo Molnar > Cc: Peter Zijlstra > Signed-off-by: Wanpeng Li > --- > kernel/sched/core.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/kernel/sched/core.c b/kernel/sched/core.c > index 83bd6bb..db550cf 100644 > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -548,11 +548,12 @@ int get_nohz_timer_target(void) > > rcu_read_lock(); > for_each_domain(cpu, sd) { > - for_each_cpu(i, sched_domain_span(sd)) { > + for_each_cpu_and(i, sched_domain_span(sd), > + housekeeping_cpumask(HK_FLAG_TIMER)) { > if (cpu == i) > continue; > > - if (!idle_cpu(i) && housekeeping_cpu(i, HK_FLAG_TIMER)) { > + if (!idle_cpu(i)) { > cpu = i; > goto unlock; > } > -- > 2.7.4 >