SMPing libpthread
David Xu
davidxu at freebsd.org
Sat Apr 26 05:24:37 PDT 2003
----- Original Message -----
From: "Daniel Eischen" <eischen at pcnet1.pcnet.com>
To: "David Xu" <davidxu at freebsd.org>
Cc: <freebsd-threads at freebsd.org>
Sent: Saturday, April 26, 2003 12:52 PM
Subject: Re: SMPing libpthread
> On Thu, 24 Apr 2003, David Xu wrote:
>
> > I have put a patch to enable userland support SMP scheduling.
> > http://people.freebsd.org/~davidxu/libpthread_smp.diff
> > The patch works on my SMP machine, but not fully tested,
> > and I will work on idle kses stuffs. At least, it seems
> > the SMP speed is not slower than UP. :-)
>
> David, I noticed that we hold the scheduling lock before and
> after calling the scheduler. Is this necessary? And if so,
> is it necessary to hold hold it after return from the
> scheduling switch? One you're in the scheduler, and choose
> another thread (releasing the lock after doing so), shouldn't
> you be able to switch to it without having the lock?
>
I am trying to do things in atomic way. because I found on SMP, thread
state is always out of synchronized in current code. I want to make
state change and context switch in an atomic operation, when thread is
in state transit, no other threads can use _thr_setrunnable_unlocked() etc
to change its state, this avoids lots of "thread already in priority queue"
messages, and if I test the "in priority queue" flag every where, I sometimes
lose chance to wakeup a thread because of some unknown races, whole
process just suddenly stops there.
I am just copying the idea from current kernel code, I don't intend to inventing
new things. :-)
One deadlock I found is in kse_sched_multi(), there is an optimization:
if (curthread == NULL)
; /* Nothing to do here. */
else if ((curthread->need_switchout == 0) &&
(curthread->blocked == 0) && (THR_IN_CRITICAL(curthread))) {
/*
* Resume the thread and tell it to yield when
* it leaves the critical region.
*/
These code cause deadlock, at least there is a deadlock between malloc/free and
static mutex initializing code, I think unless we believe that thread is locking a leaf
node, it is not safe to give cpu to the thread again. I suggest comment out these
optimization code.
I am still working on it, hope that I can post a patch soon.
A bad news is kernel seems too unstable when testing KSE program, it just silently
locks up, not panic, no dump, just locks up, this is newest kernel source code. :(
> --
> Dan Eischen
>
>
More information about the freebsd-threads
mailing list