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


21.01.2016 19:40, Mike Frysinger ÐÐÑÐÑ:
> 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
There should be the reason why the specification requires it.
And the reason appears to be stated there too, which is the use
with the signal handlers.

>> 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.
You are kidding perhaps.
Many projects use them. qemu, for one, uses them directly, and
there are the indirect users via libpcl, libpth and many coroutine libs.
qemu is trying the mix of swapcontext+longjmp to get a reasonable
speed, but I use libpcl which doesn't do that optimization.


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