[M3devel] [M3commit] how to switch userthreads on/off

Tony Hosking hosking at cs.purdue.edu
Wed Apr 29 20:34:07 CEST 2009


There is no lock in the fast path for traced allocation.  GC has some  
locking that I am working on improving/eliminating.  Watch this space.

On 29 Apr 2009, at 16:22, Mika Nystrom wrote:

> Jay writes:
> ...
>>
>> Maybe just leave it as an option in m3core's m3makefile and people  
>> can twiddle it if they want and rebuild the entire system like it  
>> is today?
>> That is a bit onerous, but maybe it's all userthreads deserve?
>> ?
>>
>>
>> Anyone who actually wanted to switch back and forth (Mika) would  
>> just have two installs and two source trees?
>>
>>
>> - Jay
>
> I just want to clarify.  I'm not really that interested in switching
> back and forth.  I'm just a little disturbed by the sometimes huge
> performance loss due to the introduction of kernel threads.  I knew
> that this would happen in certain highly multithreaded applications,
> but I'm surprised it happens in a more or less single-threaded
> application.
>
> I think I've just been spoiled by 10 years of using SRCM3 and PM3
> for FreeBSD w/o kernel threads in the sense that I've learned that
> using LOCK has essentially no cost.  On a shared-memory  
> multiprocessor,
> I really don't expect that to remain the case... physics won't allow
> it.  So now I just have to go through my code and find all the places
> where I lock too much and remove them.
>
> But the memory allocator and garbage collector do it too, no?
>
> I also think that this idea of being able to use either is great.
> Mainly single-threaded programs should definitely not use kernel
> threads!
>
> As for reaching the "thread locals", there is one slightly crazy
> idea that one could borrow from Sussman and Steele: add another
> implicit argument to every Modula-3 routine.  In that argument,
> pass a pointer to the thread locals.  For EXTERNAL calls (in or
> out), make it NIL (somehow, maybe involving pragmas), and in that
> case (only), use the pthreads routines to access the thread locals.
> Ok so it sounds kind of nuts, but with this approach you could avoid
> locking or even calling into the pthreads libs almost entirely for
> a single-threaded program.  You could even have a thread-local
> memory allocator that would only lock when it needs to request
> memory from the "global allocator"...   in fact there are lots of
> things you can do with this sort of thing.  Dynamically scoped
> variables in Scheme (a la MacLisp?) is what they originally proposed
> it for but then they suggested all kinds of tricks related to
> continuations with it.
>
>    Mika




More information about the M3devel mailing list