<div dir="ltr">liburcu is licensed under LGPLv2.1, and can be used by any software compatible with LGPL. IBM, the owners of the patent, provided their approval for this licensing [1]. We are good with regards to this.<div><br></div><div>The liburcu homepage mentions that it has been tested on Linux and FreeBSD, but it should work on NetBSD as well. NetBSD has actively maintained package of liburcu [3] required by KnotDNS (another project which uses liburcu), so I&#39;m assuming there aren&#39;t any problems there as well. We will test our changes on these three platforms to guarantee that it indeed works. </div><div class="gmail_extra"><br></div><div class="gmail_extra">We&#39;ve been referring to the PhD dissertation on RCU by Paul McKenney [4] for help with implementation. Sections 5 and 6 of the dissertation discuss RCU design patterns and examples of conversion to non-RCU code to RCU. This has been a good reference for us so far.</div><div class="gmail_extra"><br></div><div class="gmail_extra">~kaushal</div><div class="gmail_extra"><br></div><div class="gmail_extra">[1]: <a href="https://github.com/urcu/userspace-rcu/blob/master/lgpl-relicensing.txt">https://github.com/urcu/userspace-rcu/blob/master/lgpl-relicensing.txt</a></div><div class="gmail_extra">[2]: <a href="http://urcu.so/">http://urcu.so/</a> Under &#39;Architectures supported&#39;</div><div class="gmail_extra">[3]: <a href="http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/devel/userspace-rcu/">http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/devel/userspace-rcu/</a></div><div class="gmail_extra">[4]: <a href="http://www.rdrop.com/~paulmck/RCU/RCUdissertation.2004.07.14e1.pdf">http://www.rdrop.com/~paulmck/RCU/RCUdissertation.2004.07.14e1.pdf</a></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Feb 3, 2015 at 10:24 AM, Anand Avati <span dir="ltr">&lt;<a href="mailto:avati@gluster.org" target="_blank">avati@gluster.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><p dir="ltr">Apologies for the top post.</p>
<p dir="ltr">Adopting RCU is a good step. Some questions and thoughts -</p>
<p dir="ltr">Does urcu work on non Linux systems, netbsd? IIRC there were Linux specific permissions on the rcu patent? Maybe only for the kernel? Would be good to confirm.</p>
<p dir="ltr">Glusterd is a good place for the first prototype adoption of rcu, esp figuring out the nuances of liburcu (in my view). The perfect use case for liburcu is still brewing in the form of epoll multithreading. That patch creates the perfect conditions on the server side with many threads servicing many clients bouncing the cacheline on so many shared objects and locks - where rcu comes to the rescue. Starting with the events.c shared FD registry, client_t registry, call-pool registry, inode table, each of these are candidates which ask for rcu conversion. The unfortunate part is that cacheline bouncing fixes are all or nothing. As long as there is at least one shared lock in the hot path, the hard work gone into all the previous shared lock fixes remain latent. However the end result is well worth all the efforts.</p>
<p dir="ltr">Thanks</p><div><div class="h5">
<p dir="ltr"></p>
<p dir="ltr">On Thu, Jan 29, 2015, 03:35 Kaushal M &lt;<a href="mailto:kshlmster@gmail.com" target="_blank">kshlmster@gmail.com</a>&gt; wrote:</p>
<blockquote><p dir="ltr">Hi all,</p>
<p dir="ltr">I had started a thread previously on the efforts we are undertaking to improve thread synchronization in GlusterD [1]. I had mentioned that we will be using RCU for synchronization and the userspace RCU library (liburcu) [2] for implementation.<br></p>
<p dir="ltr">I am now in a almost in a position to submit changes to Gerrit for review. But, I have an obstacle of making liburcu available on the jenkins slaves.<br></p>
<p dir="ltr">I have begun development using the 0.8.6 version of liburcu, which is the latest stable release. EPEL has liburcu packages for CentOS 6 and 7, but they are the of the older 0.7.* versions. Fedora has packages more recent packages, but they are still older, 0.8.1. [3].<br></p>
<p dir="ltr">Considering the above situation with binary packages, I&#39;m considering adding liburcu into the GlusterFS tree as a part of /contrib. This will be similar in vein to the argp-standalone library.<br></p>
<p dir="ltr">liburcu is licensed under LGPL-v2.1, so I don&#39;t think there is going to be any problem including it. But IANAL, so I would like to know of if this would if this is okay from a legal perspective.<br></p>
<p dir="ltr">I&#39;ll add the liburcu source to our tree and push the change for review. I&#39;m not really familiar with autotools, so I&#39;ll need some help integrating it into our build system. I&#39;ll update the list when I have pushed the change for review.<br></p>
<p dir="ltr">In the meantime, I&#39;d like to know if anyone has any objections to this plan. And also want to know of any alternative approaches.<br>
</p>
</blockquote>
</div></div><blockquote><div><div class="h5"><p dir="ltr"></p>
<p dir="ltr">~kaushal<br></p>
<p dir="ltr">[1]: <a href="http://www.gluster.org/pipermail/gluster-devel/2014-December/043382.html" target="_blank">http://</a><a href="http://www.gluster.org/pipermail/gluster-devel/2014-December/043382.html" target="_blank">www.gluster.org</a><a href="http://www.gluster.org/pipermail/gluster-devel/2014-December/043382.html" target="_blank">/</a><a href="http://www.gluster.org/pipermail/gluster-devel/2014-December/043382.html" target="_blank">pipermail</a><a href="http://www.gluster.org/pipermail/gluster-devel/2014-December/043382.html" target="_blank">/</a><a href="http://www.gluster.org/pipermail/gluster-devel/2014-December/043382.html" target="_blank">gluster-devel</a><a href="http://www.gluster.org/pipermail/gluster-devel/2014-December/043382.html" target="_blank">/2014-December/043382.html</a></p>
<p dir="ltr">[2]: <a href="http://urcu.so/" target="_blank">http://</a><a href="http://urcu.so/" target="_blank">urcu.so</a><a href="http://urcu.so/" target="_blank">/</a></p>
<p dir="ltr">[3]: <a href="https://apps.fedoraproject.org/packages/userspace-rcu" target="_blank">https</a><a href="https://apps.fedoraproject.org/packages/userspace-rcu" target="_blank">://</a><a href="https://apps.fedoraproject.org/packages/userspace-rcu" target="_blank">apps.fedoraproject.org</a><a href="https://apps.fedoraproject.org/packages/userspace-rcu" target="_blank">/packages/</a><a href="https://apps.fedoraproject.org/packages/userspace-rcu" target="_blank">userspace-rcu</a></p>
</div></div><p dir="ltr">_______________________________________________<span class=""><br>
Gluster-devel mailing list<br>
<a href="mailto:Gluster-devel@gluster.org" target="_blank">Gluster-devel@gluster.org</a><br>
<a href="http://www.gluster.org/mailman/listinfo/gluster-devel" target="_blank">http://</a><a href="http://www.gluster.org/mailman/listinfo/gluster-devel" target="_blank">www.gluster.org</a><a href="http://www.gluster.org/mailman/listinfo/gluster-devel" target="_blank">/mailman/</a><a href="http://www.gluster.org/mailman/listinfo/gluster-devel" target="_blank">listinfo</a><a href="http://www.gluster.org/mailman/listinfo/gluster-devel" target="_blank">/</a><a href="http://www.gluster.org/mailman/listinfo/gluster-devel" target="_blank">gluster-devel</a><br>
</span></p>
</blockquote>
<p dir="ltr"><br>
</p>
</blockquote></div><br></div></div>