Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp7244922rwb; Tue, 15 Nov 2022 09:27:16 -0800 (PST) X-Google-Smtp-Source: AA0mqf6wgcaOFeLfcCg0T89pz1iucmOjZjIQpxV/vx0NgPfJBBSPHfJr9TAtDIqtJq30NMAtFYTK X-Received: by 2002:a05:6402:3902:b0:468:15f1:54b5 with SMTP id fe2-20020a056402390200b0046815f154b5mr5867552edb.8.1668533236148; Tue, 15 Nov 2022 09:27:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668533236; cv=none; d=google.com; s=arc-20160816; b=F/Qh/+06XYdo7kvMR5IQ2Ilcz73RBaHg2WNRwQLqsXZmS3EyI3otFt71NXXxKRFGmv UJzhX+URsgKb6Ky6uW4iyTIOVwoWoQwnsZe93CYUAndxgEvuRsF5NINgKQLfYWq0qKqJ EU6uBS5hQ1BA6O8yyCqIvxo4Wqr+ef7a73o07523E812nWFfVLhME+zgt5xKBOvaritv 6mO3LweMwT2YWGFjBuTzTkrVXDedLZbvNoJEwWUBOPPFfER0LUnjC6njlFatGd7ebXnk E1+Cggf4w5EYTSeONhDaUYUAOAgU7RaBs/l19L2Y7S03oz7tu0cxFTHWkXj+ZRLgdR7x D3kQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:references :in-reply-to:subject:cc:to:from:dkim-signature; bh=4AF5wlPWBdv2FqTXmRD8z1A6As043p69QbUfc2aOxsk=; b=gyiHTalV40bbUW6joiyfoaMMd76akWSZkMYIfHgjtSiuo7pjvypbh7VXc1u9ZWd3aG SQxVZM7KtPFG0Krd+Qqmw8bPKDhwgmapLyX5Gv+iVX5LvAORHTvgr4qf8SFoOgi+GEEY R3sa5lJ4colyw6DvRo3plKtUoKDE4QYXDswfaGzEcIkDU4rBUwRMVAG/x/jvIWNTtnjS 5xaF4J+ZuTCAJ9N6dRQkZgL98lNdLwuiD/+GK8uWMBWxNB8ITu7GHwAfrozuVpXYaJTb lFCO9ZucyKItjBelqYUn4TRsz345tP9amP2Pe2BF8iY4yQpBbh2k2rSEKLwIXNzKChNq 2KYQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Ap6DXvzD; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id g6-20020a1709065d0600b007ae5ccae236si12696901ejt.90.2022.11.15.09.26.51; Tue, 15 Nov 2022 09:27:16 -0800 (PST) Received-SPF: pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Ap6DXvzD; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231173AbiKOR02 (ORCPT + 99 others); Tue, 15 Nov 2022 12:26:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56394 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231376AbiKOR0R (ORCPT ); Tue, 15 Nov 2022 12:26:17 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 17C5027CE8 for ; Tue, 15 Nov 2022 09:25:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1668533116; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=4AF5wlPWBdv2FqTXmRD8z1A6As043p69QbUfc2aOxsk=; b=Ap6DXvzDatlBXAqeY062XGzonYiUmHVa/wcK8qIgGsZjOUMWlLmmL6EYdDvJn0yFPA7zZS R/xBo0V4ZKJtmkBjBmPAtDkMDlPKliMl1Ed4llueDCx18kH4/B7EHmdEaP1JqZBAj+0lID flavjaN6z8+61wxnWeGYKyUjisvX6ZQ= Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-167-EDpBxybMMZK7rWwaRza_WA-1; Tue, 15 Nov 2022 12:25:15 -0500 X-MC-Unique: EDpBxybMMZK7rWwaRza_WA-1 Received: by mail-qk1-f198.google.com with SMTP id i17-20020a05620a249100b006fa2e10a2ecso14357611qkn.16 for ; Tue, 15 Nov 2022 09:25:15 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=4AF5wlPWBdv2FqTXmRD8z1A6As043p69QbUfc2aOxsk=; b=XKCTqWvotk+JgMmU1klO9tnTdwbFGSXGr/3lPR4ksSdlMlzCLIXItQTDMktfr4jUpj e7tmq2/kOZ4EU9AxjHyBIfLgm9tl7XOHNCV5UgRPkpyMS2+iW17DIrYIA/nUhIzxX8Pk PnPtpYvRH6DF83zfoL7Z0Aploll6IWs8Uqs5/kvki360y7ev8DoldZ9sNfdGPW/2aIgT ROXQTYNbZ9x9/p+JbnnHqZFjLt2mqZ66N1xyltxUGczCCutFImj3rDxz9o6RlqExUvFg cDp0okFnXTi2GSNDD05bxHwKoLrNhAqoUqbKrk3lPL5AH3itMRiQJQAwD7AEEdfG93XF /XSQ== X-Gm-Message-State: ANoB5pm+Ly3SEugW45XzhFdRb78nOJHAb6WpqtdOzCu4T0tz2me4KIW+ nhZap6lTNwSrb0Hi5YCbjlUd8GbltGfEfIbuxIZfcxSAownCCxipmG54eyhilWmKKnu5Syh1Vi3 3LTM1NJbKGYy7H879vZm7UiF2 X-Received: by 2002:a05:622a:248c:b0:3a5:6005:7db6 with SMTP id cn12-20020a05622a248c00b003a560057db6mr17429565qtb.131.1668533114159; Tue, 15 Nov 2022 09:25:14 -0800 (PST) X-Received: by 2002:a05:622a:248c:b0:3a5:6005:7db6 with SMTP id cn12-20020a05622a248c00b003a560057db6mr17429531qtb.131.1668533113947; Tue, 15 Nov 2022 09:25:13 -0800 (PST) Received: from vschneid.remote.csb ([154.57.232.159]) by smtp.gmail.com with ESMTPSA id g10-20020a05620a40ca00b006faf76e7c9asm8680773qko.115.2022.11.15.09.25.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 15 Nov 2022 09:25:13 -0800 (PST) From: Valentin Schneider To: Yury Norov , linux-kernel@vger.kernel.org, "David S. Miller" , Andy Shevchenko , Barry Song , Ben Segall , haniel Bristot de Oliveira , Dietmar Eggemann , Gal Pressman , Greg Kroah-Hartman , Heiko Carstens , Ingo Molnar , Jakub Kicinski , Jason Gunthorpe , Jesse Brandeburg , Jonathan Cameron , Juri Lelli , Leon Romanovsky , Mel Gorman , Peter Zijlstra , Rasmus Villemoes , Saeed Mahameed , Steven Rostedt , Tariq Toukan , Tariq Toukan , Tony Luck , Vincent Guittot Cc: Yury Norov , linux-crypto@vger.kernel.org, netdev@vger.kernel.org, linux-rdma@vger.kernel.org Subject: Re: [PATCH v2 3/4] sched: add sched_numa_find_nth_cpu() In-Reply-To: <20221112190946.728270-4-yury.norov@gmail.com> References: <20221112190946.728270-1-yury.norov@gmail.com> <20221112190946.728270-4-yury.norov@gmail.com> Date: Tue, 15 Nov 2022 17:25:06 +0000 Message-ID: MIME-Version: 1.0 Content-Type: text/plain X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org On 12/11/22 11:09, Yury Norov wrote: > The function finds Nth set CPU in a given cpumask starting from a given > node. > > Leveraging the fact that each hop in sched_domains_numa_masks includes the > same or greater number of CPUs than the previous one, we can use binary > search on hops instead of linear walk, which makes the overall complexity > of O(log n) in terms of number of cpumask_weight() calls. > So one thing regarding the bsearch and NUMA levels; until not so long ago we couldn't even support 3 hops [1], and this only got detected when such machines started showing up. Your bsearch here operates on NUMA levels, which represent hops, and so far we know of systems that have up to 4 levels. I'd be surprised (and also appalled) if we even doubled that in the next decade, so with that in mind, a linear walk might not be so horrible. [1]: https://lore.kernel.org/all/20210224030944.15232-1-song.bao.hua@hisilicon.com/ > Signed-off-by: Yury Norov > --- > +int sched_numa_find_nth_cpu(const struct cpumask *cpus, int cpu, int node) > +{ > + struct __cmp_key k = { cpus, NULL, node, cpu, 0 }; > + int hop, ret = nr_cpu_ids; > + > + rcu_read_lock(); > + k.masks = rcu_dereference(sched_domains_numa_masks); > + if (!k.masks) > + goto unlock; > + > + hop = (struct cpumask ***) > + bsearch(&k, k.masks, sched_domains_numa_levels, sizeof(k.masks[0]), cmp) - k.masks; > + > + ret = hop ? > + cpumask_nth_and_andnot(cpu - k.w, cpus, k.masks[hop][node], k.masks[hop-1][node]) : > + cpumask_nth_and(cpu - k.w, cpus, k.masks[0][node]); ^^^ wouldn't this always be 0 here? > +unlock: > + rcu_read_unlock(); > + return ret; > +} > +EXPORT_SYMBOL_GPL(sched_numa_find_nth_cpu); > #endif /* CONFIG_NUMA */ > > static int __sdt_alloc(const struct cpumask *cpu_map) > -- > 2.34.1