Message ID | 1544468734-32763-1-git-send-email-maran.wilson@oracle.com (mailing list archive) |
---|---|
Headers | show |
Series | KVM: x86: Allow Qemu/KVM to use PVH entry point | expand |
On Mon, Dec 10, 2018 at 11:05:34AM -0800, Maran Wilson wrote: > For certain applications it is desirable to rapidly boot a KVM virtual > machine. In cases where legacy hardware and software support within the > guest is not needed, Qemu should be able to boot directly into the > uncompressed Linux kernel binary without the need to run firmware. > > There already exists an ABI to allow this for Xen PVH guests and the ABI > is supported by Linux and FreeBSD: > > https://xenbits.xen.org/docs/unstable/misc/pvh.html > > This patch series would enable Qemu to use that same entry point for > booting KVM guests. How would I do that, practically? Looking at those here: > * Qemu and qboot RFC patches have been posted to show one example of how > this functionality can be used. Some preliminary numbers are available > in those cover letters showing the KVM guest boot time improvement. > Qemu: > http://lists.nongnu.org/archive/html/qemu-devel/2018-12/msg00957.html > qboot: > http://lists.nongnu.org/archive/html/qemu-devel/2018-12/msg00953.html I might still need to do some dancing to get stuff going. Thx.
On 12/11/2018 5:18 AM, Borislav Petkov wrote: > On Mon, Dec 10, 2018 at 11:05:34AM -0800, Maran Wilson wrote: >> For certain applications it is desirable to rapidly boot a KVM virtual >> machine. In cases where legacy hardware and software support within the >> guest is not needed, Qemu should be able to boot directly into the >> uncompressed Linux kernel binary without the need to run firmware. >> >> There already exists an ABI to allow this for Xen PVH guests and the ABI >> is supported by Linux and FreeBSD: >> >> https://xenbits.xen.org/docs/unstable/misc/pvh.html >> >> This patch series would enable Qemu to use that same entry point for >> booting KVM guests. > How would I do that, practically? > > Looking at those here: > >> * Qemu and qboot RFC patches have been posted to show one example of how >> this functionality can be used. Some preliminary numbers are available >> in those cover letters showing the KVM guest boot time improvement. >> Qemu: >> http://lists.nongnu.org/archive/html/qemu-devel/2018-12/msg00957.html >> qboot: >> http://lists.nongnu.org/archive/html/qemu-devel/2018-12/msg00953.html > I might still need to do some dancing to get stuff going. Is your question about what options you need to provide to Qemu? Or is your question about the SW implementation choices? Assuming the former... once you have compiled all 3 new binaries (kernel, Qemu, and qboot) then you simply invoke qemu the same way you normally invoke qemu with qboot + kernel binary, except you provide the vmlinux (uncompressed) kernel binary when specifying the "-kernel" parameter. Qemu/qboot will automatically detect that you have provided an ELF binary, find the PVH ELF note to locate the entry point, and proceed to boot the kernel via that method. On the other hand, if you leave all the Qemu options as-is, but simply provide the bzImage (compressed) kernel binary from the same build, Qemu/qboot will boot the way it has always done and not look for PVH. To make it more concrete, here's an example of how I had been invoking PVH boot recently: x86_64-softmmu/qemu-system-x86_64 \ -name testvm01 \ -machine q35,accel=kvm,nvdimm \ -cpu host \ -m 1024,maxmem=20G,slots=2 \ -smp 1 \ -nodefaults \ -kernel binaries/vmlinux \ -object memory-backend-file,id=mem0,share,mem-path=binaries/containers.img,size=235929600 \ -device nvdimm,memdev=mem0,id=nv0 \ -append 'console=ttyS0,115200,8n1 root=/dev/pmem0p1 panic=1 rw init=/usr/lib/systemd/systemd rootfstype=ext4' \ -bios binaries/bios.bin \ -serial mon:stdio Thanks, -Maran > Thx. >
On Tue, Dec 11, 2018 at 11:29:21AM -0800, Maran Wilson wrote: > Is your question about what options you need to provide to Qemu? Or is your > question about the SW implementation choices? > > Assuming the former... Yeah, that's what I wanted to know. But looking at it, I'm booting bzImage here just as quickly and as flexible so I don't see the advantage of this new method for my use case here of booting kernels in qemu. But maybe there's a good use case where firmware is slow and one doesn't really wanna noodle through it or when one does start a gazillion VMs per second or whatever... Thx.
On 12/12/2018 12:39 PM, Borislav Petkov wrote: > On Tue, Dec 11, 2018 at 11:29:21AM -0800, Maran Wilson wrote: >> Is your question about what options you need to provide to Qemu? Or is your >> question about the SW implementation choices? >> >> Assuming the former... > Yeah, that's what I wanted to know. But looking at it, I'm booting > bzImage here just as quickly and as flexible so I don't see the > advantage of this new method for my use case here of booting kernels > in qemu. > > But maybe there's a good use case where firmware is slow and one doesn't > really wanna noodle through it or when one does start a gazillion VMs > per second or whatever... Right, the time saved is not something you would notice while starting a VM manually. But it does reduce the time to reach startup_64() in Linux by about 50% (going from around 94ms to around 47ms) when booting a VM using Qemu+qboot (for example). That time savings becomes pretty important when you are trying to use VMs as containers (for instance, as is the case with Kata containers) and trying to get the latency for launching such a container really low -- to come as close as possible to match the latency for launching more traditional containers that don't have the additional security/isolation of running within a separate VM. Thanks, -Maran > > Thx. >
On 12/12/18 21:39, Borislav Petkov wrote: > On Tue, Dec 11, 2018 at 11:29:21AM -0800, Maran Wilson wrote: >> Is your question about what options you need to provide to Qemu? Or is your >> question about the SW implementation choices? >> >> Assuming the former... > Yeah, that's what I wanted to know. But looking at it, I'm booting > bzImage here just as quickly and as flexible so I don't see the > advantage of this new method for my use case here of booting kernels > in qemu. It's not firmware that is slow, decompression is. Unlike Xen, which is using PVH with a regular bzImage and decompression in the host, KVM is using PVH to boot a vmlinux with no decompression at all. Paolo > But maybe there's a good use case where firmware is slow and one doesn't > really wanna noodle through it or when one does start a gazillion VMs > per second or whatever...
On 12/10/18 2:05 PM, Maran Wilson wrote: > For certain applications it is desirable to rapidly boot a KVM virtual > machine. In cases where legacy hardware and software support within the > guest is not needed, Qemu should be able to boot directly into the > uncompressed Linux kernel binary without the need to run firmware. > > There already exists an ABI to allow this for Xen PVH guests and the ABI > is supported by Linux and FreeBSD: > > https://xenbits.xen.org/docs/unstable/misc/pvh.html > > This patch series would enable Qemu to use that same entry point for > booting KVM guests. > Applied to for-linus-4.21 -boris