This is the mail archive of the libc-help@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: swapcontext() slow


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

Attachment: signature.asc
Description: Digital signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]