Received: by 2002:a05:6359:c8b:b0:c7:702f:21d4 with SMTP id go11csp83538rwb; Mon, 26 Sep 2022 09:34:05 -0700 (PDT) X-Google-Smtp-Source: AMsMyM54nw8fsgMzocRsFILmJGPOaJqcvqwz+E33SgNDVCfhaE1mlo0+5oi0hu5UPz+s2e5dvc/R X-Received: by 2002:a17:90a:fe90:b0:202:a345:b7a6 with SMTP id co16-20020a17090afe9000b00202a345b7a6mr25557233pjb.14.1664210045433; Mon, 26 Sep 2022 09:34:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1664210045; cv=none; d=google.com; s=arc-20160816; b=sy/7tliefC7XPxFgqMYjdxkj26oKFRAZvkYwIuYvRanmKFkEHoGkMFTQML5piHm/5H KZO9Ji2g/voOM9aX1NxG4D0vKc6HwaPb+GOMhVT/Hr95ANb0YA9T6h/tBd0gmJli4bWm pdum8NbBE5nryQekdsThiva83jkGnYdnW84rC+upUQHTmk35xPg8yScYuikXbbFRA45b DoIqjJbTP9Fo/QlVtpyqwrJEZMSq1o9/2PtKjlueIOg7EMir51UO5jPxhc4Dqux9XLvg 2pl3l4vK+rzI9dKCWxdN6mUSxWd1kWMKPQrUCr7CDek9dtcwss1BoY7my8p8Ok/orrqD YKZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=/fFjRZ8t/90FQXYub8lwlEmUW4z8FYh2n7IMlmSjywQ=; b=b461/Qc+A8zzGbyi8OYQf41kngdncqfK+E4TQZ5CiT8/6uXAklqO02KqHDvhABtYHl rm0svl878yFlZBy4bzFEc6ppMuhWICO9hDrOWtaW5oDG+qYLTnkO0fryEvl3MiZNb0aE 474QXUCPs659nheCYV8ny5uel0VOFvwrK3bHlKbefKdZPVkK+xqwdz7mjYZYSSpqh5oA B5fc+nLmwUi7xa+HXAi4VshsTpVp/6aqYgY5E+GYURrfsxtCd+j56At2Urosyukob8eD Qe6RurbvDi/hv6A5ATaVOC1Q2lTXWOl9hVtE4KDjzOkKGC2tOpW77tVQjRUOjXtsQvZe jBaA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@joelfernandes.org header.s=google header.b=hhzyiKN0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id q17-20020a656a91000000b0043941e5532dsi20362476pgu.391.2022.09.26.09.33.28; Mon, 26 Sep 2022 09:34:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-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=@joelfernandes.org header.s=google header.b=hhzyiKN0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235246AbiIZQQB (ORCPT + 99 others); Mon, 26 Sep 2022 12:16:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38834 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235163AbiIZQPN (ORCPT ); Mon, 26 Sep 2022 12:15:13 -0400 Received: from mail-qk1-x732.google.com (mail-qk1-x732.google.com [IPv6:2607:f8b0:4864:20::732]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1441615A31 for ; Mon, 26 Sep 2022 08:04:40 -0700 (PDT) Received: by mail-qk1-x732.google.com with SMTP id u28so4264325qku.2 for ; Mon, 26 Sep 2022 08:04:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joelfernandes.org; s=google; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date; bh=/fFjRZ8t/90FQXYub8lwlEmUW4z8FYh2n7IMlmSjywQ=; b=hhzyiKN0Ckp2AUbCjVvWDo3TbpeKMuyNCWgBF0EOCu22Dk98mUibh1PI62Xr1hbbd3 hKMoaNnrjhXNGqTvisj87IXdosQ0MhZcUJ5WEFQQAGiI5FsasjkjH7RibqS1NSp/h30/ jPX81i6b4g6kRqd1GDZWF/MBmgMk5i/B/Q84Q= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date; bh=/fFjRZ8t/90FQXYub8lwlEmUW4z8FYh2n7IMlmSjywQ=; b=hUnykG5xflitVYE5FoKGTWhzWebQmSDvmm91kQH0tGnvBd5iFBP/PFbrcM2DKaLR0i WnklfdwFBUPOyzruaBA+X7PpUaD9IbPg4MNsIuZqdqSLnsziTa4o6Tm7Ac9VnW3wWmrt a5zx+TpY3YYqr8p/YkzKcxETcvXmjtxZHerhc+G0/0R3k73WwYSJWiMM8egRk/r7N0Ep K/yGaSn4IT8s4jjB9dLaEVYrBCr1xyd0LmZL7tqRlb/V3KGHxDTU1jbVS6h+MVQ0RZEZ 4tGjgpR2dQyA1XHeZvS39lugL0KrzkAif/v7QlwHNfOnbMiOXevMJDIP75z0BYf4Hokp 8Wgg== X-Gm-Message-State: ACrzQf3u63NXno+r6GOX4LUe3FGte/dz6E05BJEqk3eHMA0xJLNtVCOT Ip6BSqIiDSLpGbDHtQCd3v5c4w== X-Received: by 2002:a05:620a:4081:b0:6ce:6253:b90c with SMTP id f1-20020a05620a408100b006ce6253b90cmr14465020qko.172.1664204679595; Mon, 26 Sep 2022 08:04:39 -0700 (PDT) Received: from localhost (48.230.85.34.bc.googleusercontent.com. [34.85.230.48]) by smtp.gmail.com with ESMTPSA id bq8-20020a05620a468800b006aedb35d8a1sm11427276qkb.74.2022.09.26.08.04.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Sep 2022 08:04:39 -0700 (PDT) Date: Mon, 26 Sep 2022 15:04:38 +0000 From: Joel Fernandes To: Frederic Weisbecker Cc: rcu@vger.kernel.org, linux-kernel@vger.kernel.org, rushikesh.s.kadam@intel.com, urezki@gmail.com, neeraj.iitr10@gmail.com, paulmck@kernel.org, rostedt@goodmis.org Subject: Re: [PATCH v6 1/4] rcu: Make call_rcu() lazy to save power Message-ID: References: <19217A4C-7183-4D78-A714-FBFE7BB20742@joelfernandes.org> <22F29015-5962-433D-8815-E4154B4897DD@joelfernandes.org> <20220925220045.GA182613@lothringen> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20220925220045.GA182613@lothringen> X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=ham 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-kernel@vger.kernel.org On Mon, Sep 26, 2022 at 12:00:45AM +0200, Frederic Weisbecker wrote: > On Sat, Sep 24, 2022 at 09:00:39PM -0400, Joel Fernandes wrote: > > > > > > > On Sep 24, 2022, at 7:28 PM, Joel Fernandes wrote: > > > > > > Hi Frederic, thanks for the response, replies > > > below courtesy fruit company’s device: > > > > > >>> On Sep 24, 2022, at 6:46 PM, Frederic Weisbecker wrote: > > >>> > > >>> On Thu, Sep 22, 2022 at 10:01:01PM +0000, Joel Fernandes (Google) wrote: > > >>> @@ -3902,7 +3939,11 @@ static void rcu_barrier_entrain(struct rcu_data *rdp) > > >>> rdp->barrier_head.func = rcu_barrier_callback; > > >>> debug_rcu_head_queue(&rdp->barrier_head); > > >>> rcu_nocb_lock(rdp); > > >>> - WARN_ON_ONCE(!rcu_nocb_flush_bypass(rdp, NULL, jiffies)); > > >>> + /* > > >>> + * Flush the bypass list, but also wake up the GP thread as otherwise > > >>> + * bypass/lazy CBs maynot be noticed, and can cause real long delays! > > >>> + */ > > >>> + WARN_ON_ONCE(!rcu_nocb_flush_bypass(rdp, NULL, jiffies, FLUSH_BP_WAKE)); > > >> > > >> This fixes an issue that goes beyond lazy implementation. It should be done > > >> in a separate patch, handling rcu_segcblist_entrain() as well, with "Fixes: " tag. > > > > > > I wanted to do that, however on discussion with > > > Paul I thought of making this optimization only for > > > all lazy bypass CBs. That makes it directly related > > > this patch since the laziness notion is first > > > introduced here. On the other hand I could make > > > this change in a later patch since we are not > > > super bisectable anyway courtesy of the last > > > patch (which is not really an issue if the CONFIG > > > is kept off during someone’s bisection. > > > > Or are we saying it’s worth doing the wake up for rcu barrier even for > > regular bypass CB? That’d save 2 jiffies on rcu barrier. If we agree it’s > > needed, then yes splitting the patch makes sense. > > > > Please let me know your opinions, thanks, > > > > - Joel > > Sure, I mean since we are fixing the buggy rcu_barrier_entrain() anyway, let's > just fix bypass as well. Such as in the following (untested): Got it. This sounds good to me, and will simplify the code a bit more for sure. I guess a question for Paul - are you Ok with rcu_barrier() causing wake ups if the bypass list has any non-lazy CBs as well? That should be OK, IMO. > > diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c > index b39e97175a9e..a0df964abb0e 100644 > --- a/kernel/rcu/tree.c > +++ b/kernel/rcu/tree.c > @@ -3834,6 +3834,8 @@ static void rcu_barrier_entrain(struct rcu_data *rdp) > { > unsigned long gseq = READ_ONCE(rcu_state.barrier_sequence); > unsigned long lseq = READ_ONCE(rdp->barrier_seq_snap); > + bool wake_nocb = false; > + bool was_alldone = false; > > lockdep_assert_held(&rcu_state.barrier_lock); > if (rcu_seq_state(lseq) || !rcu_seq_state(gseq) || rcu_seq_ctr(lseq) != rcu_seq_ctr(gseq)) > @@ -3842,6 +3844,8 @@ static void rcu_barrier_entrain(struct rcu_data *rdp) > rdp->barrier_head.func = rcu_barrier_callback; > debug_rcu_head_queue(&rdp->barrier_head); > rcu_nocb_lock(rdp); > + if (rcu_rdp_is_offloaded(rdp) && !rcu_segcblist_pend_cbs(&rdp->cblist)) > + was_alldone = true; > WARN_ON_ONCE(!rcu_nocb_flush_bypass(rdp, NULL, jiffies)); > if (rcu_segcblist_entrain(&rdp->cblist, &rdp->barrier_head)) { > atomic_inc(&rcu_state.barrier_cpu_count); > @@ -3849,7 +3853,12 @@ static void rcu_barrier_entrain(struct rcu_data *rdp) > debug_rcu_head_unqueue(&rdp->barrier_head); > rcu_barrier_trace(TPS("IRQNQ"), -1, rcu_state.barrier_sequence); > } > + if (was_alldone && rcu_segcblist_pend_cbs(&rdp->cblist)) > + wake_nocb = true; > rcu_nocb_unlock(rdp); > + if (wake_nocb) > + wake_nocb_gp(rdp, false); > + Thanks for the code snippet, I like how you are checking if the bypass list is empty, without actually checking it ;-) thanks, - Joel