[lttng-dev] RCU Question
Mathieu Desnoyers
mathieu.desnoyers at efficios.com
Mon May 2 20:53:00 UTC 2016
----- On Apr 29, 2016, at 3:10 PM, siddharth teotia <siddharthteotia at gmail.com> wrote:
> The mail was accidentally sent. Here is more info:
> My question really is that when writing a user space application that leverages
> RCU, how do I ensure that I am using the proper flavor/implementation of RCU ?
> I don't think so I can go ahead with non-preemptive RCU. And the user space
> paper does not really tell or distinguish clearly as to which of the following
> -- QSBR, MB, BP, signal can be used for preemptive environments and do not
> restrict the reader to not block or not sleep ?
Hi,
You appear to be confused between concepts that apply to the Linux kernel
RCU implementation (preemptible vs non-preemptive RCU read-side critical
sections) and those that apply to the Userspace RCU library (flavors: mb, signal,
qsbr, bp).
All Userspace RCU flavors read-side critical sections are preemptible,
because we cannot disable preemption when running in user-space.
Therefore, you may block or sleep within liburcu read-side critical
sections. However, if you do so, you need to be careful not to place
calls to synchronize_rcu() within code that have a transitive blocking
dependency on a RCU read-side, which would cause a deadlock.
For instance, using the same mutex within a read-side critical section,
_and_ holding this mutex while calling synchronize_rcu() in another thread,
can trigger a deadlock.
The main differences between liburcu flavors is detailed here:
https://lwn.net/Articles/573424/#URCU%20Flavors
Thanks,
Mathieu
> Thanks,
> Siddharth
> On Fri, Apr 29, 2016 at 12:07 PM, siddharth teotia < siddharthteotia at gmail.com >
> wrote:
>> Hi Guys,
>> I recently started exploring RCU to build a lock free hash table. I have read
>> quite a bit of literature from LWN on RCU, its usage, API etc. I have the
>> following question for which I have had mixed answers online:
>> Does the user space implementation of RCU liburcu take care of preemptive v/s
>> non-preemptive flavors of RCU. From what I understand RCU can be broadly
>> divided into:
>> 1. Classic RCU - High Performance but suitable for non-preemptive environments.
>> 2. Preemptible RCU - Permits the reader to block on a resource or the read side
>> critical sections to be preempted. But still does not allow any kind of
>> sleep(). Moreover there seems to be some sort of limitation on the nature of
>> blocking that can happen within RCU read side critical section.
>> 3. Sleepable RCU - Seems to me an augmentation of preemptible RCU.
>> The paper that describes the user space implementation of RCU suggests 4
>> different flavors -- QSBR, Memory Barrier based, Bullet Proof, and Signal
>> based.
>> I don't think so in my application I can afford to not have the readers block or
>> even sleep. If the reader wants to take some orthogonal lock/latch on an
>> entirely different resource, it might end waiting for it.
>> And because
> --
> Best Regards,
> SIDDHARTH TEOTIA
> 2008C6PS540G
> BITS PILANI- GOA CAMPUS
> +91 87911 75932
> _______________________________________________
> lttng-dev mailing list
> lttng-dev at lists.lttng.org
> https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.lttng.org/pipermail/lttng-dev/attachments/20160502/0d7de0d4/attachment.html>
More information about the lttng-dev
mailing list