[M3devel] ease of switching between pthreads and userthreads?
Tony Hosking
hosking at cs.purdue.edu
Wed Apr 27 17:20:15 CEST 2011
On Apr 27, 2011, at 3:05 AM, Jay K wrote:
> About inlining LOCK I was more echoing your past sentiment
> than giving my own, and I provided a mitigation:
> a) specifically the suggestion that the switchability be an option;
> it'd probably be on by default but people that want to squeeze
> out the extra performance could enable the inlining
> and lose the switchability
It is expected that LOCK will be implemented using CAS (and equivalents) in the very near future. I have a student working on it. This will be incompatible with the current user-threads implementation of LOCK. It will be too painful to support both using a compiler switch.
> About the need to link to pthread.
> Good point. I hadn't thought of that.
> BUT two points in possible rebuttal (not that is necessary
> an argument! more like a conversation)
> I'm sure that on some platforms there is no distinction.
> No separate broken libc.so and working libpthread.so.
> But yes, I realize the recent talk was about Linux, apparently it is broken.
> Solaris is probably better.
> Others I don't know, I'd have to check.
>
>
> Specifically, there should not be two separate fork implementations.
> Or two separate malloc implementations.
>
>
> The one and only fork must know about pthread_atfork.
> The one and only malloc must be thread safe, with respect to pthreads.
> (but not necessarily Modula-3 user-threads, that is our own problem).
>
>
> If that means fork and pthread_atfork have to be in the same .so,
> and/or that malloc and pthread_* have to be in the same .so, both
> of which are easy to believe are true, so be it.
>
>
> I shouldn't get one malloc via cc foo.c and a different
> one via cc foo.c -lpthread.
> The rare single-threaded process isn't worth optimizing.
> Isn't worth the headache.
>
>
> As well, though..and this isn't trivial, but I wonder if we should
> dispense with "static dynamic" linking, where we just call fork, malloc, etc.,
> but instead use "dynamic dynamic" ie. using dlopen/dlsym aggressively.
> That might address some of this libc vs. libpthread problem?
> But then the ABI rather than the source interface becomes needed to be known.
> Possibly a problem..or possibly it is easy and direct with nothing tricky in most of the headers...?
>
>
> Hm. No. Nevermind.
> What is the problem again with using -pthread on Linux with user threads?
> So, maybe it pulls in an extra .so and has some small startup cost.
> Surely it should work?
> I'll have to dig in to the email and reproduce the bug.
> I'm of a mind now to remove the recent pthread_atfork stuff.
> But first I or someone has to understand the problem I was solving.
> Right now, I don't.
>
>
> The LOCK inlining problem seems very hypothetical right now.
> We don't have such a feature. Will we really ever?
>
>
> Is pthread_lockmutex partially inlined in C?
> Or have pthreads generally been implemented well enough that everyone is satisfied
> with no inlining?
>
>
> Or does Modula-3 sort of promote threads as lighter weight than they are
> in typical practise? And ditto for locking?
>
>
> You know, 15+ years ago when Modula-3, Win32, I suspect Solaris,
> I suspect all the commercial Unices, had already presented and reasonably
> implemented the ideal threading interface, but all the free Unices were still
> holding out and either not providing pthreads or not providing them well..
> at the time Modula-3 was slightly ahead of its time, and one could imagine
> not using the underlying platform directly because it was too slow
> or not full featured enough. But hasn't everything just about caught up by
> now (except OpenBSD with its user pthreads...)
> (Yeah...15 years ago, Solaris was probably still a bit wonky..more like 6
> years ago circa Solaris 2.10 was pretty modern..)
>
>
> That is -- are pthreads really worth us optimizing beyond?
> Don't all the C and C++ programmers and systems providers get it by now
> and have provided almost exactly what we need?
>
>
> Sorry, I'm rambling...
>
>
> Later,
> - Jay
>
>
> > From: hosking at cs.purdue.edu
> > Date: Sat, 23 Apr 2011 15:06:22 -0400
> > To: jay.krell at cornell.edu
> > CC: m3devel at elegosoft.com
> > Subject: Re: [M3devel] ease of switching between pthreads and userthreads?
> >
> > Good point about lock. I really think this is the showstopper because compiled code will be fo a particular threading model.
> >
> > Sent from my iPhone
> >
> > On Apr 23, 2011, at 6:19 AM, Jay K <jay.krell at cornell.edu> wrote:
> >
> > > I've asked before. I'm asking again.
> > >
> > >
> > > I'd like to be able to switch between userthreads and pthreads via a command line switch to the executable.
> > > @M3pthreads @M3userthreads
> > > or somesuch.
> > >
> > >
> > > I'd also like to be able to switch the default via a line in a m3makefile that builds a program.
> > >
> > >
> > > I know roughly what implementing this would look like.
> > >
> > >
> > > I am a bit confused as to what problems -pthread/-pthreads/-lpthread causes.
> > > I'll have to reread.
> > > Whatever problem it has, this change probably would too.
> > >
> > >
> > > I'm willing to implement this myself.
> > > I'm not asking for anyone else to do it.
> > >
> > >
> > > I understand it makes LOCK harder to efficiently inline.
> > > If/when LOCK becomes partly inlined, provide a switch?
> > >
> > >
> > > Thank you,
> > > - Jay
> > >
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://m3lists.elegosoft.com/pipermail/m3devel/attachments/20110427/d4f20090/attachment-0002.html>
More information about the M3devel
mailing list