Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

RCU for preemptive user threads

16 views
Skip to first unread message

Joe Seigh

unread,
Apr 7, 2004, 3:47:32 PM4/7/04
to
This is just a short description of a mechanism for implementing RCU for
preemptive user threads.

The current mechanisms that I am aware of are, one, disabling interrupts for
the RCU read interval. Would likely require a syscall for privilege escalation
and probably obviate an performance advantage of using RCU. The second is
distinguishing between voluntary and non-voluntary pre-emption and only
counting the former as RCU quiesce points. This can arbitrarily draw out the
length of time for reclaiming objects with RCU.

Basically, the technique is just a exception like mechanism that restarts the
RCU read interval if a preemption occurs. So the RCU read interval will not
have a quiesce point in the middle of it. This will impose some restriction to
the use of RCU that you would not encounter in the kernel. The RCU read
interval has to be retryable. Making it strictly read-only helps. Some of the
tricks with interlocked instructions won't work (unless you get more trickier).
Note, a deliberate (voluntary) pre-emption in an RCU read interval will result
in an interval that "loops" forever. Most people won't do that more than once.

I'm not going to go into a lot of detail on what or how the restart mechanism
should work. It would be nice if it was implemented in hardware (i.e. allowing
user override of instruction pointer value on interrupt).

In software, you'd probably want to do it in memory rather than via syscall.
If you do it right you shouldn't affect the dispatcher’s fast path so there will
not be any performance hit there. Linux kernel developers are clever. They
can probably figure it out without too much hinting from me.

Joe Seigh

0 new messages