Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 27 Oct 2006 12:34:26 -0700
From:      Julian Elischer <julian@elischer.org>
To:        Ruslan Ermilov <ru@freebsd.org>
Cc:        freebsd-current@freebsd.org, Ivan Voras <ivoras@fer.hr>
Subject:   Re: KSE, libpthread & libthr: almost newbie question
Message-ID:  <45425F42.1070909@elischer.org>
In-Reply-To: <20061027094922.GC6613@rambler-co.ru>
References:  <917908193.20061027102647@serebryakov.spb.ru>	<ehshjl$dsp$1@sea.gmane.org> <20061027094922.GC6613@rambler-co.ru>

next in thread | previous in thread | raw e-mail | index | archive | help
Ruslan Ermilov wrote:
> On Fri, Oct 27, 2006 at 10:56:21AM +0200, Ivan Voras wrote:
>> Lev Serebryakov wrote:
>>> Hello ,
>>>
>>>   I've was sure, that both libpthread and libthr use KSE to make 
>>>   multithreading. They use KSE in different ways: libpthread uses N:M 
>>>   model and libthr uses 1:1 model, but bot use KSE to work.
>>>   How will be possible to use these libraries (read: multithreaded 
>>>   programs) when KSE will be optional, on kernel without KSE?!
>> Yes, isn't KSE by definition "that thing that is scheduled in the kernel"?
>>
> KSE == N:M threading
> 
> A 1:1 threading (libthr) is much simpler than N:M threading (libpthread),
> and thus doesn't require KSE support in the kernel; see kse(2) manpage
> for details.  Without the KSE option in the kernel, all kse(2) syscalls
> will return EOPNOTSUPP, and a lot of code becomes redundant.


KSE is a misnomer that I abandoned long ago..
mostly it is the thread fairness code that is independent of what 
threading library is running (see the other email I just sent)
(or should be)

> 
> : /*
> :  * Initialize global thread allocation resources.
> :  */
> : void
> : threadinit(void)
> : {
> : 
> :         mtx_init(&tid_lock, "TID lock", NULL, MTX_DEF);
> :         tid_unrhdr = new_unrhdr(PID_MAX + 1, INT_MAX, &tid_lock);
> : 
> :         thread_zone = uma_zcreate("THREAD", sched_sizeof_thread(),
> :             thread_ctor, thread_dtor, thread_init, thread_fini,
> :             UMA_ALIGN_CACHE, 0);
> : #ifdef KSE
> :         ksegrp_zone = uma_zcreate("KSEGRP", sched_sizeof_ksegrp(),
> :             ksegrp_ctor, NULL, NULL, NULL,
> :             UMA_ALIGN_CACHE, 0);
> :         kseinit();      /* set up kse specific stuff  e.g. upcall zone*/
> : #endif


The KSEGRP is a part of the fairness code in general and independent
of M:N and 1:1

> : }
> 
> 
> Cheers,



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?45425F42.1070909>