From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43366) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gUfns-0005by-Be for qemu-devel@nongnu.org; Wed, 05 Dec 2018 17:38:01 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gUfnn-0001nQ-Fa for qemu-devel@nongnu.org; Wed, 05 Dec 2018 17:38:00 -0500 Received: from userp2120.oracle.com ([156.151.31.85]:54472) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gUfnn-0001mN-6W for qemu-devel@nongnu.org; Wed, 05 Dec 2018 17:37:55 -0500 From: Liam Merwick Date: Wed, 5 Dec 2018 22:37:23 +0000 Message-Id: <1544049446-6359-1-git-send-email-liam.merwick@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [RFC 0/3] QEMU changes to do PVH boot List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: pbonzini@redhat.com, ehabkost@redhat.com, rth@twiddle.net, xen-devel@lists.xenproject.org, sgarzare@redhat.com, mst@redhat.com, stefanha@redhat.com, maran.wilson@oracle.com, liam.merwick@oracle.com 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 with minimal firmware involvement. 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 Details on the Linux changes: https://lkml.org/lkml/2018/4/16/1002 qboot patches: http://patchwork.ozlabs.org/project/qemu-devel/list/?serie= s=3D80020 This patch series provides QEMU support to read the ELF header of an uncompressed kernel binary and get the 32-bit PVH kernel entry point from an ELF Note. This is called when initialising the machine state in pc_memory_init(). Later on in load_linux() if the kernel entry address is present, the uncompressed kernel binary (ELF) is loaded and qboot does futher initialisation of the guest (e820, etc.) and jumps to the kernel entry address and boots the guest. Us=D1=96ng the method/scripts documented by the NEMU team at https://github.com/intel/nemu/wiki/Measuring-Boot-Latency https://lists.gnu.org/archive/html/qemu-devel/2018-12/msg00200.html below are some timings measured (vmlinux and bzImage from the same build) Time to get to kernel start is almost halved (95=E1=B9=81s -> 48ms) QEMU + qboot + vmlinux (PVH + 4.20-rc4) qemu_init_end: 41.550521 fw_start: 41.667139 (+0.116618) fw_do_boot: 47.448495 (+5.781356) linux_startup_64: 47.720785 (+0.27229) linux_start_kernel: 48.399541 (+0.678756) linux_start_user: 296.952056 (+248.552515) QEMU + qboot + bzImage: qemu_init_end: 29.209276 fw_start: 29.317342 (+0.108066) linux_start_boot: 36.679362 (+7.36202) linux_startup_64: 94.531349 (+57.851987) linux_start_kernel: 94.900913 (+0.369564) linux_start_user: 401.060971 (+306.160058) QEMU + bzImage: qemu_init_end: 30.424430 linux_startup_64: 893.770334 (+863.345904) linux_start_kernel: 894.17049 (+0.400156) linux_start_user: 1208.679768 (+314.509278) Liam Merwick (3): pvh: Add x86/HVM direct boot ABI header file pc: Read PVH entry point from ELF note in kernel binary pvh: Boot uncompressed kernel using direct boot ABI hw/i386/pc.c | 344 ++++++++++++++++++++++++++++++++++++++= +++++- include/elf.h | 10 ++ include/hw/xen/start_info.h | 146 +++++++++++++++++++ 3 files changed, 499 insertions(+), 1 deletion(-) create mode 100644 include/hw/xen/start_info.h --=20 1.8.3.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liam Merwick Subject: [RFC 0/3] QEMU changes to do PVH boot Date: Wed, 5 Dec 2018 22:37:23 +0000 Message-ID: <1544049446-6359-1-git-send-email-liam.merwick@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gUfnn-0005cI-7y for xen-devel@lists.xenproject.org; Wed, 05 Dec 2018 22:37:55 +0000 List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: qemu-devel@nongnu.org Cc: liam.merwick@oracle.com, ehabkost@redhat.com, mst@redhat.com, maran.wilson@oracle.com, stefanha@redhat.com, xen-devel@lists.xenproject.org, pbonzini@redhat.com, rth@twiddle.net, sgarzare@redhat.com List-Id: xen-devel@lists.xenproject.org Rm9yIGNlcnRhaW4gYXBwbGljYXRpb25zIGl0IGlzIGRlc2lyYWJsZSB0byByYXBpZGx5IGJvb3Qg YSBLVk0gdmlydHVhbAptYWNoaW5lLiBJbiBjYXNlcyB3aGVyZSBsZWdhY3kgaGFyZHdhcmUgYW5k IHNvZnR3YXJlIHN1cHBvcnQgd2l0aGluIHRoZQpndWVzdCBpcyBub3QgbmVlZGVkLCBRRU1VIHNo b3VsZCBiZSBhYmxlIHRvIGJvb3QgZGlyZWN0bHkgaW50byB0aGUKdW5jb21wcmVzc2VkIExpbnV4 IGtlcm5lbCBiaW5hcnkgd2l0aCBtaW5pbWFsIGZpcm13YXJlIGludm9sdmVtZW50LgoKVGhlcmUg YWxyZWFkeSBleGlzdHMgYW4gQUJJIHRvIGFsbG93IHRoaXMgZm9yIFhlbiBQVkggZ3Vlc3RzIGFu ZCB0aGUgQUJJCmlzIHN1cHBvcnRlZCBieSBMaW51eCBhbmQgRnJlZUJTRDoKCiAgIGh0dHBzOi8v eGVuYml0cy54ZW4ub3JnL2RvY3MvdW5zdGFibGUvbWlzYy9wdmguaHRtbAoKRGV0YWlscyBvbiB0 aGUgTGludXggY2hhbmdlczogaHR0cHM6Ly9sa21sLm9yZy9sa21sLzIwMTgvNC8xNi8xMDAyCnFi b290IHBhdGNoZXM6IGh0dHA6Ly9wYXRjaHdvcmsub3psYWJzLm9yZy9wcm9qZWN0L3FlbXUtZGV2 ZWwvbGlzdC8/c2VyaWVzPTgwMDIwCgpUaGlzIHBhdGNoIHNlcmllcyBwcm92aWRlcyBRRU1VIHN1 cHBvcnQgdG8gcmVhZCB0aGUgRUxGIGhlYWRlciBvZiBhbgp1bmNvbXByZXNzZWQga2VybmVsIGJp bmFyeSBhbmQgZ2V0IHRoZSAzMi1iaXQgUFZIIGtlcm5lbCBlbnRyeSBwb2ludApmcm9tIGFuIEVM RiBOb3RlLiAgVGhpcyBpcyBjYWxsZWQgd2hlbiBpbml0aWFsaXNpbmcgdGhlIG1hY2hpbmUgc3Rh dGUKaW4gcGNfbWVtb3J5X2luaXQoKS4gIExhdGVyIG9uIGluIGxvYWRfbGludXgoKSBpZiB0aGUg a2VybmVsIGVudHJ5CmFkZHJlc3MgaXMgcHJlc2VudCwgdGhlIHVuY29tcHJlc3NlZCBrZXJuZWwg YmluYXJ5IChFTEYpIGlzIGxvYWRlZAphbmQgcWJvb3QgZG9lcyBmdXRoZXIgaW5pdGlhbGlzYXRp b24gb2YgdGhlIGd1ZXN0IChlODIwLCBldGMuKSBhbmQKanVtcHMgdG8gdGhlIGtlcm5lbCBlbnRy eSBhZGRyZXNzIGFuZCBib290cyB0aGUgZ3Vlc3QuCgoKVXPRlm5nIHRoZSBtZXRob2Qvc2NyaXB0 cyBkb2N1bWVudGVkIGJ5IHRoZSBORU1VIHRlYW0gYXQKCiAgIGh0dHBzOi8vZ2l0aHViLmNvbS9p bnRlbC9uZW11L3dpa2kvTWVhc3VyaW5nLUJvb3QtTGF0ZW5jeQogICBodHRwczovL2xpc3RzLmdu dS5vcmcvYXJjaGl2ZS9odG1sL3FlbXUtZGV2ZWwvMjAxOC0xMi9tc2cwMDIwMC5odG1sCgpiZWxv dyBhcmUgc29tZSB0aW1pbmdzIG1lYXN1cmVkICh2bWxpbnV4IGFuZCBiekltYWdlIGZyb20gdGhl IHNhbWUgYnVpbGQpClRpbWUgdG8gZ2V0IHRvIGtlcm5lbCBzdGFydCBpcyBhbG1vc3QgaGFsdmVk ICg5NeG5gXMgLT4gNDhtcykKClFFTVUgKyBxYm9vdCArIHZtbGludXggKFBWSCArIDQuMjAtcmM0 KQogcWVtdV9pbml0X2VuZDogNDEuNTUwNTIxCiBmd19zdGFydDogNDEuNjY3MTM5ICgrMC4xMTY2 MTgpCiBmd19kb19ib290OiA0Ny40NDg0OTUgKCs1Ljc4MTM1NikKIGxpbnV4X3N0YXJ0dXBfNjQ6 IDQ3LjcyMDc4NSAoKzAuMjcyMjkpCiBsaW51eF9zdGFydF9rZXJuZWw6IDQ4LjM5OTU0MSAoKzAu Njc4NzU2KQogbGludXhfc3RhcnRfdXNlcjogMjk2Ljk1MjA1NiAoKzI0OC41NTI1MTUpCgpRRU1V ICsgcWJvb3QgKyBiekltYWdlOgogcWVtdV9pbml0X2VuZDogMjkuMjA5Mjc2CiBmd19zdGFydDog MjkuMzE3MzQyICgrMC4xMDgwNjYpCiBsaW51eF9zdGFydF9ib290OiAzNi42NzkzNjIgKCs3LjM2 MjAyKQogbGludXhfc3RhcnR1cF82NDogOTQuNTMxMzQ5ICgrNTcuODUxOTg3KQogbGludXhfc3Rh cnRfa2VybmVsOiA5NC45MDA5MTMgKCswLjM2OTU2NCkKIGxpbnV4X3N0YXJ0X3VzZXI6IDQwMS4w NjA5NzEgKCszMDYuMTYwMDU4KQoKUUVNVSArIGJ6SW1hZ2U6CiBxZW11X2luaXRfZW5kOiAzMC40 MjQ0MzAKIGxpbnV4X3N0YXJ0dXBfNjQ6IDg5My43NzAzMzQgKCs4NjMuMzQ1OTA0KQogbGludXhf c3RhcnRfa2VybmVsOiA4OTQuMTcwNDkgKCswLjQwMDE1NikKIGxpbnV4X3N0YXJ0X3VzZXI6IDEy MDguNjc5NzY4ICgrMzE0LjUwOTI3OCkKCgpMaWFtIE1lcndpY2sgKDMpOgogIHB2aDogQWRkIHg4 Ni9IVk0gZGlyZWN0IGJvb3QgQUJJIGhlYWRlciBmaWxlCiAgcGM6IFJlYWQgUFZIIGVudHJ5IHBv aW50IGZyb20gRUxGIG5vdGUgaW4ga2VybmVsIGJpbmFyeQogIHB2aDogQm9vdCB1bmNvbXByZXNz ZWQga2VybmVsIHVzaW5nIGRpcmVjdCBib290IEFCSQoKIGh3L2kzODYvcGMuYyAgICAgICAgICAg ICAgICB8IDM0NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQog aW5jbHVkZS9lbGYuaCAgICAgICAgICAgICAgIHwgIDEwICsrCiBpbmNsdWRlL2h3L3hlbi9zdGFy dF9pbmZvLmggfCAxNDYgKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA0OTkg aW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUv aHcveGVuL3N0YXJ0X2luZm8uaAoKLS0gCjEuOC4zLjEKCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZl bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt YW4vbGlzdGluZm8veGVuLWRldmVs