--- wikisrc/ports/xen/howto.mdwn 2020/11/15 14:31:58 1.180 +++ wikisrc/ports/xen/howto.mdwn 2020/11/15 14:47:55 1.182 @@ -8,7 +8,28 @@ systems which operate in an unprivileged from the domU systems are forwarded by the Xen hypervisor to the dom0 to be fulfilled. -Xen supports different styles of guests; see [PV on HVM](https://wiki.xen.org/wiki/PV_on_HVM) and [PVH(v2)](https://wiki.xenproject.org/wiki/PVH_(v2\)_Domu) for upstream documentation. +This HOWTO presumes a basic familiarity with the Xen system +architecture, with installing NetBSD on amd64 hardware, and with +installing software from pkgsrc. See also the [Xen +website](http://www.xenproject.org/). + +[[!toc]] + +# Overview: Versions of Xen, Styles, NetBSD + +The basic concept of Xen is that the hypervisor (xenkernel) runs on +the hardware, and runs a privileged domain ("dom0") that can access +disks/networking/etc. One then runs additonal unprivileged domains +(each a "domU"), presumably to do something useful. + +This HOWTO addresses how to run a NetBSD dom0 (and hence also build +xen itself). It also addresses how to run domUs in that environment, +and how to deal with having a domU in a Xen environment run by someone +else and/or not running NetBSD. + +## Guest Styles + +Xen supports different styles of guests. [[!table data=""" Style of guest |Supported by NetBSD @@ -21,6 +42,7 @@ PVH |current-only (domU, dom0 not yet) In Para-Virtualized (PV) mode, the guest OS does not attempt to access hardware directly, but instead makes hypercalls to the hypervisor; PV guests must be specifically coded for Xen. +See [PV](https://wiki.xen.org/wiki/Paravirtualization_(PV\)). In HVM mode, no guest modification is required; however, hardware support is required, such as VT-x on Intel CPUs and SVM on AMD CPUs. @@ -28,27 +50,33 @@ The dom0 runs qemu to emulate hardware. In PVHVM mode, the guest runs as HVM, but additionally can use PV drivers for efficiency. +See [PV on HVM](https://wiki.xen.org/wiki/PV_on_HVM). There have been two PVH modes: original PVH and PVHv2. Original PVH was based on PV mode and is no longer relevant at all. PVHv2 is basically lightweight HVM with PV drivers. A critical feature of it is that qemu is not needed; the hypervisor can do the emulation that is required. Thus, a dom0 can be PVHv2. - The source code uses PVH and config files use pvh; this refers to PVHv2. +See [PVH(v2)](https://wiki.xenproject.org/wiki/PVH_(v2\)_Domu). + -At boot, the dom0 kernel is loaded as a module with Xen as the kernel. +At system boot, the dom0 kernel is loaded as a module with Xen as the kernel. The dom0 can start one or more domUs. (Booting is explained in detail in the dom0 section.) -This HOWTO presumes a basic familiarity with the Xen system -architecture, with installing NetBSD on i386/amd64 hardware, and with -installing software from pkgsrc. See also the [Xen -website](http://www.xenproject.org/). +## CPU Architecture -[[!toc]] +Xen runs on x86_64 hardware (the NetBSD amd64 port). + +There is a concept of Xen running on ARM, but there are no reports of this working with NetBSD. -# Versions and Support +The dom0 system should be amd64. (Instructions for i386PAE dom0 have been removed from the HOWTO.) + +The domU can be i386PAE or amd64. +i386PAE at one point was considered as [faster](https://lists.xen.org/archives/html/xen-devel/2012-07/msg00085.html) than amd64. + +## Xen Versions In NetBSD, Xen is provided in pkgsrc, via matching pairs of packages xenkernel and xentools. We will refer only to the kernel versions, @@ -79,17 +107,6 @@ because the hypercall interface has rema Older Xen had a python-based management tool called xm, now replaced by xl. -Architecture ------------- - -Xen 4.5 and later runs on x86_64 hardware (the NetBSD amd64 port). -There is a concept of Xen running on ARM, but there are no reports of this working with NetBSD. - -The dom0 system should be amd64. (Instructions for i386PAE dom0 have been removed from the HOWTO.) - -The domU can be i386PAE or amd64. -i386PAE at one point was considered as [faster](https://lists.xen.org/archives/html/xen-devel/2012-07/msg00085.html) than amd64. - # Creating a dom0 In order to install a NetBSD as a dom0, one must first install a normal @@ -100,14 +117,12 @@ In 2018-05, trouble booting a dom0 was r 512M it worked reliably. This does not make sense, but if you see "not ELF" after Xen boots, try increasing dom0 RAM. -Installation of NetBSD ----------------------- +## Installation of NetBSD [Install NetBSD/amd64](/guide/inst/) just as you would if you were not using Xen. -Installation of Xen -------------------- +## Installation of Xen We will consider that you chose to use Xen 4.13, with NetBSD/amd64 as dom0. In the dom0, install xenkernel48 and xentools48 from pkgsrc. @@ -197,8 +212,7 @@ make this work, one should not expect to (and thus xencommons). There is currently no reason to expect that this will get fixed any time soon. -anita (for testing NetBSD) --------------------------- +## anita (for testing NetBSD) With the setup so far, one should be able to run anita (see pkgsrc/misc/py-anita) to test NetBSD releases, by doing (as @@ -208,8 +222,7 @@ root, because anita must create a domU): anita --vmm=xl test file:///usr/obj/i386/ """]] -Xen-specific NetBSD issues --------------------------- +## Xen-specific NetBSD issues There are (at least) two additional things different about NetBSD as a dom0 kernel compared to hardware. @@ -223,8 +236,7 @@ options as GENERIC. While it is debatab bug, users should be aware of this and can simply add missing config items if desired. -Updating NetBSD in a dom0 -------------------------- +## Updating NetBSD in a dom0 This is just like updating NetBSD on bare hardware, assuming the new version supports the version of Xen you are running. Generally, one @@ -234,8 +246,7 @@ and adjusts `/etc`. Note that one must update both the non-Xen kernel typically used for rescue purposes and the DOM0 kernel used with Xen. -Converting from grub to /boot ------------------------------ +## Converting from grub to /boot These instructions were used to convert a system from grub to /boot. The system was originally installed in February of @@ -265,8 +276,7 @@ default=1 timeout=30 """]] -Upgrading Xen versions ---------------------- +## Upgrading Xen versions Minor version upgrades are trivial. Just rebuild/replace the xenkernel version and copy the new xen.gz to `/` (where `/boot.cfg` @@ -287,8 +297,7 @@ mediated by Xen, and configured in the d Entropy in domUs can be an issue; physical disks and network are on the dom0. NetBSD's /dev/random system works, but is often challenged. -Config files ------------- +## Config files See /usr/pkg/share/examples/xen/xlexample* for a small number of well-commented examples, mostly for running @@ -334,8 +343,7 @@ equivalent to pushing the power button; power-press event and do a clean shutdown. Shutting down the dom0 will trigger controlled shutdowns of all configured domUs. -CPU and memory --------------- +## CPU and memory A domain is provided with some number of vcpus, up to the number of CPUs seen by the hypervisor. For a domU, it is controlled @@ -349,8 +357,7 @@ than the available memory. Xen also provides a "balloon" driver, which can be used to let domains use more memory temporarily. -Virtual disks -------------- +## Virtual disks In domU config files, the disks are defined as a sequence of 3-tuples: @@ -702,8 +709,9 @@ NetBSD apparently only use specific vers \todo Explain better. -pvgrub ------- +## Boot methods + +### pvgrub pvgrub is a version of grub that uses PV operations instead of BIOS calls. It is booted from the dom0 as the domU kernel, and then reads @@ -728,8 +736,7 @@ partition for the kernel with the intent which leads to /netbsd not being the actual kernel. One must remember to update the special boot partition. -pygrub -------- +### pygrub pygrub runs in the dom0 and looks into the domU file system. This implies that the domU must have a kernel in a file system in a format @@ -743,7 +750,8 @@ historical DomU images using it still wo As of 2014, pygrub seems to be of mostly historical interest. New DomUs should use pvgrub. -Amazon ------- +## Specific Providers + +### Amazon See the [Amazon EC2 page](/amazon_ec2/).