There's a whole lot of X34x0's out there that fail.

Peter Grehan grehan at freebsd.org
Tue Jan 13 22:22:12 UTC 2015


Hi,

(moving this to the -virtualization list)

 > From what I've read around here, an entire swatch of CPUs have a
 > problem --- they have all the virtualization gunk save the ability to run
 > in16 bit mode in emulation.  An example would be the X34x0 ... the
 > cornerstone processor for an entire generation of servers.  I, for
 > instance, have four of them.

  While it is unfortunate that bhyve doesn't fully support Nehalems, we 
decided that the amount of work required to complete the support wasn't 
worth it, given that all follow-on models have 16-bit support.

  That being said, I'm certainly willing to provide help to anyone who 
wants to take on that work.

 > The "fail" in the subject line is about their inability to do two
 > things under bhyve:
 >
 > 1) launch linux through grub
 >
 > 2) have a VM with more than one processor
 >
 > Can we adopt what linux does to work around it?

  The various Linux VM solutions use an instruction emulator to run 
until the CPU is about to transition to 32-bit paged mode, and then cut 
over to using VT-x.

  Pulling this in to bhyve is a decidely non-trivial amount of work, 
especially since the majority of x86 emulator codebases are GPL'd.

 > Is it even necessary to boot linux with Grub?

  It's not Grub that is the issue, but the fact that the processor can't 
run in anything less than 32-bit paged mode. Grub boots Linux in either 
16-bit real mode or 32-bit protected mode with paging disabled. However, 
here is a 64-bit entry point available for Linux/x64 (see "64-bit BOOT 
PROTOCOL" at https://www.kernel.org/doc/Documentation/x86/boot.txt).

  For anyone willing to have a go at this, my recommendation would be to 
modify grub-bhyve to boot Linux/x64 directly into 64-bit mode. This is 
already done for kFreeBSD/amd64 in grub (and for FreeBSD in 
bhyveload/libvmmapi) so that setup code could be reused.

  For MP support, the work would be to look at the Linux/FreeBSD MP 
trampolines and write an emulator that could either recognize those and 
skip them, or emulate only the instructions required to bring the vCPU 
into 32-bit protected mode, and then switch over to VT-x h/w emulation.

later,

Peter.


More information about the freebsd-virtualization mailing list