Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 2 Nov 1999 20:26:18 -0800 (PST)
From:      Julian Elischer <julian@whistle.com>
To:        "Daniel M. Eischen" <eischen@vigrid.com>
Cc:        Nate Williams <nate@mt.sri.com>, freebsd-arch@freebsd.org
Subject:   Re: Threads models and FreeBSD. (Next Step)
Message-ID:  <Pine.BSF.4.10.9911022007450.3260-100000@current1.whistle.com>
In-Reply-To: <381F85F2.BF6D5A2@vigrid.com>

next in thread | previous in thread | raw e-mail | index | archive | help

I don't know about the rest of you but I'm busy reading :-)

this thread is NOT dead ... :-)
 (just in case anyone thought that..)


julian

On Tue, 2 Nov 1999, Daniel M. Eischen wrote:

> Nate Williams wrote:
> > 
> > [ My assertion that Scheduler Activations isn't a good solution for
> > heavy I/O applications ]
> > 
> > > > What am I missing?  Is it just a fact that there is no good threading
> > > > solution for this kind of application?  Solaris seems to do a pretty
> > > > good job of optimizing this case, although it may be that we have
> > > > nothing better to compare it to simply because no one has implemented a
> > > > robust enough implementation on any other OS/hardware platform?
> > >
> > > It could also take many kernel wakeups for a heavy I/O bound thread to
> > > leave the kernel.  I thought of this ;-).
> > >
> > > This is how binding a thread to a LWP can be useful.
> > 
> > [ I'm assuming that LWP == kernel thread ]
> > 
> > Then we're no longer using SA, and we're more like the Solaris model, as
> > I understand it.  At this point, you'd have *LOTS* more threads than
> > available processors, because it is expected to have lots of LWP's
> > blocked in the kernel.
> 
> The application decides what threads are bound to kernel threads.  It
> can bind as many threads as it wants (within process limits) to kernel
> threads.  It need not bind them all unless it wants to.
> 
> > 
> > > For a thread bound to a LWP, you only notify the user level threads
> > > library if it blocks because it's time quantum expired (so the threads
> > > library can see if it is in a critical region).
> > 
> > They talk about this in the paper, and I don't like their solution.
> > Having to modify the compiler/assembler and such is not a workable
> > solution, IMO.
> 
> No, I didn't either, but you can still get the same thing by manually
> coding each routine.  You could also set flags instead with not too
> much more overhead.
> 
> > > If the thread blocks due to a tsleep or something like
> > > that, you can assume it's not holding any critical resources that the user
> > > threads library implementation needs.  In this case, you don't notify the
> > > threads library.
> > 
> > Maybe, maybe not.  It still might be holding onto a critical resource
> > that it obtained while in userland.
> 
> This is really only a concern in the threads library implementation
> where you are using internal resources such as spinlocks or mutexes
> to protect scheduling queues, file descriptor lock tables, etc.  The
> threads library would be coded to prevent calling blocking system calls
> while holding such resources.
> 
> All other (visible) resources are the responsibility of the application.
> 
> > The idea of being 'too flexible' scares me.  Writing correct threaded
> > code is hard, when you start throwing in the complexity of determining
> > thread scheduler models, types of threads to create, etc..., and all of
> > a sudden multi-process solutions start to look pretty good.
> 
> Well, stick with what you know then ;-)  And also make sure whatever
> we do gets sufficiently documented!
> 
> > My reason for writing multi-threaded code is more often ease of
> > implementation and maintainability.  When something is easier to
> > implement, it also tends to be more effecient, since you can spend more
> > time 'optimizing' it, instead of spending all of your time making it
> > correct.
> > 
> > But, that's a personal soapbox, and may not be appropriate for
> > FreeBSD....
> 
> :-)
> 
> Dan Eischen
> eischen@vigrid.com
> 





To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.10.9911022007450.3260-100000>