qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel <qemu-devel@nongnu.org>, KVM list <kvm@vger.kernel.org>
Subject: [Qemu-devel] Announcing qboot, a minimal x86 firmware for QEMU
Date: Thu, 21 May 2015 15:51:43 +0200	[thread overview]
Message-ID: <555DE2EF.1000509@redhat.com> (raw)

Some of you may have heard about the "Clear Containers" initiative from
Intel, which couple KVM with various kernel tricks to create extremely
lightweight virtual machines.  The experimental Clear Containers setup
requires only 18-20 MB to launch a virtual machine, and needs about 60
ms to boot.

Now, as all of you probably know, "QEMU is great for running Windows or
legacy Linux guests, but that flexibility comes at a hefty price. Not
only does all of the emulation consume memory, it also requires some
form of low-level firmware in the guest as well. All of this adds quite
a bit to virtual-machine startup times (500 to 700 milliseconds is not
unusual)".

Right?  In fact, it's for this reason that Clear Containers uses kvmtool
instead of QEMU.

No, wrong!  In fact, reporting bad performance is pretty much the same
as throwing down the gauntlet.

Enter qboot, a minimal x86 firmware that runs on QEMU and, together with
a slimmed-down QEMU configuration, boots a virtual machine in 40
milliseconds[2] on an Ivy Bridge Core i7 processor.

qboot is available at git://github.com/bonzini/qboot.git.  In all the
glory of its 8KB of code, it brings together various existing open
source components:

* a minimal (really minimal) 16-bit BIOS runtime based on kvmtool's own BIOS

* a couple hardware initialization routines written mostly from scratch
but with good help from SeaBIOS source code

* a minimal 32-bit libc based on kvm-unit-tests

* the Linux loader from QEMU itself

The repository has more information on how to achieve fast boot times,
and examples of using qboot.  Right now there is a limit of 8 MB for
vmlinuz+initrd+cmdline, which however should be enough for initrd-less
containers.

The first commit to qboot is more or less 24 hours old, so there is
definitely more work to do, in particular to extract ACPI tables from
QEMU and present them to the guest.  This is probably another day of
work or so, and it will enable multiprocessor guests with little or no
impact on the boot times.  SMBIOS information is also available from QEMU.

On the QEMU side, there is no support yet for persistent memory and the
NFIT tables from ACPI 6.0.  Once that (and ACPI support) is added, qboot
will automatically start using it.

Happy hacking!

Paolo

             reply	other threads:[~2015-05-21 13:51 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-21 13:51 Paolo Bonzini [this message]
2015-05-21 15:48 ` [Qemu-devel] Announcing qboot, a minimal x86 firmware for QEMU Avi Kivity
2015-05-21 16:21   ` Paolo Bonzini
2015-05-21 18:28     ` Avi Kivity
2015-05-21 17:04 ` Jan Kiszka
2015-05-22  2:53 ` Yong Wang
2015-05-26  8:47   ` Stefan Hajnoczi
2015-06-05 10:42     ` Stefan Hajnoczi
2015-05-22 11:01 ` Daniel P. Berrange
2015-05-22 11:04   ` Peter Maydell
2015-05-22 11:12     ` Daniel P. Berrange
2015-05-22 11:21       ` Peter Maydell
2015-05-22 11:33         ` Daniel P. Berrange
2015-05-22 11:34         ` Gerd Hoffmann
2015-05-22 11:42         ` Markus Armbruster
2015-05-25 12:53       ` Paolo Bonzini
2015-05-26 21:25         ` Christopher Covington
2015-05-27  9:30           ` Paolo Bonzini
2015-05-27  9:36             ` Avi Kivity
2015-05-27 11:00               ` Paolo Bonzini
2015-05-27 11:54             ` Peter Maydell
2015-05-27 12:05               ` Paolo Bonzini
2015-05-27 12:50             ` Christopher Covington
2015-05-27 12:59               ` Paolo Bonzini
2015-05-27 16:24             ` Dr. David Alan Gilbert
2015-05-22 14:06 ` Gerd Hoffmann
2015-05-22 23:23 ` Kevin O'Connor
2015-05-23  3:55   ` Kevin O'Connor
2015-05-25  6:21     ` Vasiliy Tolstov
2015-05-25 15:05       ` Kevin O'Connor
2015-05-25 12:52   ` Paolo Bonzini
2015-05-25 15:11     ` Kevin O'Connor

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=555DE2EF.1000509@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).