From: "Paul E. McKenney" <paulmck@linux.ibm.com>
To: Joel Fernandes <joel@joelfernandes.org>
Cc: Oleg Nesterov <oleg@redhat.com>,
Eric Dumazet <edumazet@google.com>, rcu <rcu@vger.kernel.org>
Subject: Re: Question about cacheline bounching with percpu-rwsem and rcu-sync
Date: Fri, 31 May 2019 06:50:51 -0700 [thread overview]
Message-ID: <20190531135051.GL28207@linux.ibm.com> (raw)
In-Reply-To: <CAEXW_YTzUsT8xCD=vkSR=mT+L7ot7tCESTWYVqNt_3SQeVDUEA@mail.gmail.com>
On Fri, May 31, 2019 at 09:10:16AM -0400, Joel Fernandes wrote:
> Hi,
> As per the documentation for rationale of percpu-rwsem, the Documentation says:
>
> The problem with traditional read-write semaphores is that when multiple
> cores take the lock for reading, the cache line containing the semaphore
> is bouncing between L1 caches of the cores, causing performance
> degradation.
>
> However, it appears to me that the struct percpu_rwsem "rss" element
> which is used by the RCU-sync is not a per-cpu element. So even in the
> fastpath case (only readers and no writers), the cacheline containing
> rss is shared and will bounce by multiple CPUs. For that matter, even
> the cacheline containing the percpu_rw_semaphore itself will be bounce
> among multiple reader CPUs.
>
> So how does percpu-rwsem eliminate cache line bouncing in the common
> case. Could you let me know what I am missing?
>
> Thanks a lot.
The accesses are loads, except for the __this_cpu_inc(), which updates
a per-CPU variable. The locations loaded will replicate across the
CPUs' caches and the per-CPU variables are private to each CPU. Hence
no cacheline bouncing.
Or am I missing the point of your question?
Either way, it would be good for you to just try it. Create a kernel
module or similar than hammers on percpu_down_read() and percpu_up_read(),
and empirically check the scalability on a largish system. Then compare
this to down_read() and up_read()
Thanx, Paul
next prev parent reply other threads:[~2019-05-31 13:52 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-31 13:10 Question about cacheline bounching with percpu-rwsem and rcu-sync Joel Fernandes
2019-05-31 13:45 ` Oleg Nesterov
2019-05-31 14:42 ` Joel Fernandes
2019-05-31 13:50 ` Paul E. McKenney [this message]
2019-05-31 14:43 ` Joel Fernandes
2019-06-09 0:24 ` Joel Fernandes
2019-06-09 12:22 ` Paul E. McKenney
2019-06-09 21:25 ` Joel Fernandes
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=20190531135051.GL28207@linux.ibm.com \
--to=paulmck@linux.ibm.com \
--cc=edumazet@google.com \
--cc=joel@joelfernandes.org \
--cc=oleg@redhat.com \
--cc=rcu@vger.kernel.org \
/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.