Why I call these benchmarks final?
The gsoc 2011 program ends in a few days. So now I publish here some benchmarks of the scheduler I have been developing. I now need to take a break from this scheduler coding, but this does not mean that the project is over for me. I hope I could further work on this scheduler something like half a year later as a university project.
What can you see in the benchmarks?
I think that the benchmark on the 2-CPU machine shows that when running a computer with small number of CPUs, this scheduler is quite competitive to the other two FreeBSD schedulers. However, as you can see in the 8-CPU machine benchmark, 8 CPUs are already too much for the scheduler. And the benchmarking in a virtualized environment also shows that the scheduler performs poorly when running in virtual machines.
I think that the reason why the scheduler performs so poorly on the 8 core machine is the locking contention. And I think I could add some improvements in this area. For example when adding a new thread to the scheduler, I probably do not need to grab the global lock for the whole scheduler. Because a new task is always inserted at the end of the list, it would probably suffice to lock only the last thread structure in the scheduler queue. I think I could find a few other places where such increased locking granularity could increase the scheduler performance.
FBFS in action
Fidaj has created a short video that shows the scheduler in action on FreeBSD 9.0-Beta1. Enjoy it here.
Sysbench Postgresql benchmark on a 2 CPU machine
Sysbench Postgresql benchmark on a 8 CPU machine
Sysbench Postgresql benchmark on a 4 CPU virtual machine