At the end of the month a new Erlang release will be available for production: R13B. What I know so far is very promising. A lot of work has been done to improve SMP performance and flexibility. Beside of remarkable internal optimizations as for example the multiple run-queues a number of switches are added to have better control on the SMP behavior. Now you can bind schedulers to logical processors or change the number of active schedulers on runtime, just to name a few. Another goodie is added unicode support.
To check out the effect of the new run queues I was running a little benchmark with R13A. The program creates a ring of 5000 processes and executes a simple leader election algorithm with O(n^2) communication complexity. The mashine was a 4 Opteron 1.8GHz with 64bit Linux 2.6.18. Kernel polling was active. As you may see in the picture below the program has not been well written in the sense of good asynchrony since it performs almost always better on a single core. That's perfect for the benchmark and it really challenges the SMP implementation. The multiple run queues have a remarkable benefit in both performance and scalability and this may even be better for an increasing number of cores.
Investment in Erlang is investment in the future. With every new release the inventors of the OTP runtime will add more and better SMP features. The focus of the runtime is still more on distribution and reliability but the performance and scalability will soon reach those of other technologies.
UPDATE 1
The same test running on a 8 core Intel Xeon 3 GHz with a 64bit 2.6.9 Linux:
UPDATE 2
Sources:
ring_leader_erlb.tar.gz