Unlike full virtualization in which the virtual machine provides the same platform interface as running natively on the hardware, paravirtualization requires modification to the guest operating system to work with the platform interface provided by the hypervisor. Xen was designed with performance in mind. Calls to the hypervisor are minimized, batched if necessary, and non-critical codepaths are left unmodified in the case where the privileged instruction can be trapped and emulated by the hypervisor. The Xen API is designed to be OS agnostic and has had Linux, NetBSD, FreeBSD, Solaris, Plan9 and Netware ported to it. Xen also provides support for running directly on native hardware. The following patch series provides the minimal support required to launch Xen paravirtual guests on standard x86 hardware running the Xen hypervisor. These patches effectively port the Linux kernel to run on the platform interface provided by Xen. This port is done as an i386 subarch. With these patches you will be able to launch an unprivileged guest running the modified Linux kernel and unmodified userspace. This guest is x86, UP only, runs in shadow translated mode, and has no direct access to hardware. This simplifies the patchset to the minimum functionality needed to support a paravirtualized guest. It's worth noting that a fair amount of this patchset deals with paravirtualizing I/O, not just CPU-only. The additional missing functionality is primarily about full SMP support, optimizations such as direct writable page tables, and the management interface. Those refinements will be posted later. At a high-level, the patches provide the following: - Kconfig and Makefile changes required to support Xen - subarch changes to allow more platform functionality to be implemented by an i386 subarch - Xen subarch implementation - start of day code for running in the hypervisor provided environment (paging enabled) - basic Xen drivers to provide a fully functional guest The Xen platform API encapsulates the following types of requirements: - idt, gdt, ldt (descriptor table handling) - cr2, fpu_taskswitch, debug registers (privileged register handling) - mmu (page table, tlb, and cache handling) - memory reservations - time and timer - vcpu (init, up/down vcpu) - schedule (processor yield, shutdown, etc) - event channel (generalized virtual interrupt handling) - grant table (shared memory interface for high speed interdomain communication) - block device I/O - network device I/O - console device I/O - Xen feature map - Xen version info Thanks to those who provided early feedback to this patchset: Andi Kleen, Gerd Hoffmann, Jan Beulich, Rik van Riel, Stephen Tweedie, and the Xen team. And thanks to the Xen community: AMD, HP, IBM, Intel, Novell, Red Hat, Virtual Iron, XenSource -- see Xen changelog for full details. Known issues: CodingStyle conformance is still in progress /proc interface needs to be replaced with something more appropriate entry.S cleanups are possible - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
- Follow-Ups:
- Re: [RFC PATCH 00/35] Xen i386 paravirtualization support
- From: Anthony Liguori <[email protected]>
- [RFC PATCH 01/35] Add XEN config options and disable unsupported config options.
- From: Chris Wright <[email protected]>
- [RFC PATCH 04/35] Hypervisor interface header files.
- From: Chris Wright <[email protected]>
- [RFC PATCH 10/35] Add a new head.S start-of-day file for booting on Xen.
- From: Chris Wright <[email protected]>
- [RFC PATCH 23/35] Add support for Xen event channels.
- From: Chris Wright <[email protected]>
- [RFC PATCH 06/35] Add vmlinuz build target.
- From: Chris Wright <[email protected]>
- [RFC PATCH 14/35] subarch modify CPU capabilities
- From: Chris Wright <[email protected]>
- [RFC PATCH 11/35] Add support for Xen to entry.S.
- From: Chris Wright <[email protected]>
- [RFC PATCH 32/35] Add Xen driver utility functions.
- From: Chris Wright <[email protected]>
- [RFC PATCH 26/35] Add Xen subarch reboot support
- From: Chris Wright <[email protected]>
- [RFC PATCH 24/35] subarch support for mask value for irq nubmers
- From: Chris Wright <[email protected]>
- [RFC PATCH 21/35] subarch TLB support
- From: Chris Wright <[email protected]>
- [RFC PATCH 25/35] Add Xen time abstractions
- From: Chris Wright <[email protected]>
- [RFC PATCH 15/35] subarch support for controlling interrupt delivery
- From: Chris Wright <[email protected]>
- [RFC PATCH 29/35] Add the Xen virtual console driver.
- From: Chris Wright <[email protected]>
- [RFC PATCH 20/35] subarch stack pointer update
- From: Chris Wright <[email protected]>
- [RFC PATCH 35/35] Add Xen virtual block device driver.
- From: Chris Wright <[email protected]>
- [RFC PATCH 28/35] add support for Xen feature queries
- From: Chris Wright <[email protected]>
- [RFC PATCH 33/35] Add the Xenbus sysfs and virtual device hotplug driver.
- From: Chris Wright <[email protected]>
- [RFC PATCH 16/35] subarch support for interrupt and exception gates
- From: Chris Wright <[email protected]>
- [RFC PATCH 19/35] subarch support for control register accesses
- From: Chris Wright <[email protected]>
- [RFC PATCH 08/35] Add Xen-specific memory management definitions
- From: Chris Wright <[email protected]>
- [RFC PATCH 07/35] Make LOAD_OFFSET defined by subarch
- From: Chris Wright <[email protected]>
- [RFC PATCH 05/35] Add sync bitops
- From: Chris Wright <[email protected]>
- [RFC PATCH 03/35] Add Xen interface header files
- From: Chris Wright <[email protected]>
- [RFC PATCH 18/35] Support gdt/idt/ldt handling on Xen.
- From: Chris Wright <[email protected]>
- [RFC PATCH 17/35] Segment register changes for Xen
- From: Chris Wright <[email protected]>
- [RFC PATCH 13/35] Support loading an initrd when running on Xen
- From: Chris Wright <[email protected]>
- [RFC PATCH 12/35] Add start-of-day setup hooks to subarch
- From: Chris Wright <[email protected]>
- [RFC PATCH 34/35] Add the Xen virtual network device driver.
- From: Chris Wright <[email protected]>
- [RFC PATCH 09/35] Change __FIXADDR_TOP to leave room for the hypervisor.
- From: Chris Wright <[email protected]>
- [RFC PATCH 31/35] Add Xen grant table support
- From: Chris Wright <[email protected]>
- [RFC PATCH 22/35] subarch suport for idle loop (NO_IDLE_HZ for Xen)
- From: Chris Wright <[email protected]>
- [RFC PATCH 30/35] Add generic_page_range() function
- From: Chris Wright <[email protected]>
- [RFC PATCH 27/35] Add nosegneg capability to the vsyscall page notes
- From: Chris Wright <[email protected]>
- [RFC PATCH 02/35] Makefile support to build Xen subarch
- From: Chris Wright <[email protected]>
- Re: [RFC PATCH 00/35] Xen i386 paravirtualization support
- Prev by Date: Re: Linux v2.6.16
- Next by Date: [RFC PATCH 02/35] Makefile support to build Xen subarch
- Previous by thread: [patch 1/2] net: Node aware multipath device round robin
- Next by thread: [RFC PATCH 02/35] Makefile support to build Xen subarch
- Index(es):