Re: libpthread vs libthr.

From: Norikatsu Shigemura <nork_at_FreeBSD.org>
Date: Sat, 11 Nov 2006 23:53:32 +0900
On Sat, 11 Nov 2006 01:56:29 -0500
Kris Kennaway <kris_at_obsecurity.org> wrote:
> On Sat, Nov 11, 2006 at 02:20:44AM +0900, Norikatsu Shigemura wrote:
> > On Fri, 10 Nov 2006 17:12:47 +0200
> > Nikolay Pavlov <quetzal_at_zone3000.net> wrote:
> > > Hi. In this post i am not trying to raise a discussion about teoretical
> > > advantages of some special threading model, but still i would like to
> > > figure out why libthr in it current state is not our default posix 
> > > thread library and could it be so in time of 7-STABLE?
> > 	I don't agree.  Do test, run by again, do test.
> > 	I read a discussion about libpthread vs libthr, so I tested on
> > 	my environments(7-current SMP and 6-stable UP).  My result is
> > 	NOT YET, and I resurrected to libpthread environment.
> > 	1. libthr is not enough mature.
> > 	   At this time, libpthread's pthread API support > libthr's
> > 	   pthread API support.  So libthr lacks of compatibility with
> > 	   libpthread.  It is not good.
> Which applications does this effect?  I'm not aware of any (see
> below).
> > 	2. Not PTHREAD_CFLAGS/PTHREAD_LIBS clean
> > 	   At this time, tinderbox doesn't test PTHREAD_CFLAGS/
> > 	   PTHREAD_LIBS clean.  We have need to check PTHREAD_CFLAGS/
> > 	   PTHREAD_LIBS clean on all ports.
> The existence of libmap makes this objection irrelevant.  Also,
> sparc64 uses libthr by default and I'm not aware of any resulting port
> build problems.  So apparently any missing API features are not widely
> used, or are successfully worked around.  Can you provide evidence to
> the contrary?

	My case is gdm (x11/gdm).  gdm doesn't works by using libthr
	instead of libpthread (changing by libmap).  gdm couldn't
	resolve a symbol, sched_yield(2).  So X server didn't run.

	In this case, gdm tried to resolve a symbol,
	sched_yield_at_LIBTHREAD_1_0 instead of sched_yield.  So by changing
	libthr by libmap, gdm couldn't resolve a symbol, sched_yield(2).
	libthr doesn't have a sched_yield_at_LIBTHREAD_1_0, Yes, libc have
	a sched_yield, but sched_yield_at_LIBTHREAD_1_0.

	This problem can resolve by recompiling all applications by using
	libthr like PTHREAD_LIBS=-lthr, I believe.  And I don't have
	confidence about all applications conforming PTHREAD_LIB=-lthr.
	In sparc64 case, -pthread is libthr(by symlink), but in i386 and
	some other arch case, -pthread is libpthread.  So compiling
	condition is too different.

> > 	3. Is libthr environments useful?
> > 	   I don't think.  Yes, I think that some applications like mysql
> > 	   are useful.  However, in all FreeBSD environment system, by 1
> > 	   and 2, libthr is not useful.
> Maybe you don't care that libpthread's performance is terrible and
> e.g. this makes FreeBSD look bad on benchmarks, both published and
> when a user evaluates FreeBSD against other systems to decide whether
> or not to use it on their workloads - but surely most people do.

	I agree about a performance problem and libthr bringing
	performance UP.  But we cannot mix libpthread and libthr in a
	application (= a process).  One application use libthr, but one
	plugin called by it use libpthread.  it doesn't work:-(.  By
	using libthr, libthr brings performance UP but application is
	crashed, it is not good.

	Therefore, I like ru's suggestion (${MK_LIBPTHREAD}=="no" check).
	But it is not evidence of PTHREAD_CFLAGS/PTHREAD_LIBS clean.
Received on Sat Nov 11 2006 - 13:53:43 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:02 UTC