[patch] Disable TSC on SMP VMs

Mike Silbersack silby at silby.com
Tue Aug 16 05:30:28 UTC 2011

Hi all,

Thanks to a lightning strike, I recently upgraded my ESXi 4.1 system from 
an old Athlon X2 to a shiny new Core i5-2500K.  I order to see how fast it 
was, I decided to run some buildworlds.  I tried my FreeBSD 9 based VM 
first, and was unhappy with what I saw - many mpt timeouts were reported, 
and the filesystem ended up requiring a lot of fscking.  My FreeBSD 8 
based VM, on the other hand, was quite happy.

After some trial and error, I determined that using the TSC as a 
timecounter with the VM in SMP mode was the root cause.  If I switch the 
VM to one vCPU and run with the TSC, the buildworld runs fine.  If I leave 
it with two vCPUs and change the timecounter to ACPI, then it runs fine 
too.  Based on these results, I created the attached patch; it turns the 
priority of the TSC down to -100 if it determines that it is running 
inside a virtualized SMP environment.  (I did not do testing on KVM or 
qemu, but I am assuming that they probably do not have TSC emulation 
perfect either.)

I'd like to get this into 9.0 so that it works reliably for people who run 
it in a virtual environment on modern hardware.  If someone could code 
review the patch, I would greatly appreciate it.


Mike "Silby" Silbersack

More information about the freebsd-current mailing list