Notes on SMP performance on FreeBSD
Since the conclusion of the SMPng project, the focus of SMP development in
FreeBSD has shifted from deploying locking infrastructure to careful profiling
and optimization of kernel SMP strategies for increased performance on common
workloads. FreeBSD 7.0 was the first release to benefit from this
We are in the process of gathering a library of common application workloads
that are used to compare performance across time and against other operating
systems. Comparisons are mostly performed against various versions of
FreeBSD, Linux 2.6.x systems, and other operating systems. Solaris is a future target of interest,
but is not currently available on our test systems.
Some of the above benchmarks have not been written up, but there are various unsorted graphs to be found here.
Most SMP scaling work is done on 8-core opteron or xeon systems,
running in either i386 or amd64 mode. Changes that have the
potential for increased overhead are also validated on systems with
fewer CPUs, including UP, UP + HTT and dual-core systems, or the
8-core systems with some cores disabled. An intel 16-core xeon
is available but requires further scheduler work to improve
performance (this work is in progress). Update: this work is
largely complete but the 16-core system broke; we are in need of a
Presentations about FreeBSD performance
The following are some presentations I have given at previous conferences and developer summits relating to FreeBSD SMP performance.
- "FreeBSD 7.0 and Beyond", presented at FOSDEM 2008 (Brussels). This is partly a cut down version of the following presentation but contains new performance data
- "Introducing FreeBSD 7.0", presented at BSDCon Turkey 2007 (Istanbul) and MeetBSD 2007 (Warsaw, Poland)
- "Scalability update", presented at BSDCan 2007 DevSummit. Progress in SMP performance and scalability as of May 2007.
- "Filesystem performance", presented at BSDCan 2006 (Ottawa). Report on progress on filesystem performance and scalability in FreeBSD 6.x compared to 4.x and 5.x.
Work in progress
Last updated 04 June 2008
buffer cache (Jeff Roberson)
vm optimizations (Google SoC 2008)
scheduler optimizations for 16-core and 32-core systems (Jeff Roberson)
UDP performance (in progress)
TCP PCB locking (Robert Watson)