[lttng-dev] Quick questions about liburcu and RCU in general
Mathieu Desnoyers
mathieu.desnoyers at efficios.com
Tue May 7 11:07:28 EDT 2013
* Richard Braun (rbraun at sceen.net) wrote:
> On Tue, May 07, 2013 at 07:59:14AM -0400, Mathieu Desnoyers wrote:
> > > 1/ Why use poll instead of sched_yield in e.g. force_mb_all_readers ?
> > > (I guess it's about portability and the effect is expected to be the same,
> > > but is there another reason ?)
> >
> > poll() allow us to do a millisecond-level wait (timer-based).
> > sched_yield() is pretty much a scheduler hack that just says "be nice to
> > other scheduled processes here". Quoting sched_yield(2):
> >
> > If the calling thread is the only thread in the highest priority list
> > at that time, it will continue to run after a call to sched_yield().
> >
> > This is a kind of behavior we don't want.
>
> Right, I see. But then, poll enforces a minimum delay whatever happens
> (which may be increased up to the scheduler time slice depending on the
> kernel). I guess this isn't something we want either.
>
> On the other hand, AIUI, poll is called only after all signals were
> already sent, and if a receiving thread didn't update its need_mb yet,
> so I expect it's a rare worst case that doesn't require more care.
Indeed, that would be a rare worst case. Moreover, if we really care
about this code path execution time, we might want to consider using the
wait/wakeup scheme based on sys_futex used elsewhere in the urcu
implementation.
Thanks,
Mathieu
--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
More information about the lttng-dev
mailing list