Lets talk about fibers
Shachar Shemesh via Digitalmars-d
digitalmars-d at puremagic.com
Sat Jun 6 11:49:28 PDT 2015
On 05/06/15 16:44, Dmitry Olshansky wrote:
>
> * You seem to assume the same. Fine assumption given that OS usually
> tries to keep the same cores working on the same threads, for the
> similar reasons I believe.
>
I see that people already raised the point that the OS does allow you to
pin a thread to specific cores, so lets skip repeating that.
AFAIK, the kernel tries to keep threads running on the same core they
did before is because moving them requires so much locking, synchronous
assembly instructions and barriers, resulting in huge costs for
migrating threads between cores.
Which turns out to be relevant to this discussion, because that will,
likely, also be required in order to move fibers between threads.
A while back, a friend and myself ran an (incomplete) research project
where we tried reverting to the long discarded "one thread per socket"
model. It actually performed really well (much much better than the
"common wisdom" would have it perform), provided you did two things:
1. Use a thread pool. Do not actually spawn a new thread each time a new
incoming connection arrives
and
2. pin that thread to a core, don't let it migrate
Since we are talking about several tens of thousands of threads, each
random fluctuation in the load resulted in the kernel's scheduler
wishing to migrate them, resulting in losing thousands of percent worth
of performance. Once we locked the threads into place, we were, more or
less, on par with micro-threading in terms of overall performance the
server could take.
Shachar
More information about the Digitalmars-d
mailing list