Experimental Pthread Work Queue Support for FreeBSD
Hi All, Just in time for the holidays I have created a couple of patches for FreeBSD-Current to add apple-like pthread workqueues. You can find the patches at: http://people.freebsd.org/~sson/thrworkq/ The first patch (kern_thrworkq_*.diff) adds the kernel support and thr_workq() system call. To compile it into the kernel "options THRWORKQ" needs to be added to the kernel config file. The second patch (pthread_workqueue_*.diff) is for the libthr code and adds the pthread_workqueue_*_np() functions. (See http://people.freebsd.org/~sson/thrworkq/pthread_workqueue.3.txt for the man page.) I have only done a limited amount of testing so I am sure there are bugs. Any questions, comments, bug reports, and/or patches are welcomed. Thanks, -stacey.
I think Robert Watson has already done this? My understanding is that 8-STABLE supports this. Am I wrong? Dave On Tue, Dec 15, 2009 at 8:09 AM, Stacey Son <sson@freebsd.org> wrote:
Hi All,
Just in time for the holidays I have created a couple of patches for FreeBSD-Current to add apple-like pthread workqueues. You can find the patches at:
http://people.freebsd.org/~sson/thrworkq/
The first patch (kern_thrworkq_*.diff) adds the kernel support and thr_workq() system call. To compile it into the kernel "options THRWORKQ" needs to be added to the kernel config file. The second patch (pthread_workqueue_*.diff) is for the libthr code and adds the pthread_workqueue_*_np() functions. (See http://people.freebsd.org/~sson/thrworkq/pthread_workqueue.3.txt for the man page.) I have only done a limited amount of testing so I am sure there are bugs. Any questions, comments, bug reports, and/or patches are welcomed.
Thanks,
-stacey. _______________________________________________ libdispatch-dev mailing list libdispatch-dev@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/libdispatch-dev
Hi, Robert was the one that asked me if I could look into this so hopefully he has not already done this... :) Currently the GCD port for FreeBSD uses the user-level thread worker code in libdispatch and not the pthread_workqueue_*_np() calls like darwin. The pthread work queue code below pretty much follows the same idea that darwin uses. It is a kernel assisted thread pool implementation. The kernel manages the creation and destruction of threads in the work pool based on if it sees lots of the worker threads blocking, being idle for a (relatively) long time, etc. I don't know if it performs any better than the user-level thread pool since I have not yet done any performance testing. Best Regards, -stacey. On Dec 15, 2009, at 1:26 PM, David Leimbach wrote:
I think Robert Watson has already done this?
My understanding is that 8-STABLE supports this.
Am I wrong?
Dave
On Tue, Dec 15, 2009 at 8:09 AM, Stacey Son <sson@freebsd.org> wrote: Hi All,
Just in time for the holidays I have created a couple of patches for FreeBSD-Current to add apple-like pthread workqueues. You can find the patches at:
http://people.freebsd.org/~sson/thrworkq/
The first patch (kern_thrworkq_*.diff) adds the kernel support and thr_workq() system call. To compile it into the kernel "options THRWORKQ" needs to be added to the kernel config file. The second patch (pthread_workqueue_*.diff) is for the libthr code and adds the pthread_workqueue_*_np() functions. (See http://people.freebsd.org/~sson/thrworkq/pthread_workqueue.3.txt for the man page.) I have only done a limited amount of testing so I am sure there are bugs. Any questions, comments, bug reports, and/or patches are welcomed.
Thanks,
-stacey. _______________________________________________ libdispatch-dev mailing list libdispatch-dev@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/libdispatch-dev
Hi, Thanks for clarifying! That's very exciting! I really like some things about libdispatch and am glad to see it being embraced for more than just Mac OS X. Dave On Tue, Dec 15, 2009 at 12:40 PM, Stacey Son <sson@freebsd.org> wrote:
Hi,
Robert was the one that asked me if I could look into this so hopefully he has not already done this... :)
Currently the GCD port for FreeBSD uses the user-level thread worker code in libdispatch and not the pthread_workqueue_*_np() calls like darwin. The pthread work queue code below pretty much follows the same idea that darwin uses. It is a kernel assisted thread pool implementation. The kernel manages the creation and destruction of threads in the work pool based on if it sees lots of the worker threads blocking, being idle for a (relatively) long time, etc. I don't know if it performs any better than the user-level thread pool since I have not yet done any performance testing.
Best Regards,
-stacey.
On Dec 15, 2009, at 1:26 PM, David Leimbach wrote:
I think Robert Watson has already done this?
My understanding is that 8-STABLE supports this.
Am I wrong?
Dave
On Tue, Dec 15, 2009 at 8:09 AM, Stacey Son <sson@freebsd.org> wrote:
Hi All,
Just in time for the holidays I have created a couple of patches for FreeBSD-Current to add apple-like pthread workqueues. You can find the patches at:
http://people.freebsd.org/~sson/thrworkq/
The first patch (kern_thrworkq_*.diff) adds the kernel support and thr_workq() system call. To compile it into the kernel "options THRWORKQ" needs to be added to the kernel config file. The second patch (pthread_workqueue_*.diff) is for the libthr code and adds the pthread_workqueue_*_np() functions. (See http://people.freebsd.org/~sson/thrworkq/pthread_workqueue.3.txt for the man page.) I have only done a limited amount of testing so I am sure there are bugs. Any questions, comments, bug reports, and/or patches are welcomed.
Thanks,
-stacey. _______________________________________________ libdispatch-dev mailing list libdispatch-dev@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/libdispatch-dev
On Tue, 15 Dec 2009, David Leimbach wrote:
Thanks for clarifying! That's very exciting! I really like some things about libdispatch and am glad to see it being embraced for more than just Mac OS X.
There appear to be lots of technical upsides to adopting this approach, but as the pthread work queue API is non-public in Mac OS X, we should think fairly hard about the forward API considerations. On the other hand, this is a great chance for Apple to get feedback on how well it works via second independent implementation :-). From chatting with Stacey offline, I know he's considered a number of variations on the Apple approach, so it inspires some amount of confidence that he's concluded the Apple one was the best one. I'm in the process of doing a bit of application work that will allow me to do some performance measurement on a popular threaded application. This will alow me to make some comparisons along a number of dimensions: FreeBSD<->Mac OS X, GCD<->pthread worker pool, and also now the internal GCD thread pool vs pthread work queue approaches. It will probably be a couple of weeks before I have anything to present, but will follow up to the list once there's something real to report. Robert N M Watson Computer Laboratory University of Cambridge
Dave
On Tue, Dec 15, 2009 at 12:40 PM, Stacey Son <sson@freebsd.org> wrote: Hi,
Robert was the one that asked me if I could look into this so hopefully he has not already done this... :)
Currently the GCD port for FreeBSD uses the user-level thread worker code in libdispatch and not the pthread_workqueue_*_np() calls like darwin. The pthread work queue code below pretty much follows the same idea that darwin uses. It is a kernel assisted thread pool implementation. The kernel manages the creation and destruction of threads in the work pool based on if it sees lots of the worker threads blocking, being idle for a (relatively) long time, etc. I don't know if it performs any better than the user-level thread pool since I have not yet done any performance testing.
Best Regards,
-stacey.
On Dec 15, 2009, at 1:26 PM, David Leimbach wrote:
I think Robert Watson has already done this? My understanding is that 8-STABLE supports this.
Am I wrong?
Dave
On Tue, Dec 15, 2009 at 8:09 AM, Stacey Son <sson@freebsd.org> wrote: Hi All,
Just in time for the holidays I have created a couple of patches for FreeBSD-Current to add apple-like pthread workqueues. You can find the patches at:
http://people.freebsd.org/~sson/thrworkq/
The first patch (kern_thrworkq_*.diff) adds the kernel support and thr_workq() system call. To compile it into the kernel "options THRWORKQ" needs to be added to the kernel config file. The second patch (pthread_workqueue_*.diff) is for the libthr code and adds the pthread_workqueue_*_np() functions. (See http://people.freebsd.org/~sson/thrworkq/pthread_workqueue.3.txt for the man page.) I have only done a limited amount of testing so I am sure there are bugs. Any questions, comments, bug reports, and/or patches are welcomed.
Thanks,
-stacey. _______________________________________________ libdispatch-dev mailing list libdispatch-dev@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/libdispatch-dev
participants (4)
-
David Leimbach
-
Robert Watson
-
Stacey Son
-
Stacey Son