Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Thu, 4 Feb 2016 14:24:03 -0500
From: Rich Felker <dalias@...c.org>
To: musl@...ts.openwall.com
Subject: Re: setcontext/getcontext/makecontext missing?

On Thu, Feb 04, 2016 at 05:22:47PM +0100, u-uy74@...ey.se wrote:
> On Thu, Feb 04, 2016 at 10:41:38AM -0500, Rich Felker wrote:
> > There's been some interest in adding them and they were on a long-term
> > goal list, but I'm not sure it makes sense anymore. All the major
> > users of this API have been moving _off_ of it, because it's
> > deprecated and impossible to use correctly - see the rationale here:
> > 
> > http://pubs.opengroup.org/onlinepubs/009695399/functions/makecontext.html
> 
> Just for the record, nevertheless it is a pity to lose them.
> 
> In my experience the ucontext-based implementation of user-space threads
> suits/works best for Coda file system, even though Coda can use an
> alternative pthread-based implementation of the needed threading layer.
> 
> Pthreads feels like an overkill, hardly efficient when all one needs
> is cooperative threading designed from the beginning to fit in one
> process.

In theory, userspace context switching could possibly be slightly
faster than threads. However the ucontext API saves/restores the
signal mask as part of context switching, which inherently requires a
syscall. (There are possibly ways we could cache the most-recently-set
signal mask in TLS and avoid redundant setting, but no existing libcs
do this, and it sounds mildly difficult/error-prone.) Thus the
comparison is not between pure-userspace switching and having the
kernel involved, but between a SYS_rt_sigprocmask syscall and a
voluntary context switch between threads in the same process. The
latter is extremely light and comparable to some of the cheapest
syscalls, so I suspect the performance difference between ucontext and
threads is negligible. Given that there are a lot of other good
reasons you should be using threads instead of ucontext, I think the
matter is pretty clear.

Rich

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.