On Friday, 4 March 2016 at 03:14:01 UTC, Ali Çehreli wrote:
I imagine that lost cache is one of the biggest costs in thread switching. It would be great if a thread could select a thread with something like "I'm done, now please switch to my reader". And that's exactly one of the benefits of fibers: two workers ping pong back and forth, without much risk of losing their cached data.

Is my assumption correct?

Ali

The minimal cost of a context switch is one TLB miss (~300), one cache miss (~300) and iret (~300). But then, you usually don't do context switch for nothing, so some work has to be done in the context switch. This is where it gets very dependent on which system call you use.

During its work, the system call would have evicted various cache lines and TLB entries to put its own data there. That means that after the context switch is done, part of your cache is gone, and you'll need some time to start again running full speed. You may think that it is the same with a library call, and to some extent it is, but much worse: as kernel and userspace do not share the same address space and access write, so you typically get way more trashing (you can't reuse TLB entries at all for instance).

Actual numbers will vary from one chip to the other, but the general idea remains.

Reply via email to