From nobody Wed Nov 27 12:58:35 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1699281843204599.5704553796121; Mon, 6 Nov 2023 06:44:03 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.628087.979155 (Exim 4.92) (envelope-from ) id 1r00p5-00078A-BV; Mon, 06 Nov 2023 14:43:27 +0000 Received: by outflank-mailman (output) from mailman id 628087.979155; Mon, 06 Nov 2023 14:43:27 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r00p5-000783-7a; Mon, 06 Nov 2023 14:43:27 +0000 Received: by outflank-mailman (input) for mailman id 628087; Mon, 06 Nov 2023 14:43:25 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r00iD-0008Lv-9o for xen-devel@lists.xenproject.org; Mon, 06 Nov 2023 14:36:21 +0000 Received: from smtp-fw-80008.amazon.com (smtp-fw-80008.amazon.com [99.78.197.219]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id d8f81c57-7cb1-11ee-98da-6d05b1d4d9a1; Mon, 06 Nov 2023 15:36:20 +0100 (CET) Received: from pdx4-co-svc-p1-lb2-vlan3.amazon.com (HELO email-inbound-relay-pdx-2a-m6i4x-af372327.us-west-2.amazon.com) ([10.25.36.214]) by smtp-border-fw-80008.pdx80.corp.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Nov 2023 14:36:18 +0000 Received: from smtpout.prod.us-west-2.prod.farcaster.email.amazon.dev (pdx2-ws-svc-p26-lb5-vlan2.pdx.amazon.com [10.39.38.66]) by email-inbound-relay-pdx-2a-m6i4x-af372327.us-west-2.amazon.com (Postfix) with ESMTPS id 2CCF460F5A; Mon, 6 Nov 2023 14:36:16 +0000 (UTC) Received: from EX19MTAUWA002.ant.amazon.com [10.0.38.20:39754] by smtpin.naws.us-west-2.prod.farcaster.email.amazon.dev [10.0.11.184:2525] with esmtp (Farcaster) id 765750b6-add6-4432-93b6-144cb5af84c7; Mon, 6 Nov 2023 14:36:15 +0000 (UTC) Received: from EX19MTAUWB001.ant.amazon.com (10.250.64.248) by EX19MTAUWA002.ant.amazon.com (10.250.64.202) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.39; Mon, 6 Nov 2023 14:36:07 +0000 Received: from u3832b3a9db3152.ant.amazon.com (10.106.83.6) by mail-relay.amazon.com (10.250.64.254) with Microsoft SMTP Server id 15.2.1118.39 via Frontend Transport; Mon, 6 Nov 2023 14:36:04 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-Inumbo-ID: d8f81c57-7cb1-11ee-98da-6d05b1d4d9a1 X-IronPort-AV: E=Sophos;i="6.03,281,1694736000"; d="scan'208";a="41362663" X-Farcaster-Flow-ID: 765750b6-add6-4432-93b6-144cb5af84c7 From: David Woodhouse To: CC: Kevin Wolf , Hanna Reitz , Peter Maydell , Stefano Stabellini , Anthony Perard , Paul Durrant , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , Richard Henderson , Eduardo Habkost , "Michael S. Tsirkin" , Marcel Apfelbaum , Jason Wang , Marcelo Tosatti , , , Subject: [PATCH v4 17/17] docs: update Xen-on-KVM documentation Date: Mon, 6 Nov 2023 14:35:07 +0000 Message-ID: <20231106143507.1060610-18-dwmw2@infradead.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231106143507.1060610-1-dwmw2@infradead.org> References: <20231106143507.1060610-1-dwmw2@infradead.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: Bulk X-ZM-MESSAGEID: 1699281854702100001 Content-Type: text/plain; charset="utf-8" From: David Woodhouse Add notes about console and network support, and how to launch PV guests. Clean up the disk configuration examples now that that's simpler, and remove the comment about IDE unplug on q35/AHCI now that it's fixed. Update the -initrd option documentation to explain how to quote commas in module command lines, and reference it when documenting PV guests. Also update stale avocado test filename in MAINTAINERS. Signed-off-by: David Woodhouse Reviewed-by: Paul Durrant --- MAINTAINERS | 2 +- docs/system/i386/xen.rst | 107 +++++++++++++++++++++++++++++---------- qemu-options.hx | 14 +++-- 3 files changed, 91 insertions(+), 32 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index 8e8a7d5be5..3252be2696 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -490,7 +490,7 @@ S: Supported F: include/sysemu/kvm_xen.h F: target/i386/kvm/xen* F: hw/i386/kvm/xen* -F: tests/avocado/xen_guest.py +F: tests/avocado/kvm_xen_guest.py =20 Guest CPU Cores (other accelerators) ------------------------------------ diff --git a/docs/system/i386/xen.rst b/docs/system/i386/xen.rst index f06765e88c..f3bd90d4d6 100644 --- a/docs/system/i386/xen.rst +++ b/docs/system/i386/xen.rst @@ -15,46 +15,24 @@ Setup ----- =20 Xen mode is enabled by setting the ``xen-version`` property of the KVM -accelerator, for example for Xen 4.10: +accelerator, for example for Xen 4.17: =20 .. parsed-literal:: =20 - |qemu_system| --accel kvm,xen-version=3D0x4000a,kernel-irqchip=3Dsplit + |qemu_system| --accel kvm,xen-version=3D0x40011,kernel-irqchip=3Dsplit =20 Additionally, virtual APIC support can be advertised to the guest through = the ``xen-vapic`` CPU flag: =20 .. parsed-literal:: =20 - |qemu_system| --accel kvm,xen-version=3D0x4000a,kernel-irqchip=3Dsplit -= -cpu host,+xen_vapic + |qemu_system| --accel kvm,xen-version=3D0x40011,kernel-irqchip=3Dsplit -= -cpu host,+xen-vapic =20 When Xen support is enabled, QEMU changes hypervisor identification (CPUID 0x40000000..0x4000000A) to Xen. The KVM identification and features are not advertised to a Xen guest. If Hyper-V is also enabled, the Xen identificat= ion moves to leaves 0x40000100..0x4000010A. =20 -The Xen platform device is enabled automatically for a Xen guest. This all= ows -a guest to unplug all emulated devices, in order to use Xen PV block and n= etwork -drivers instead. Under Xen, the boot disk is typically available both via = IDE -emulation, and as a PV block device. Guest bootloaders typically use IDE t= o load -the guest kernel, which then unplugs the IDE and continues with the Xen PV= block -device. - -This configuration can be achieved as follows - -.. parsed-literal:: - - |qemu_system| -M pc --accel kvm,xen-version=3D0x4000a,kernel-irqchip=3Ds= plit \\ - -drive file=3D${GUEST_IMAGE},if=3Dnone,id=3Ddisk,file.locking=3Doff= -device xen-disk,drive=3Ddisk,vdev=3Dxvda \\ - -drive file=3D${GUEST_IMAGE},index=3D2,media=3Ddisk,file.locking=3D= off,if=3Dide - -It is necessary to use the pc machine type, as the q35 machine uses AHCI i= nstead -of legacy IDE, and AHCI disks are not unplugged through the Xen PV unplug -mechanism. - -VirtIO devices can also be used; Linux guests may need to be dissuaded from -umplugging them by adding 'xen_emul_unplug=3Dnever' on their command line. - Properties ---------- =20 @@ -63,7 +41,10 @@ The following properties exist on the KVM accelerator ob= ject: ``xen-version`` This property contains the Xen version in ``XENVER_version`` form, with = the major version in the top 16 bits and the minor version in the low 16 bit= s. - Setting this property enables the Xen guest support. + Setting this property enables the Xen guest support. If Xen version 4.5 = or + greater is specified, the HVM leaf in Xen CPUID is populated. Xen version + 4.6 enables the vCPU ID in CPUID, and version 4.17 advertises vCPU upcall + vector support to the guest. =20 ``xen-evtchn-max-pirq`` Xen PIRQs represent an emulated physical interrupt, either GSI or MSI, w= hich @@ -83,8 +64,78 @@ The following properties exist on the KVM accelerator ob= ject: through simultaneous grants. For guests with large numbers of PV devices= and high throughput, it may be desirable to increase this value. =20 -OS requirements ---------------- +Xen paravirtual devices +----------------------- + +The Xen PCI platform device is enabled automatically for a Xen guest. This +allows a guest to unplug all emulated devices, in order to use paravirtual +block and network drivers instead. + +Those paravirtual Xen block, network (and console) devices can be created +through the command line, and/or hot-plugged. + +To provide a Xen console device, define a character device and then a devi= ce +of type ``xen-console`` to connect to it. For the Xen console equivalent of +the handy ``-serial mon:stdio`` option, for example: + +.. parsed-literal:: + -chardev stdio,mux=3Don,id=3Dchar0,signal=3Doff -mon char0 \\ + -device xen-console,chardev=3Dchar0 + +The Xen network device is ``xen-net-device``, which becomes the default NIC +model for emulated Xen guests, meaning that just the default NIC provided +by QEMU should automatically work and present a Xen network device to the +guest. + +Disks can be configured with '``-drive file=3D${GUEST_IMAGE},if=3Dxen``' a= nd will +appear to the guest as ``xvda`` onwards. + +Under Xen, the boot disk is typically available both via IDE emulation, and +as a PV block device. Guest bootloaders typically use IDE to load the guest +kernel, which then unplugs the IDE and continues with the Xen PV block dev= ice. + +This configuration can be achieved as follows: + +.. parsed-literal:: + + |qemu_system| --accel kvm,xen-version=3D0x40011,kernel-irqchip=3Dsplit \\ + -drive file=3D${GUEST_IMAGE},if=3Dxen \\ + -drive file=3D${GUEST_IMAGE},file.locking=3Doff,if=3Dide + +VirtIO devices can also be used; Linux guests may need to be dissuaded from +umplugging them by adding '``xen_emul_unplug=3Dnever``' on their command l= ine. + +Booting Xen PV guests +--------------------- + +Booting PV guest kernels is possible by using the Xen PV shim (a version o= f Xen +itself, designed to run inside a Xen HVM guest and provide memory manageme= nt +services for one guest alone). + +The Xen binary is provided as the ``-kernel`` and the guest kernel itself = (or +PV Grub image) as the ``-initrd`` image, which actually just means the fir= st +multiboot "module". For example: + +.. parsed-literal:: + + |qemu_system| --accel kvm,xen-version=3D0x40011,kernel-irqchip=3Dsplit \\ + -chardev stdio,id=3Dchar0 -device xen-console,chardev=3Dchar0 \\ + -display none -m 1G -kernel xen -initrd bzImage \\ + -append "pv-shim console=3Dxen,pv -- console=3Dhvc0 root=3D/dev/xvd= a1" \\ + -drive file=3D${GUEST_IMAGE},if=3Dxen + +The Xen image must be built with the ``CONFIG_XEN_GUEST`` and ``CONFIG_PV_= SHIM`` +options, and as of Xen 4.17, Xen's PV shim mode does not support using a s= erial +port; it must have a Xen console or it will panic. + +The example above provides the guest kernel command line after a separator +(" ``--`` ") on the Xen command line, and does not provide the guest kernel +with an actual initramfs, which would need to listed as a second multiboot +module. For more complicated alternatives, see the +:ref:`documentation ` for the ``-initrd`` option. + +Host OS requirements +-------------------- =20 The minimal Xen support in the KVM accelerator requires the host to be run= ning Linux v5.12 or newer. Later versions add optimisations: Linux v5.17 added diff --git a/qemu-options.hx b/qemu-options.hx index e26230bac5..e2c037815a 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -3981,15 +3981,23 @@ ERST =20 DEF("initrd", HAS_ARG, QEMU_OPTION_initrd, \ "-initrd file use 'file' as initial ram disk\n", QEMU_ARCH_A= LL) -SRST +SRST(initrd) + ``-initrd file`` Use file as initial ram disk. =20 ``-initrd "file1 arg=3Dfoo,file2"`` This syntax is only available with multiboot. =20 - Use file1 and file2 as modules and pass arg=3Dfoo as parameter to the - first module. + Use file1 and file2 as modules and pass ``arg=3Dfoo`` as parameter to = the + first module. Commas can be provided in module parameters by doubling + them on the command line to escape them: + +``-initrd "bzImage earlyprintk=3Dxen,,keep root=3D/dev/xvda1,initrd.img"`` + Multiboot only. Use bzImage as the first module with + "``earlyprintk=3Dxen,keep root=3D/dev/xvda1``" as its command line, + and initrd.img as the second module. + ERST =20 DEF("dtb", HAS_ARG, QEMU_OPTION_dtb, \ --=20 2.34.1