From: "Paul E. McKenney" <paulmck@us.ibm.com>
To: Manfred Spraul <manfred@colorfullife.com>
Cc: dipankar@in.ibm.com, Oleg Nesterov <oleg@tv-sign.ru>,
linux-kernel@vger.kernel.org, Linus Torvalds <torvalds@osdl.org>,
Andrew Morton <akpm@osdl.org>,
vatsa@in.ibm.com
Subject: Re: [PATCH 4/5] rcu: join rcu_ctrlblk and rcu_state
Date: Tue, 10 Jan 2006 13:51:22 -0800 [thread overview]
Message-ID: <20060110215121.GH18252@us.ibm.com> (raw)
In-Reply-To: <43C41CC8.8000203@colorfullife.com>
On Tue, Jan 10, 2006 at 09:44:56PM +0100, Manfred Spraul wrote:
> [I haven't read the diff, just a short comment]
>
> Dipankar Sarma wrote:
>
> >rcu_state came over from Manfred's RCU_HUGE patch IIRC. I don't
> >think it is necessary to allocate rcu_state separately in the
> >current mainline RCU code. So, the patch looks OK to me, but
> >Manfred might see something that I am not seeing.
> >
> >
> >
> The two-level rcu code was never merged, I still plan to clean it up.
>
> But the idea of splitting the control block and the state is used in the
> current code:
> - __rcu_pending() is the hot path, it only performs a read access to
> rcu_ctrlblk.
> - write accesses to the rcu_ctrlblk are really rare, they only happen
> when a new batch is started. Especially: independant from the number of
> cpus.
>
> Write access to the rcu_state are common:
> - each cpu must write once in each cycle to update it's cpu mask.
> - The last cpu then completes the quiescent cycle.
>
> The idea is that rcu_state is more or less write-only and rcu_state is
> read-only. Theoretically, rcu_state could be shared in all cpus caches,
> and there will be only one invalidate when a new batch is started. Thus
> no cacheline trashing due to rcu_pending calls.
> I think it would be safer to keep the two state counters in a separate
> cacheline from the spinlock and the cpu mask, but I don't have any hard
> numbers. IIRC the problems with the large SGI systems disappered, and
> everyone was happy. No real benchmark comparisons were made.
Good point!
But doesn't the ____cacheline_maxaligned_in_smp directive on the "lock"
field take care of this? Here is the structure:
/* Global control variables for rcupdate callback mechanism. */
struct rcu_ctrlblk {
long cur; /* Current batch number. */
long completed; /* Number of the last completed batch */
int next_pending; /* Is the next batch already waiting? */
spinlock_t lock ____cacheline_internodealigned_in_smp;
cpumask_t cpumask; /* CPUs that need to switch in order */
/* for current batch to proceed. */
} ____cacheline_internodealigned_in_smp;
If this does not cover this case, what more is needed?
Thanx, Paul
prev parent reply other threads:[~2006-01-10 21:51 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-01-08 19:19 [PATCH 4/5] rcu: join rcu_ctrlblk and rcu_state Oleg Nesterov
2006-01-10 0:28 ` Paul E. McKenney
2006-01-10 0:43 ` Linus Torvalds
2006-01-10 2:54 ` Paul E. McKenney
2006-01-10 10:02 ` Srivatsa Vaddagiri
2006-01-10 18:09 ` Dipankar Sarma
2006-01-10 20:44 ` Manfred Spraul
2006-01-10 21:51 ` Paul E. McKenney [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20060110215121.GH18252@us.ibm.com \
--to=paulmck@us.ibm.com \
--cc=akpm@osdl.org \
--cc=dipankar@in.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=manfred@colorfullife.com \
--cc=oleg@tv-sign.ru \
--cc=torvalds@osdl.org \
--cc=vatsa@in.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.