swapcontext() slow

Mike Frysinger vapier@gentoo.org
Thu Jan 21 16:40:00 GMT 2016


On 21 Jan 2016 16:10, Stas Sergeev wrote:
> I am implementing the user-space cooperative
> threading with swapcontext(), but it is quite slow
> because swapcontext() calls sigprocmask().
> 
> Firstly, I'd like to know the reason of this.
> Is this so that (1) every coroutine can have its separate
> signal mask, or is it to (2) allow switching in/out of a
> signal handler?

because the specification requires it:
http://pubs.opengroup.org/onlinepubs/009695399/functions/setcontext.html

> I can think of the possible work-arounds, depending on an
> answer to the above question.
> If (1) is true, then perhaps the "light" version of
> swapcontext()/setcontext() can be added that do not call
> sigprocmask(). If (2) is true, then perhaps the vDSO can
> be introduced to get the current signal mask. Then glibc
> could compare the old and new masks and not call sigprocmask()
> when not needed.
> 
> Would some optimization be possible?
> It would be very good to have the user-space threads
> lightweight, not calling to the kernel at all when possible.

these functions are deprecated/dead -- they no longer exist in the latest
POSIX specification.  the preference would be to stop using them.  i think
we might consider dropping them in a future glibc version.
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://sourceware.org/pipermail/libc-help/attachments/20160121/cd876ab0/attachment.sig>


More information about the Libc-help mailing list