The virtual LAPIC driver uses callouts to implement the LAPIC timer.
Callouts are armed using callout_reset_sbt(), which currently puts
everything on CPU 0. On systems running many small bhyve VMs this
results in a large amount of contention for CPU 0's callout lock.
I can't see a reason to schedule everything on CPU 0. While the callout
interface should perhaps be changed to schedule on the current CPU by
default, it's easy to change vlapic to avoid the problem. With this
diff I can see callouts getting scheduled across all CPUs in the system
in my workload, and callout lock contention is mostly gone.