Here at Bytemark, we like Free and open-source software. And one of our favourite projects is QEMU. QEMU emulates a bundle of common server hardware – including a CPU, discs, memory, a network card, etc – and runs your operating system on it. It’s pretty much the code that runs every “cloud” or virtual hosting provider in the world.
Of course, servers can contain lots of different pieces of hardware (many of which can be emulated by QEMU), and different operating systems have varying levels of support for them. When deciding how to configure QEMU for our BigV virtual machines, we wanted the defaults to be as fast as possible, but we also wanted to be able to support a wide variety of operating systems.
We met these contradictory goals by introducing the idea of ‘hardware profiles’. Until today your virtual machine was given a profile called virtio2011 (or, if you asked for it, compatibility2011). By picking one hardware profile or another, you were deciding what hardware QEMU would emulate for your VM – fast-but-narrowly-supported, or slower-but-widely-supported. The hardware profile also decides which version of QEMU is used to run your virtual machine, with the 2011 profiles using a modified version of QEMU 0.15 – which actually dates from 2008!
Of course there have been a lot of changes to QEMU in 5 years. While we’re happy with the hardware that QEMU presents, and its stability there are still loads of bug fixes, performance enhancements, and behind-the-scenes features we’d like to start using in BigV.
As of right now, any new virtual machines you create on BigV will use the new virtio2013 hardware profile, which uses the brand new QEMU 1.5.0. If you didn’t specify a hardware profile when creating a virtual machine, it will have defaulted to virtio2011, and next time it’s stopped (by running bigv vm shutdown or bigv vm restart, for instance), it will be automatically upgraded to virtio2013. This is almost invisible to your guest – when it checks the CPU’s model name, it will see “QEMU Virtual CPU Version 1.5.0” instead of “0.15.0”, but that should be all.
VMs that were created with a hardware profile of compatibility2011 will, by constrast, not be upgraded to compatibility2013 just in case there’s a very subtle change that somehow breaks your OS. We also won’t automatically upgrade a VM if you’d specified virtio2011 explicitly, just in case you had a reason to do so, and we’ll stick to that for any future VMs where you choose a profile.
If you’d previously specified compatibility2011 or virtio2011 for a VM and you’d like it to be upgraded to the 2013 release, the newest version of the BigV client (0.7.3) includes support for setting, locking and unlocking hardware profiles, as long as the machine is turned off. Do pop in a support request to firstname.lastname@example.org if you have any problems. We’d also like to hear from you if there’s new virtual hardware you’d like to see added to BigV. For now we think the virtio and compatibility profiles cover most use cases but please tell us if you think we’re missing a trick.
Finally, we recently identified a bug in QEMU that was harming disc I/O speeds. We’ve fixed this for all our hardware profiles. This reduces I/O request latency by a factor of 40-200. This translates to some fairly drastic improvements in the performance of everyday tasks – compiling a typical C++ application was seven times faster, in one example – and differences between the various disc storage grades should now be more obvious. So far feedback has been positive, but if you’ve had I/O problems now is the time to reboot your VM, check again and let us know.