Received: by 2002:a05:6a10:6744:0:0:0:0 with SMTP id w4csp803844pxu; Wed, 7 Oct 2020 16:59:53 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyZHgGfVvIJLeua+bu8ghOixSKXPKXR4zXi9/q+9buxaeV2Iyc1Sqav/6vLQZlQHmo9eVdH X-Received: by 2002:a17:906:1914:: with SMTP id a20mr5692631eje.425.1602115193364; Wed, 07 Oct 2020 16:59:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1602115193; cv=none; d=google.com; s=arc-20160816; b=bhvvZrgyIlTJFrpXVpm6r+Hwxd+o3GFinOP7RDEaBLbq/2MZQalYa5rGs0MfJco+bo HIGPzTykukKkPmmV9VXRyRxKMSKsZrPrEfepROSVzOeCkT4bnUAgtzB62u1RalEES8N6 h7cq2kvMWx2XezoGzIh7CfMzCxgBrB+TFvVdNXcGllK9DnVwlyaBv5CybMUEYWGIrvuD q77T0yDil/obDJGBnUuC/owbRtBbtXI5SKc3Kp6PUpc5JyxXlY1DdUJJHygihcwJhYNM 1+7QpZVOBv4ZDeVQyEaTusQHk06vjLhQMpGobt2/Rgh7CpDQqETXRfzrh2u2qFvx4BRl dCvg== 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-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=x58peE624w/NEkK9GSltzFc38SbTyEJvWy/jYEVB/J4=; b=TpsG8I/YaBTxGLfHnUuW+mGS5U1MIThmhV+f1m4BobhpEPRgasKhk9K2dKLz0TpQoE 78Lexwu5X3oCcwiCzgDHLpp8Knx1SzcVMrf9ivknIwWgukuuFKyTu4vvGEV3iR++0TDO JYyX+9AfueEwsVqFrQVB8+R+hHCY3cDMSS38jS8hYByTfB/Ybp5qh83WpsUamwAFhXhL 5FktYbl2b2m//XcfUczuHJ9OgjRuXzPXzcTo7rDNcxX46hARArN1pE7ZDxlJwBGrS/oA 0bXyLY4kE/vvRtOMudcSKk2tLdjFCOyN+6SAA2jHRpcQY6kjUWgaXvG25wXsq0EVBxJc /7Dg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=rMkC7GKd; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id n4si2405917ejs.15.2020.10.07.16.59.30; Wed, 07 Oct 2020 16:59:53 -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; dkim=pass header.i=@kernel.org header.s=default header.b=rMkC7GKd; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728404AbgJGXNu (ORCPT + 99 others); Wed, 7 Oct 2020 19:13:50 -0400 Received: from mail.kernel.org ([198.145.29.99]:59902 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727345AbgJGXNu (ORCPT ); Wed, 7 Oct 2020 19:13:50 -0400 Received: from localhost (unknown [176.177.115.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id BB5A12083B; Wed, 7 Oct 2020 23:13:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1602112429; bh=/Le/feVywHw0Rh7iKUPEtO7jaKG1ZxqCavXeD9xdVAI=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=rMkC7GKd9lWjJMb10Amx3MeHOeJKsQPE8nL45Vbga+BQDWYGvpHizBEHj5fiDhHDV BzR9Pjr9Xh6cPNg6Mz37TIGcUlZRagLcYIrHxQavkg8bLjfpeAbvfskLGghgvYdXWf Owuimp5Wk7wA+ET77EHzm8C/MqN63dFosWv7zztc= Date: Thu, 8 Oct 2020 01:13:46 +0200 From: Frederic Weisbecker To: "Paul E. McKenney" Cc: "Joel Fernandes (Google)" , linux-kernel@vger.kernel.org, neeraju@codeaurora.org, Josh Triplett , Lai Jiangshan , Mathieu Desnoyers , rcu@vger.kernel.org, Steven Rostedt Subject: Re: [PATCH v2] rcu/tree: nocb: Avoid raising softirq when there are ready to execute CBs Message-ID: <20201007231346.GA58749@lothringen> References: <20201005021132.146534-1-joel@joelfernandes.org> <20201007223438.GU29330@paulmck-ThinkPad-P72> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20201007223438.GU29330@paulmck-ThinkPad-P72> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Oct 07, 2020 at 03:34:38PM -0700, Paul E. McKenney wrote: > On Sun, Oct 04, 2020 at 10:11:32PM -0400, Joel Fernandes (Google) wrote: > > During testing, I see it is possible that rcu_pending() returns 1 when > > offloaded callbacks are ready to execute thus raising the RCU softirq. > > > > However, softirq does not execute offloaded callbacks. They are executed in a > > kthread which is awakened independent of the softirq. > > > > This commit therefore avoids raising the softirq in the first place. That's > > probably a good thing considering that the purpose of callback offloading is to > > reduce softirq activity. > > > > Passed 30 minute tests of TREE01 through TREE09 each. > > > > On TREE08, I notice that there is atmost 150us from when the softirq was > > NOT raised when ready cbs were present, to when the ready callbacks were > > invoked by the rcuop thread. This also further confirms that there is no > > need to raise the softirq for ready cbs in the first place. > > > > Cc: neeraju@codeaurora.org > > Signed-off-by: Joel Fernandes (Google) > > Looks good, applied, thank you! I reworked things a bit based on > previous patches and to more precisely capture why this patch does > not cause additional problems. Please let me know if I messed > anything up. > > Thanx, Paul > > ------------------------------------------------------------------------ > > commit 33847a34a2d261354a79b4a24d9d37222e8ec888 > Author: Joel Fernandes (Google) > Date: Wed Oct 7 13:50:36 2020 -0700 > > rcu/tree: nocb: Avoid raising softirq for offloaded ready-to-execute CBs > > Testing showed that rcu_pending() can return 1 when offloaded callbacks > are ready to execute. This invokes RCU core processing, for example, > by raising RCU_SOFTIRQ, eventually resulting in a call to rcu_core(). > However, rcu_core() explicitly avoids in any way manipulating offloaded > callbacks, which are instead handled by the rcuog and rcuoc kthreads, > which work independently of rcu_core(). > > One exception to this independence is that rcu_core() invokes > do_nocb_deferred_wakeup(), however, rcu_pending() also checks > rcu_nocb_need_deferred_wakeup() in order to correctly handle this case, > invoking rcu_core() when needed. > > This commit therefore avoids needlessly invoking RCU core processing > by checking rcu_segcblist_ready_cbs() only on non-offloaded CPUs. > This reduces overhead, for example, by reducing softirq activity. > > This change passed 30 minute tests of TREE01 through TREE09 each. > > On TREE08, there is at most 150us from the time that rcu_pending() chose > not to invoke RCU core processing to the time when the ready callbacks > were invoked by the rcuoc kthread. This provides further evidence that > there is no need to invoke rcu_core() for offloaded callbacks that are > ready to invoke. > > Cc: Neeraj Upadhyay > Signed-off-by: Joel Fernandes (Google) > Signed-off-by: Paul E. McKenney Reviewed-by: Frederic Weisbecker Thanks!