From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755266AbeASBW7 (ORCPT ); Thu, 18 Jan 2018 20:22:59 -0500 Received: from mga07.intel.com ([134.134.136.100]:33570 "EHLO mga07.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750784AbeASBWy (ORCPT ); Thu, 18 Jan 2018 20:22:54 -0500 X-Amp-Result: UNSCANNABLE X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.46,379,1511856000"; d="scan'208";a="20925504" Date: Fri, 19 Jan 2018 09:21:59 +0800 From: "Liu, Changcheng" To: "Paul E. McKenney" Cc: Lai Jiangshan , Mathieu Desnoyers , linux-kernel@vger.kernel.org Subject: Re: [PATCH] rcu: refine structure rcu_node field for rcu boost Message-ID: <20180119012159.GA114965@sofia> References: <20180118103342.GA114176@sofia> <20180118173825.GG9671@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180118173825.GG9671@linux.vnet.ibm.com> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Paul, This patch is optional. 1. It's true that the added #ifdef in rcu_read_unlock_special is a bad breaker. The patch follows the current code e.g. CONFIG_PROVE_RCU 2. Haven't evaluated the performance in system. Studying RCU and found that boost feature field is allocated in in the rcu_node structure even rcu boost isn't enabled. B.R. Changcheng On 09:38 Thu 18 Jan, Paul E. McKenney wrote: > On Thu, Jan 18, 2018 at 06:33:43PM +0800, Liu, Changcheng wrote: > > Do not allocate space for rcu boost field when > > RCU BOOST is not configured. > > > > Signed-off-by: Liu Changcheng > > The added #ifdef in rcu_read_unlock_special() is a deal-breaker. > Just out of curiosity, is this decrease in storage measurable at > the system level? > > Thanx, Paul > > > diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h > > index 46a5d19..88f087e 100644 > > --- a/kernel/rcu/tree.h > > +++ b/kernel/rcu/tree.h > > @@ -129,6 +129,7 @@ struct rcu_node { > > /* if there is no such task. If there */ > > /* is no current expedited grace period, */ > > /* then there can cannot be any such task. */ > > +#ifdef CONFIG_RCU_BOOST > > struct list_head *boost_tasks; > > /* Pointer to first task that needs to be */ > > /* priority boosted, or NULL if no priority */ > > @@ -153,6 +154,8 @@ struct rcu_node { > > /* Number of tasks boosted for expedited GP. */ > > unsigned long n_normal_boosts; > > /* Number of tasks boosted for normal GP. */ > > +#endif/* #ifdef CONFIG_RCU_BOOST*/ > > + > > #ifdef CONFIG_RCU_NOCB_CPU > > struct swait_queue_head nocb_gp_wq[2]; > > /* Place for rcu_nocb_kthread() to wait GP. */ > > diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h > > index db85ca3..fee0b1e 100644 > > --- a/kernel/rcu/tree_plugin.h > > +++ b/kernel/rcu/tree_plugin.h > > @@ -506,8 +506,10 @@ void rcu_read_unlock_special(struct task_struct *t) > > if (IS_ENABLED(CONFIG_RCU_BOOST)) { > > /* Snapshot ->boost_mtx ownership w/rnp->lock held. */ > > drop_boost_mutex = rt_mutex_owner(&rnp->boost_mtx) == t; > > +#ifdef CONFIG_RCU_BOOST > > if (&t->rcu_node_entry == rnp->boost_tasks) > > rnp->boost_tasks = np; > > +#endif > > } > > > > /* > > -- > > 2.7.4 > > > >