[ltt-dev] [RFC PATCH 0/7] priority-boost urcu

Paolo Bonzini pbonzini at redhat.com
Wed Aug 17 04:46:35 EDT 2011


On 08/16/2011 12:58 AM, Lai Jiangshan wrote:
> These series patches implelent a priority-boost urcu
> based on pi-lock.
>
> Some other locks(especial rcu_gp_lock) should be also
> priority-aware, these patches did touch them and make
> the patchset simpler.

While really cool, I found this patchset overly complex.

What we should introduce is abstractions over futexes.  This is what I 
did to experimentally port URCU to QEMU---my secret goal since commit 
806f811 (use kernel style makefile output, 2010-03-01). :)  Our use of 
futexes is exceptionally similar to a Windows manual-reset event (yes, 
Windows: 
http://msdn.microsoft.com/en-us/library/system.threading.manualresetevent%28v=vs.80%29.aspx). 
  In QEMU I added the manual-reset event and use it in the 
implementation of RCU.

By introducing an abstraction for this, we can make the code a lot 
clearer and secondarily gain in portability.  For QEMU portability was 
actually my primary goal, but URCU might have different priorities. :)

PI futex support can also be implemented in the same framework.

By the way, it is my impression that MB (perhaps MEMBARRIER too?) is way 
way more similar to QSBR than to SIGNAL:

    MB rcu_read_unlock = QSBR rcu_thread_offline + nesting count
    MB rcu_read_lock   = QSBR rcu_thread_online + nesting count

Perhaps moving around code could make the code simpler?  Following the 
master/slave memory barrier functions is quite hard, and this is 
complicated by the KICK_READER_LOOPS that (if I understand correctly) 
makes little sense for non-SIGNAL models.

Paolo




More information about the lttng-dev mailing list