[erlang-questions] Erlang SMP scheduler details

Nicolas Zea <>
Tue Feb 24 22:24:14 CET 2009


Are there any details available on how the SMP scheduler works? I  
found some slides that discuss how there is a global run pool, which  
schedulers get work from, with one scheduler per thread. Does this  
mean everything follows kind of a pull model, and there is no notion  
of actor locality to a particular thread? (ie, if multiple actors are  
available in the run queue, prioritize one that was previously running  
in this thread in the hopes of having less of a 'cold start' in terms  
of cache, branch prediction, tlb misses, etc.).

It was mentioned the current goal is to distribute the run pool as  
well, with some migration logic. I'm guessing this hasn't been  
implemented yet?

Is there any notion of preemption? Or other fairness assurance?

I've been digging through the beam source code, but in all honesty  
that place scares me a bit. Is there any documentation available on  
what all is going on, particularly in relation to the SMP aspects? For  
example, does anyone know where the interaction with OS threads takes  
place, including pulling tasks from the run pool? Is there any  
definition anywhere of what the "lightweight processes" entail, and  
how they get swapped in/out? (continuations?)

Thanks,
Nicolas



More information about the erlang-questions mailing list