]> xenbits.xensource.com Git - people/sstabellini/xen-unstable.git/.git/commitdiff
docs/man: Fix/simplify generation of manpages
authorAndrew Cooper <andrew.cooper3@citrix.com>
Wed, 2 Jan 2019 10:26:49 +0000 (10:26 +0000)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Wed, 2 Jan 2019 17:50:36 +0000 (17:50 +0000)
The original intent of this patch was to rename xen-vbd-interface.markdown.7
to xen-vbd-interface.pandoc.7 to remove the final markdown file from the docs/
tree.

The DOC_MANx lists are broken.  They contain MANxSRC-y twice, the first half
with a partial %.pod substituation, and the second half with a partial
%.markdown substitution.  This is also the root cause behind the filtering
activity in the uninstall-man$(i)-pages rule.

Furthermore, the logic for generating the manpage targets is unnecesserily
repetative, owing to the layout of source files in the man/ directory.

Therefore, tackle the problem by renaming all of our manpage source files from
"$FORMAT.$SECTION" to "$SECTION.$FORMAT".  For the two xl.cfg.5 and xl.1 which
are preprocessed by autoconf to contain path information, this requires
updating configure.ac and .gitignore.  The markdown to pandoc conversion is
performed as well, as it is also a straight rename.

An ancillary benefit of this renaming is that text editors stand a chance of
being able to work out the correct mode to use.

As for the makefile:

1) Break the MAN_SECTIONS list out of the GENERATE_MANPAGE_RULES loop, as we
   are going to use it a second time.
2) Do away with the individaul MANxSRC-y variables.  Use a single list,
   derived from all *.pod and *.pandoc files, with their format suffixes
   removed.
3) Use a $(foreach ...) to generate the DOC_MANx lists, filling them with the
   correct content.
4) The DOC_HTML and DOC_TXT can now include all manpages with a single
   substitution, as they don't need to separate the manpages by
   section-numbered-directory.
5) Fix up the filenames in the manpage metarule to match the renaming.

No functional change.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
46 files changed:
.gitignore
docs/Makefile
docs/configure
docs/configure.ac
docs/man/xen-pci-device-reservations.7.pod [new file with mode: 0644]
docs/man/xen-pci-device-reservations.pod.7 [deleted file]
docs/man/xen-pv-channel.7.pod [new file with mode: 0644]
docs/man/xen-pv-channel.pod.7 [deleted file]
docs/man/xen-tscmode.7.pod [new file with mode: 0644]
docs/man/xen-tscmode.pod.7 [deleted file]
docs/man/xen-vbd-interface.7.pandoc [new file with mode: 0644]
docs/man/xen-vbd-interface.markdown.7 [deleted file]
docs/man/xen-vtpm.7.pod [new file with mode: 0644]
docs/man/xen-vtpm.pod.7 [deleted file]
docs/man/xen-vtpmmgr.7.pod [new file with mode: 0644]
docs/man/xen-vtpmmgr.pod.7 [deleted file]
docs/man/xenstore-chmod.1.pod [new file with mode: 0644]
docs/man/xenstore-chmod.pod.1 [deleted file]
docs/man/xenstore-ls.1.pod [new file with mode: 0644]
docs/man/xenstore-ls.pod.1 [deleted file]
docs/man/xenstore-read.1.pod [new file with mode: 0644]
docs/man/xenstore-read.pod.1 [deleted file]
docs/man/xenstore-write.1.pod [new file with mode: 0644]
docs/man/xenstore-write.pod.1 [deleted file]
docs/man/xenstore.1.pod [new file with mode: 0644]
docs/man/xenstore.pod.1 [deleted file]
docs/man/xentop.1.pod [new file with mode: 0644]
docs/man/xentop.pod.1 [deleted file]
docs/man/xentrace.8.pod [new file with mode: 0644]
docs/man/xentrace.pod.8 [deleted file]
docs/man/xentrace_format.1.pod [new file with mode: 0644]
docs/man/xentrace_format.pod.1 [deleted file]
docs/man/xl-disk-configuration.5.pod [new file with mode: 0644]
docs/man/xl-disk-configuration.pod.5 [deleted file]
docs/man/xl-network-configuration.5.pod [new file with mode: 0644]
docs/man/xl-network-configuration.pod.5 [deleted file]
docs/man/xl-numa-placement.7.pod [new file with mode: 0644]
docs/man/xl-numa-placement.pod.7 [deleted file]
docs/man/xl.1.pod.in [new file with mode: 0644]
docs/man/xl.cfg.5.pod.in [new file with mode: 0644]
docs/man/xl.cfg.pod.5.in [deleted file]
docs/man/xl.conf.5.pod [new file with mode: 0644]
docs/man/xl.conf.pod.5 [deleted file]
docs/man/xl.pod.1.in [deleted file]
docs/man/xlcpupool.cfg.5.pod [new file with mode: 0644]
docs/man/xlcpupool.cfg.pod.5 [deleted file]

index f11e61321a19a3b18eea2e7c7913d749d410d389..26bc583f74b8efebcece7fdd4fc8c2460073efd3 100644 (file)
@@ -45,8 +45,8 @@ build-*
 dist/*
 docs/tmp.*
 docs/html/
-docs/man/xl.cfg.pod.5
-docs/man/xl.pod.1
+docs/man/xl.cfg.5.pod
+docs/man/xl.1.pod
 docs/man1/
 docs/man5/
 docs/man7/
index 8f933cf93fb7df9ee7a930d73fe3898dabb11593..2867efc53bf1fff3d3d2d16a014c1e592b34063e 100644 (file)
@@ -6,12 +6,10 @@ VERSION               := $(shell $(MAKE) -C $(XEN_ROOT)/xen --no-print-directory xenversion)
 DATE           := $(shell date +%Y-%m-%d)
 
 DOC_ARCHES      := arm x86_32 x86_64
+MAN_SECTIONS    := 1 5 7 8
 
 # Documentation sources to build
-MAN1SRC-y := $(sort $(wildcard man/*.pod.1 man/*.markdown.1))
-MAN5SRC-y := $(sort $(wildcard man/*.pod.5 man/*.markdown.5))
-MAN7SRC-y := $(sort $(wildcard man/*.pod.7 man/*.markdown.7))
-MAN8SRC-y := $(sort $(wildcard man/*.pod.8 man/*.markdown.8))
+MAN-SRC-y := $(sort $(basename $(wildcard man/*.pod man/*.pandoc)))
 
 MARKDOWNSRC-y := $(sort $(shell find misc -name '*.markdown' -print))
 
@@ -20,38 +18,20 @@ TXTSRC-y := $(sort $(shell find misc -name '*.txt' -print))
 PANDOCSRC-y := $(sort $(shell find designs/ features/ misc/ process/ specs/ -name '*.pandoc' -print))
 
 # Documentation targets
-DOC_MAN1 := $(patsubst man/%.pod.1,man1/%.1,$(MAN1SRC-y)) \
-               $(patsubst man/%.markdown.1,man1/%.1,$(MAN1SRC-y))
-DOC_MAN5 := $(patsubst man/%.pod.5,man5/%.5,$(MAN5SRC-y)) \
-               $(patsubst man/%.markdown.5,man5/%.5,$(MAN5SRC-y))
-DOC_MAN7 := $(patsubst man/%.pod.7,man7/%.7,$(MAN7SRC-y)) \
-               $(patsubst man/%.markdown.7,man7/%.7,$(MAN7SRC-y))
-DOC_MAN8 := $(patsubst man/%.pod.8,man8/%.8,$(MAN8SRC-y)) \
-               $(patsubst man/%.markdown.8,man8/%.8,$(MAN8SRC-y))
+$(foreach i,$(MAN_SECTIONS), \
+  $(eval DOC_MAN$(i) := $(patsubst man/%.$(i),man$(i)/%.$(i), \
+                                   $(filter %.$(i),$(MAN-SRC-y)))))
+
 DOC_HTML := html/SUPPORT.html \
             $(patsubst %.markdown,html/%.html,$(MARKDOWNSRC-y)) \
             $(patsubst %.pandoc,html/%.html,$(PANDOCSRC-y)) \
-            $(patsubst man/%.markdown.1,html/man/%.1.html,$(MAN1SRC-y)) \
-            $(patsubst man/%.markdown.5,html/man/%.5.html,$(MAN5SRC-y)) \
-            $(patsubst man/%.markdown.7,html/man/%.7.html,$(MAN7SRC-y)) \
-            $(patsubst man/%.markdown.8,html/man/%.8.html,$(MAN8SRC-y)) \
-            $(patsubst man/%.pod.1,html/man/%.1.html,$(MAN1SRC-y)) \
-            $(patsubst man/%.pod.5,html/man/%.5.html,$(MAN5SRC-y)) \
-            $(patsubst man/%.pod.7,html/man/%.7.html,$(MAN7SRC-y)) \
-            $(patsubst man/%.pod.8,html/man/%.8.html,$(MAN8SRC-y)) \
+            $(patsubst %,html/%.html,$(MAN-SRC-y)) \
             $(patsubst %.txt,html/%.txt,$(TXTSRC-y)) \
             $(patsubst %,html/hypercall/%/index.html,$(DOC_ARCHES))
 DOC_TXT  := $(patsubst %.txt,txt/%.txt,$(TXTSRC-y)) \
             $(patsubst %.markdown,txt/%.txt,$(MARKDOWNSRC-y)) \
             $(patsubst %.pandoc,txt/%.txt,$(PANDOCSRC-y)) \
-            $(patsubst man/%.markdown.1,txt/man/%.1.txt,$(MAN1SRC-y)) \
-            $(patsubst man/%.markdown.5,txt/man/%.5.txt,$(MAN5SRC-y)) \
-            $(patsubst man/%.markdown.7,txt/man/%.7.txt,$(MAN7SRC-y)) \
-            $(patsubst man/%.markdown.8,txt/man/%.8.txt,$(MAN8SRC-y)) \
-            $(patsubst man/%.pod.1,txt/man/%.1.txt,$(MAN1SRC-y)) \
-            $(patsubst man/%.pod.5,txt/man/%.5.txt,$(MAN5SRC-y)) \
-            $(patsubst man/%.pod.7,txt/man/%.7.txt,$(MAN7SRC-y)) \
-            $(patsubst man/%.pod.8,txt/man/%.8.txt,$(MAN8SRC-y))
+            $(patsubst %,txt/%.txt,$(MAN-SRC-y))
 DOC_PDF  := $(patsubst %.markdown,pdf/%.pdf,$(MARKDOWNSRC-y)) \
             $(patsubst %.pandoc,pdf/%.pdf,$(PANDOCSRC-y))
 
@@ -99,7 +79,7 @@ distclean: clean
 define GENERATE_MANPAGE_RULES
 
 # Real manpages
-man$(1)/%.$(1): man/%.pod.$(1) Makefile
+man$(1)/%.$(1): man/%.$(1).pod Makefile
 ifneq ($(POD2MAN),)
        @$(INSTALL_DIR) $$(@D)
        $(POD2MAN) --release=$(VERSION) --name=$$* -s $(1) -c "Xen" $$< $$@
@@ -107,7 +87,7 @@ else
        @echo "pod2man not installed; skipping $$@"
 endif
 
-man$(1)/%.$(1): man/%.markdown.$(1) Makefile
+man$(1)/%.$(1): man/%.$(1).pandoc Makefile
 ifneq ($(PANDOC),)
        @$(INSTALL_DIR) $$(@D)
        $(PANDOC) --standalone -V title=$$* -V section=$(1) \
@@ -118,7 +98,7 @@ else
 endif
 
 # HTML manpages
-html/man/%.$(1).html: man/%.pod.$(1) Makefile
+html/man/%.$(1).html: man/%.$(1).pod Makefile
 ifneq ($(POD2HTML),)
        @$(INSTALL_DIR) $$(@D)
        $(POD2HTML) --infile=$$< --outfile=$$@
@@ -126,7 +106,7 @@ else
        @echo "pod2html not installed; skipping $$@"
 endif
 
-html/man/%.$(1).html: man/%.markdown.$(1) Makefile
+html/man/%.$(1).html: man/%.$(1).pandoc Makefile
 ifneq ($(PANDOC),)
        @$(INSTALL_DIR) $$(@D)
        $(PANDOC) --standalone $$< -t html --toc --output $$@
@@ -135,7 +115,7 @@ else
 endif
 
 # Text manpages
-txt/man/%.$(1).txt: man/%.pod.$(1) Makefile
+txt/man/%.$(1).txt: man/%.$(1).pod Makefile
 ifneq ($(POD2TEXT),)
        @$(INSTALL_DIR) $$(@D)
        $(POD2TEXT) $$< $$@
@@ -143,7 +123,7 @@ else
        @echo "pod2text not installed; skipping $$@"
 endif
 
-txt/man/%.$(1).txt: man/%.markdown.$(1) Makefile
+txt/man/%.$(1).txt: man/%.$(1).pandoc Makefile
 ifneq ($(PANDOC),)
        @$(INSTALL_DIR) $$(@D)
        $(PANDOC) --standalone $$< -t plain --output $$@
@@ -169,7 +149,7 @@ clean-man$(1)-pages:
 # Uninstall
 .PHONY: uninstall-man$(1)-pages
 uninstall-man$(1)-pages:
-       rm -f $(addprefix $(DESTDIR)$(mandir)/man$(1)/, $(filter-out %.pod.$(1) %.markdown.$(1), $(notdir $(DOC_MAN$(1)))))
+       rm -f $(addprefix $(DESTDIR)$(mandir)/,$(DOC_MAN$(1)))
 
 # Link buld/install/clean to toplevel rules
 man-pages: man$(1)-pages
@@ -180,7 +160,7 @@ uninstall-man-pages: uninstall-man$(1)-pages
 endef
 
 # Generate manpage rules for each section
-$(foreach i,1 5 7 8,$(eval $(call GENERATE_MANPAGE_RULES,$(i))))
+$(foreach i,$(MAN_SECTIONS),$(eval $(call GENERATE_MANPAGE_RULES,$(i))))
 
 .PHONY: install-html
 install-html: html txt figs
index a3b4cb6223f6410ad372dba083d13de9f1417b3b..3e0089c435572b664eaf0141a52b9d8fe240349b 100755 (executable)
@@ -1752,7 +1752,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
-ac_config_files="$ac_config_files ../config/Docs.mk man/xl.cfg.pod.5 man/xl.pod.1"
+ac_config_files="$ac_config_files ../config/Docs.mk man/xl.cfg.5.pod man/xl.1.pod"
 
 ac_aux_dir=
 for ac_dir in ../ "$srcdir"/../; do
@@ -3031,8 +3031,8 @@ for ac_config_target in $ac_config_targets
 do
   case $ac_config_target in
     "../config/Docs.mk") CONFIG_FILES="$CONFIG_FILES ../config/Docs.mk" ;;
-    "man/xl.cfg.pod.5") CONFIG_FILES="$CONFIG_FILES man/xl.cfg.pod.5" ;;
-    "man/xl.pod.1") CONFIG_FILES="$CONFIG_FILES man/xl.pod.1" ;;
+    "man/xl.cfg.5.pod") CONFIG_FILES="$CONFIG_FILES man/xl.cfg.5.pod" ;;
+    "man/xl.1.pod") CONFIG_FILES="$CONFIG_FILES man/xl.1.pod" ;;
 
   *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
index a2929c4aaacd4cb52cfb2a7e3ee1860c706f9fa6..577716265c8da707cfd76daebb80924c4cad79c4 100644 (file)
@@ -7,8 +7,8 @@ AC_INIT([Xen Hypervisor Documentation], m4_esyscmd([../version.sh ../xen/Makefil
 AC_CONFIG_SRCDIR([misc/xen-command-line.markdown])
 AC_CONFIG_FILES([
 ../config/Docs.mk
-man/xl.cfg.pod.5
-man/xl.pod.1
+man/xl.cfg.5.pod
+man/xl.1.pod
 ])
 AC_CONFIG_AUX_DIR([../])
 
diff --git a/docs/man/xen-pci-device-reservations.7.pod b/docs/man/xen-pci-device-reservations.7.pod
new file mode 100644 (file)
index 0000000..0df41bc
--- /dev/null
@@ -0,0 +1,89 @@
+=head1 NAME
+
+xen-pci-device-reservations - Xen PCI device ID registry
+
+=head1 Description
+
+PCI vendor ID 0x5853 has been reserved for use by Xen systems in order to
+advertise certain virtual hardware to guest virtual machines. The primary
+use of this is with device ID 0x0001 to advertise the Xen Platform PCI
+device - the presence of this virtual device enables a guest Operating
+System (subject to the availability of suitable drivers) to make use of
+paravirtualisation features such as disk and network devices etc.
+
+Some Xen vendors wish to provide alternative and/or additional guest drivers
+that can bind to virtual devices[1]. This may be done using the Xen PCI
+vendor ID of 0x5853 and Xen-vendor/device specific PCI device IDs. This file
+records reservations made within the device ID range in order to avoid
+multiple Xen vendors using conflicting IDs.
+
+=head1 Guidelines
+
+=over 4
+
+=item 1. A vendor may request a range of device IDs by submitting a patch to
+         this file.
+
+=item 2. Vendor allocations should be in the range 0xc000-0xfffe to reduce the
+         possibility of clashes with community IDs assigned from the bottom up.
+
+=item 3. The vendor is responsible for allocations within the range and should
+         try to record specific device IDs in PCI ID databases such as
+         http://pciids.sourceforge.net and http//www.pcidatabase.com
+
+=back
+
+=head1 Reservations
+
+        range     | vendor/product
+    --------------+--------------------------------------------------------------
+    0x0001        | (Xen Platform PCI device)
+    0x0002        | Citrix XenServer (grandfathered allocation for XenServer 6.1)
+    0xc000-0xc0ff | Citrix XenServer
+    0xc100-0xc1ff | Citrix XenClient
+    0xc200-0xc2ff | XCP-ng Project (https://xcp-ng.org)
+
+=head1 Notes
+
+=over 4
+
+=item 1.
+
+Upstream QEMU provides a parameterized device called xen-pvdevice that
+can be used to host guest drivers. Execute:
+
+    qemu-system-i386 -device xen-pvdevice,help
+
+for a list of all parameters. The following parameters are relevant to
+driver binding:
+
+=over 4
+
+=item  vendor-id (default 0x5853)
+
+The PCI vendor ID and subsystem vendor ID of the device.
+
+=item  device-id (must be specified)
+
+The PCI device ID and subsystem device ID of the device.
+
+=item  revision (default 0x01)
+
+The PCI revision of the device
+
+=back
+
+Also the size parameter (default 0x400000) can be used to specify the
+size of the single MMIO BAR that the device exposes. This area may be
+used by drivers for mapping grant tables, etc.
+
+Note that the presence of the Xen Platform PCI device is generally a
+pre-requisite for an additional xen-pvdevice as it is the platform
+device that provides that IO ports necessary for unplugging emulated
+devices. See hvm-emulated-unplug.markdown for details of the IO ports
+and unplug protocol.
+
+libxl provides support for creation of a single additional xen-pvdevice.
+See the vendor_device parameter in xl.cfg(5).
+
+=back
diff --git a/docs/man/xen-pci-device-reservations.pod.7 b/docs/man/xen-pci-device-reservations.pod.7
deleted file mode 100644 (file)
index 0df41bc..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-=head1 NAME
-
-xen-pci-device-reservations - Xen PCI device ID registry
-
-=head1 Description
-
-PCI vendor ID 0x5853 has been reserved for use by Xen systems in order to
-advertise certain virtual hardware to guest virtual machines. The primary
-use of this is with device ID 0x0001 to advertise the Xen Platform PCI
-device - the presence of this virtual device enables a guest Operating
-System (subject to the availability of suitable drivers) to make use of
-paravirtualisation features such as disk and network devices etc.
-
-Some Xen vendors wish to provide alternative and/or additional guest drivers
-that can bind to virtual devices[1]. This may be done using the Xen PCI
-vendor ID of 0x5853 and Xen-vendor/device specific PCI device IDs. This file
-records reservations made within the device ID range in order to avoid
-multiple Xen vendors using conflicting IDs.
-
-=head1 Guidelines
-
-=over 4
-
-=item 1. A vendor may request a range of device IDs by submitting a patch to
-         this file.
-
-=item 2. Vendor allocations should be in the range 0xc000-0xfffe to reduce the
-         possibility of clashes with community IDs assigned from the bottom up.
-
-=item 3. The vendor is responsible for allocations within the range and should
-         try to record specific device IDs in PCI ID databases such as
-         http://pciids.sourceforge.net and http//www.pcidatabase.com
-
-=back
-
-=head1 Reservations
-
-        range     | vendor/product
-    --------------+--------------------------------------------------------------
-    0x0001        | (Xen Platform PCI device)
-    0x0002        | Citrix XenServer (grandfathered allocation for XenServer 6.1)
-    0xc000-0xc0ff | Citrix XenServer
-    0xc100-0xc1ff | Citrix XenClient
-    0xc200-0xc2ff | XCP-ng Project (https://xcp-ng.org)
-
-=head1 Notes
-
-=over 4
-
-=item 1.
-
-Upstream QEMU provides a parameterized device called xen-pvdevice that
-can be used to host guest drivers. Execute:
-
-    qemu-system-i386 -device xen-pvdevice,help
-
-for a list of all parameters. The following parameters are relevant to
-driver binding:
-
-=over 4
-
-=item  vendor-id (default 0x5853)
-
-The PCI vendor ID and subsystem vendor ID of the device.
-
-=item  device-id (must be specified)
-
-The PCI device ID and subsystem device ID of the device.
-
-=item  revision (default 0x01)
-
-The PCI revision of the device
-
-=back
-
-Also the size parameter (default 0x400000) can be used to specify the
-size of the single MMIO BAR that the device exposes. This area may be
-used by drivers for mapping grant tables, etc.
-
-Note that the presence of the Xen Platform PCI device is generally a
-pre-requisite for an additional xen-pvdevice as it is the platform
-device that provides that IO ports necessary for unplugging emulated
-devices. See hvm-emulated-unplug.markdown for details of the IO ports
-and unplug protocol.
-
-libxl provides support for creation of a single additional xen-pvdevice.
-See the vendor_device parameter in xl.cfg(5).
-
-=back
diff --git a/docs/man/xen-pv-channel.7.pod b/docs/man/xen-pv-channel.7.pod
new file mode 100644 (file)
index 0000000..07898f6
--- /dev/null
@@ -0,0 +1,189 @@
+=encoding utf8
+
+=head1 NAME
+
+xen-pv-channel - Xen PV Channels
+
+=head1 DESCRIPTION
+
+A channel is a low-bandwidth private byte stream similar to a serial
+link. Typical uses of channels are
+
+=over
+
+=item 1.
+
+to provide initial configuration information to a VM on boot
+(example use: CloudStack's cloud-early-config service)
+
+
+=item 2.
+
+to signal/query an in-guest agent
+(example use: oVirt's guest agent)
+
+
+=back
+
+Channels are similar to virtio-serial devices and emulated serial links.
+Channels are intended to be used in the implementation of libvirt s
+when running on Xen.
+
+Note: if an application requires a high-bandwidth link then it should use
+vchan instead.
+
+
+=head2 How to use channels: an example
+
+Consider a cloud deployment where VMs are cloned from pre-made templates,
+and customised on first boot by an in-guest agent which sets the IP address,
+hostname, ssh keys etc. To install the system the cloud administrator would
+first:
+
+=over
+
+=item 1.
+
+Install a guest as normal (no channel configuration necessary)
+
+
+=item 2.
+
+Install the in-guest agent specific to the cloud software. This will
+prepare the guest to communicate over the channel, and also prepare
+the guest to be cloned safely (sometimes known as "sysprepping")
+
+
+=item 3.
+
+Shutdown the guest
+
+
+=item 4.
+
+Register the guest as a template with the cloud orchestration software
+
+
+=item 5.
+
+Install the cloud orchestration agent in dom0
+
+
+=back
+
+At runtime, when a cloud tenant requests that a VM is created from the template,
+the sequence of events would be: (assuming a Linux domU)
+
+=over
+
+=item 1.
+
+A VM is "cloned" from the template
+
+
+=item 2.
+
+A unique Unix domain socket path in dom0 is allocated
+(e.g. /my/cloud/software/talk/to/domain/)
+
+
+=item 3.
+
+Domain configuration is created for the VM, listing the channel
+name expected by the in-guest agent. In xl syntax this would be:
+
+channel = [ "connection=socket, name=org.my.cloud.software.agent.version1, path = /my/cloud/software/talk/to/domain/" ]
+
+=item 4.
+
+The VM is started
+
+
+=item 5.
+
+In dom0 the cloud orchestration agent connects to the Unix domain
+socket, writes a handshake message and waits for a reply
+
+
+=item 6.
+
+Assuming the guest kernel has CONFIG_HVC_XEN_FRONTEND set then the console
+driver will generate a hotplug event
+
+
+=item 7.
+
+A udev rule is activated by the hotplug event.
+
+The udev rule would look something like:
+
+SUBSYSTEM=="xen", DEVPATH=="/devices/console-[0-9]", RUN+="xen-console-setup"
+
+where the "xen-console-setup" script would read the channel name and
+make a symlink in /dev/xen-channel/org.my.cloud.software.agent.version1
+pointing to /dev/hvcN. N is the same number as the number in "/devices/console-[0-9]".
+In other words, "/devices/console-2" maps to /dev/hvc2.
+
+
+=item 8.
+
+The in-guest agent uses inotify to see the creation of the /dev/xen-channel
+symlink and opens the device.
+
+
+=item 9.
+
+The in-guest agent completes the handshake with the dom0 agent
+
+
+=item 10.
+
+The dom0 agent transmits the unique VM configuration: hostname, IP
+address, ssh keys etc etc
+
+
+=item 11.
+
+The in-guest agent receives the configuration and applies it.
+
+
+=back
+
+Using channels avoids having to use a temporary disk device or network
+connection.
+
+
+=head2 Design recommendations and pitfalls
+
+It's necessary to install channel-specific software (an "agent") into the guest
+before you can use a channel. By default a channel will appear as a device
+which could be mistaken for a serial port or regular console. It is known
+that some software will proactively seek out serial ports and issue AT commands
+at them; make sure such software is disabled!
+
+Since channels are identified by names, application authors must ensure their
+channel names are unique to avoid clashes. We recommend that channel names
+include parts unique to the application such as a domain names. To assist
+prevent clashes we recommend authors add their names to our global channel
+registry at the end of this document.
+
+
+=head2 Limitations
+
+Hotplug and unplug of channels is not currently implemented.
+
+
+=head2 Channel name registry
+
+It is important that channel names are globally unique. To help ensure
+that no-one's name clashes with yours, please add yours to this list.
+
+    Key:
+    N: Name
+    C: Contact
+    D: Short description of use, possibly including a URL to your software or API
+
+    N: org.xenproject.guest.clipboard.0.1
+    C: David Scott <dave.scott@citrix.com>
+    D: Share clipboard data via an in-guest agent. See:
+       http://wiki.xenproject.org/wiki/Clipboard_sharing_protocol
diff --git a/docs/man/xen-pv-channel.pod.7 b/docs/man/xen-pv-channel.pod.7
deleted file mode 100644 (file)
index 07898f6..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-=encoding utf8
-
-=head1 NAME
-
-xen-pv-channel - Xen PV Channels
-
-=head1 DESCRIPTION
-
-A channel is a low-bandwidth private byte stream similar to a serial
-link. Typical uses of channels are
-
-=over
-
-=item 1.
-
-to provide initial configuration information to a VM on boot
-(example use: CloudStack's cloud-early-config service)
-
-
-=item 2.
-
-to signal/query an in-guest agent
-(example use: oVirt's guest agent)
-
-
-=back
-
-Channels are similar to virtio-serial devices and emulated serial links.
-Channels are intended to be used in the implementation of libvirt s
-when running on Xen.
-
-Note: if an application requires a high-bandwidth link then it should use
-vchan instead.
-
-
-=head2 How to use channels: an example
-
-Consider a cloud deployment where VMs are cloned from pre-made templates,
-and customised on first boot by an in-guest agent which sets the IP address,
-hostname, ssh keys etc. To install the system the cloud administrator would
-first:
-
-=over
-
-=item 1.
-
-Install a guest as normal (no channel configuration necessary)
-
-
-=item 2.
-
-Install the in-guest agent specific to the cloud software. This will
-prepare the guest to communicate over the channel, and also prepare
-the guest to be cloned safely (sometimes known as "sysprepping")
-
-
-=item 3.
-
-Shutdown the guest
-
-
-=item 4.
-
-Register the guest as a template with the cloud orchestration software
-
-
-=item 5.
-
-Install the cloud orchestration agent in dom0
-
-
-=back
-
-At runtime, when a cloud tenant requests that a VM is created from the template,
-the sequence of events would be: (assuming a Linux domU)
-
-=over
-
-=item 1.
-
-A VM is "cloned" from the template
-
-
-=item 2.
-
-A unique Unix domain socket path in dom0 is allocated
-(e.g. /my/cloud/software/talk/to/domain/)
-
-
-=item 3.
-
-Domain configuration is created for the VM, listing the channel
-name expected by the in-guest agent. In xl syntax this would be:
-
-channel = [ "connection=socket, name=org.my.cloud.software.agent.version1, path = /my/cloud/software/talk/to/domain/" ]
-
-=item 4.
-
-The VM is started
-
-
-=item 5.
-
-In dom0 the cloud orchestration agent connects to the Unix domain
-socket, writes a handshake message and waits for a reply
-
-
-=item 6.
-
-Assuming the guest kernel has CONFIG_HVC_XEN_FRONTEND set then the console
-driver will generate a hotplug event
-
-
-=item 7.
-
-A udev rule is activated by the hotplug event.
-
-The udev rule would look something like:
-
-SUBSYSTEM=="xen", DEVPATH=="/devices/console-[0-9]", RUN+="xen-console-setup"
-
-where the "xen-console-setup" script would read the channel name and
-make a symlink in /dev/xen-channel/org.my.cloud.software.agent.version1
-pointing to /dev/hvcN. N is the same number as the number in "/devices/console-[0-9]".
-In other words, "/devices/console-2" maps to /dev/hvc2.
-
-
-=item 8.
-
-The in-guest agent uses inotify to see the creation of the /dev/xen-channel
-symlink and opens the device.
-
-
-=item 9.
-
-The in-guest agent completes the handshake with the dom0 agent
-
-
-=item 10.
-
-The dom0 agent transmits the unique VM configuration: hostname, IP
-address, ssh keys etc etc
-
-
-=item 11.
-
-The in-guest agent receives the configuration and applies it.
-
-
-=back
-
-Using channels avoids having to use a temporary disk device or network
-connection.
-
-
-=head2 Design recommendations and pitfalls
-
-It's necessary to install channel-specific software (an "agent") into the guest
-before you can use a channel. By default a channel will appear as a device
-which could be mistaken for a serial port or regular console. It is known
-that some software will proactively seek out serial ports and issue AT commands
-at them; make sure such software is disabled!
-
-Since channels are identified by names, application authors must ensure their
-channel names are unique to avoid clashes. We recommend that channel names
-include parts unique to the application such as a domain names. To assist
-prevent clashes we recommend authors add their names to our global channel
-registry at the end of this document.
-
-
-=head2 Limitations
-
-Hotplug and unplug of channels is not currently implemented.
-
-
-=head2 Channel name registry
-
-It is important that channel names are globally unique. To help ensure
-that no-one's name clashes with yours, please add yours to this list.
-
-    Key:
-    N: Name
-    C: Contact
-    D: Short description of use, possibly including a URL to your software or API
-
-    N: org.xenproject.guest.clipboard.0.1
-    C: David Scott <dave.scott@citrix.com>
-    D: Share clipboard data via an in-guest agent. See:
-       http://wiki.xenproject.org/wiki/Clipboard_sharing_protocol
diff --git a/docs/man/xen-tscmode.7.pod b/docs/man/xen-tscmode.7.pod
new file mode 100644 (file)
index 0000000..1d81a3f
--- /dev/null
@@ -0,0 +1,284 @@
+=head1 NAME
+
+xen-tscmode - Xen TSC (time stamp counter) and timekeeping discussion
+
+=head1 OVERVIEW
+
+As of Xen 4.0, a new config option called tsc_mode may be specified
+for each domain.  The default for tsc_mode handles the vast majority
+of hardware and software environments.  This document is targeted
+for Xen users and administrators that may need to select a non-default
+tsc_mode.
+
+Proper selection of tsc_mode depends on an understanding not only of
+the guest operating system (OS), but also of the application set that will
+ever run on this guest OS.  This is because tsc_mode applies
+equally to both the OS and ALL apps that are running on this
+domain, now or in the future.
+
+Key questions to be answered for the OS and/or each application are:
+
+=over 4
+
+=item *
+
+Does the OS/app use the rdtsc instruction at all?
+(We will explain below how to determine this.)
+
+=item *
+
+At what frequency is the rdtsc instruction executed by either the OS
+or any running apps?  If the sum exceeds about 10,000 rdtsc instructions
+per second per processor, we call this a "high-TSC-frequency"
+OS/app/environment.  (This is relatively rare, and developers of OS's
+and apps that are high-TSC-frequency are usually aware of it.)
+
+=item *
+
+If the OS/app does use rdtsc, will it behave incorrectly if "time goes
+backwards" or if the frequency of the TSC suddenly changes?  If so,
+we call this a "TSC-sensitive" app or OS; otherwise it is "TSC-resilient".
+
+=back
+
+This last is the US$64,000 question as it may be very difficult
+(or, for legacy apps, even impossible) to predict all possible
+failure cases.  As a result, unless proven otherwise, any app
+that uses rdtsc must be assumed to be TSC-sensitive and, as we
+will see, this is the default starting in Xen 4.0.
+
+Xen's new tsc_mode parameter determines the circumstances under which
+the family of rdtsc instructions are executed "natively" vs emulated.
+Roughly speaking, native means rdtsc is fast but TSC-sensitive apps
+may, under unpredictable circumstances, run incorrectly; emulated means
+there is some performance degradation (unobservable in most cases),
+but TSC-sensitive apps will always run correctly.  Prior to Xen 4.0,
+all rdtsc instructions were native: "fast but potentially incorrect."
+Starting at Xen 4.0, the default is that all rdtsc instructions are
+"correct but potentially slow".  The tsc_mode parameter in 4.0 provides
+an intelligent default but allows system administrator's to adjust
+how rdtsc instructions are executed differently for different domains.
+
+The non-default choices for tsc_mode are:
+
+=over 4
+
+=item * B<tsc_mode=1> (always emulate).
+
+All rdtsc instructions are emulated; this is the best choice when
+TSC-sensitive apps are running and it is necessary to understand
+worst-case performance degradation for a specific hardware environment.
+
+=item * B<tsc_mode=2> (never emulate).
+
+This is the same as prior to Xen 4.0 and is the best choice if it
+is certain that all apps running in this VM are TSC-resilient and
+highest performance is required.
+
+=item * B<tsc_mode=3> (PVRDTSCP).
+
+This mode has been removed.
+
+=back
+
+If tsc_mode is left unspecified (or set to B<tsc_mode=0>), a hybrid
+algorithm is utilized to ensure correctness while providing the
+best performance possible given:
+
+=over 4
+
+=item *
+
+the requirement of correctness,
+
+=item *
+
+the underlying hardware, and
+
+=item *
+
+whether or not the VM has been saved/restored/migrated
+
+=back
+
+To understand this in more detail, the rest of this document must
+be read.
+
+=head1 DETERMINING RDTSC FREQUENCY
+
+To determine the frequency of rdtsc instructions that are emulated,
+an "xl" command can be used by a privileged user of domain0.  The
+command:
+
+    # xl debug-key s; xl dmesg | tail
+
+provides information about TSC usage in each domain where TSC
+emulation is currently enabled.
+
+=head1 TSC HISTORY
+
+To understand tsc_mode completely, some background on TSC is required:
+
+The x86 "timestamp counter", or TSC, is a 64-bit register on each
+processor that increases monotonically.  Historically, TSC incremented
+every processor cycle, but on recent processors, it increases
+at a constant rate even if the processor changes frequency (for example,
+to reduce processor power usage).  TSC is known by x86 programmers
+as the fastest, highest-precision measurement of the passage of time
+so it is often used as a foundation for performance monitoring.
+And since it is guaranteed to be monotonically increasing and, at
+64 bits, is guaranteed to not wraparound within 10 years, it is
+sometimes used as a random number or a unique sequence identifier,
+such as to stamp transactions so they can be replayed in a specific
+order.
+
+On most older SMP and early multi-core machines, TSC was not synchronized
+between processors.  Thus if an application were to read the TSC on
+one processor, then was moved by the OS to another processor, then read
+TSC again, it might appear that "time went backwards".  This loss of
+monotonicity resulted in many obscure application bugs when TSC-sensitive
+apps were ported from a uniprocessor to an SMP environment; as a result,
+many applications -- especially in the Windows world -- removed their
+dependency on TSC and replaced their timestamp needs with OS-specific
+functions, losing both performance and precision. On some more recent
+generations of multi-core machines, especially multi-socket multi-core
+machines, the TSC was synchronized but if one processor were to enter
+certain low-power states, its TSC would stop, destroying the synchrony
+and again causing obscure bugs.  This reinforced decisions to avoid use
+of TSC altogether.  On the most recent generations of multi-core
+machines, however, synchronization is provided across all processors
+in all power states, even on multi-socket machines, and provide a
+flag that indicates that TSC is synchronized and "invariant".  Thus
+TSC is once again useful for applications, and even newer operating
+systems are using and depending upon TSC for critical timekeeping
+tasks when running on these recent machines.
+
+We will refer to hardware that ensures TSC is both synchronized and
+invariant as "TSC-safe" and any hardware on which TSC is not (or
+may not remain) synchronized as "TSC-unsafe".
+
+As a result of TSC's sordid history, two classes of applications use
+TSC: old applications designed for single processors, and the most recent
+enterprise applications which require high-frequency high-precision
+timestamping.
+
+We will refer to apps that might break if running on a TSC-unsafe
+machine as "TSC-sensitive"; apps that don't use TSC, or do use
+TSC but use it in a way that monotonicity and frequency invariance
+are unimportant as "TSC-resilient".
+
+The emergence of virtualization once again complicates the usage of
+TSC.  When features such as save/restore or live migration are employed,
+a guest OS and all its currently running applications may be invisibly
+transported to an entirely different physical machine.  While TSC
+may be "safe" on one machine, it is essentially impossible to precisely
+synchronize TSC across a data center or even a pool of machines.  As
+a result, when run in a virtualized environment, rare and obscure
+"time going backwards" problems might once again occur for those
+TSC-sensitive applications.  Worse, if a guest OS moves from, for
+example, a 3GHz
+machine to a 1.5GHz machine, attempts by an OS/app to measure time
+intervals with TSC may without notice be incorrect by a factor of two.
+
+The rdtsc (read timestamp counter) instruction is used to read the
+TSC register.  The rdtscp instruction is a variant of rdtsc on recent
+processors.  We refer to these together as the rdtsc family of instructions,
+or just "rdtsc".  Instructions in the rdtsc family are non-privileged, but
+privileged software may set a cpuid bit to cause all rdtsc family
+instructions to trap.  This trap can be detected by Xen, which can
+then transparently "emulate" the results of the rdtsc instruction and
+return control to the code following the rdtsc instruction.
+
+To provide a "safe" TSC, i.e. to ensure both TSC monotonicity and a
+fixed rate, Xen provides rdtsc emulation whenever necessary or when
+explicitly specified by a per-VM configuration option.  TSC emulation is
+relatively slow -- roughly 15-20 times slower than the rdtsc instruction
+when executed natively.  However, except when an OS or application uses
+the rdtsc instruction at a high frequency (e.g. more than about 10,000 times
+per second per processor), this performance degradation is not noticeable
+(i.e. <0.3%).  And, TSC emulation is nearly always faster than
+OS-provided alternatives (e.g. Linux's gettimeofday).  For environments
+where it is certain that all apps are TSC-resilient (e.g.
+"TSC-safeness" is not necessary) and highest performance is a
+requirement, TSC emulation may be entirely disabled (tsc_mode==2).
+
+The default mode (tsc_mode==0) checks TSC-safeness of the underlying
+hardware on which the virtual machine is launched.  If it is
+TSC-safe, rdtsc will execute at hardware speed; if it is not, rdtsc
+will be emulated.  Once a virtual machine is save/restored or migrated,
+however, there are two possibilities: TSC remains native IF the source
+physical machine and target physical machine have the same TSC frequency
+(or, for HVM/PVH guests, if TSC scaling support is available); else TSC
+is emulated.  Note that, though emulated, the "apparent" TSC frequency
+will be the TSC frequency of the initial physical machine, even after
+migration.
+
+Finally, tsc_mode==1 always enables TSC emulation, regardless of
+the underlying physical hardware. The "apparent" TSC frequency will
+be the TSC frequency of the initial physical machine, even after migration.
+This mode is useful to measure any performance degradation that
+might be encountered by a tsc_mode==0 domain after migration occurs,
+or a tsc_mode==3 domain when it is running on TSC-unsafe hardware.
+
+Note that while Xen ensures that an emulated TSC is "safe" across migration,
+it does not ensure that it continues to tick at the same rate during
+the actual migration.  As an oversimplified example, if TSC is ticking
+once per second in a guest, and the guest is saved when the TSC is 1000,
+then restored 30 seconds later, TSC is only guaranteed to be greater
+than or equal to 1001, not precisely 1030.  This has some OS implications
+as will be seen in the next section.
+
+=head1 TSC INVARIANT BIT and NO_MIGRATE
+
+Related to TSC emulation, the "TSC Invariant" bit is architecturally defined
+in a cpuid bit on the most recent x86 processors.  If set, TSC invariance
+ensures that the TSC is "safe", that is it will increment at a constant rate
+regardless of power events, will be synchronized across all processors, and
+was properly initialized to zero on all processors at boot-time
+by system hardware/BIOS.  As long as system software never writes to TSC,
+TSC will be safe and continuously incremented at a fixed rate and thus
+can be used as a system "clocksource".
+
+This bit is used by some OS's, and specifically by Linux starting with
+version 2.6.30(?), to select TSC as a system clocksource.  Once selected,
+TSC remains the Linux system clocksource unless manually overridden.  In
+a virtualized environment, since it is not possible to synchronize TSC
+across all the machines in a pool or data center, a migration may "break"
+TSC as a usable clocksource; while time will not go backwards, it may
+not track wallclock time well enough to avoid certain time-sensitive
+consequences.  As a result, Xen can only expose the TSC Invariant bit
+to a guest OS if it is certain that the domain will never migrate.
+As of Xen 4.0, the "no_migrate=1" VM configuration option may be specified
+to disable migration.  If no_migrate is selected and the VM is running
+on a physical machine with "TSC Invariant", Linux 2.6.30+ will safely
+use TSC as the system clocksource.  But, attempts to migrate or, once
+saved, restore this domain will fail.
+
+There is another cpuid-related complication: The x86 cpuid instruction is
+non-privileged.  HVM domains are configured to always trap this instruction
+to Xen, where Xen can "filter" the result.  In a PV OS, all cpuid instructions
+have been replaced by a paravirtualized equivalent of the cpuid instruction
+("pvcpuid") and also trap to Xen.  But apps in a PV guest that use a
+cpuid instruction execute it directly, without a trap to Xen.  As a result,
+an app may directly examine the physical TSC Invariant cpuid bit and make
+decisions based on that bit.
+
+=head1 HARDWARE TSC SCALING
+
+Intel VMX TSC scaling and AMD SVM TSC ratio allow the guest TSC read
+by guest rdtsc/p increasing in a different frequency than the host
+TSC frequency.
+
+If a HVM container in default TSC mode (tsc_mode=0) is created on a host
+that provides constant TSC, its guest TSC frequency will be the same as
+the host. If it is later migrated to another host that provides constant
+TSC and supports Intel VMX TSC scaling/AMD SVM TSC ratio, its guest TSC
+frequency will be the same before and after migration.
+
+For above HVM container in default TSC mode (tsc_mode=0), if above
+hosts support rdtscp, both guest rdtsc and rdtscp instructions will be
+executed natively before and after migration.
+
+=head1 AUTHORS
+
+Dan Magenheimer <dan.magenheimer@oracle.com>
diff --git a/docs/man/xen-tscmode.pod.7 b/docs/man/xen-tscmode.pod.7
deleted file mode 100644 (file)
index 1d81a3f..0000000
+++ /dev/null
@@ -1,284 +0,0 @@
-=head1 NAME
-
-xen-tscmode - Xen TSC (time stamp counter) and timekeeping discussion
-
-=head1 OVERVIEW
-
-As of Xen 4.0, a new config option called tsc_mode may be specified
-for each domain.  The default for tsc_mode handles the vast majority
-of hardware and software environments.  This document is targeted
-for Xen users and administrators that may need to select a non-default
-tsc_mode.
-
-Proper selection of tsc_mode depends on an understanding not only of
-the guest operating system (OS), but also of the application set that will
-ever run on this guest OS.  This is because tsc_mode applies
-equally to both the OS and ALL apps that are running on this
-domain, now or in the future.
-
-Key questions to be answered for the OS and/or each application are:
-
-=over 4
-
-=item *
-
-Does the OS/app use the rdtsc instruction at all?
-(We will explain below how to determine this.)
-
-=item *
-
-At what frequency is the rdtsc instruction executed by either the OS
-or any running apps?  If the sum exceeds about 10,000 rdtsc instructions
-per second per processor, we call this a "high-TSC-frequency"
-OS/app/environment.  (This is relatively rare, and developers of OS's
-and apps that are high-TSC-frequency are usually aware of it.)
-
-=item *
-
-If the OS/app does use rdtsc, will it behave incorrectly if "time goes
-backwards" or if the frequency of the TSC suddenly changes?  If so,
-we call this a "TSC-sensitive" app or OS; otherwise it is "TSC-resilient".
-
-=back
-
-This last is the US$64,000 question as it may be very difficult
-(or, for legacy apps, even impossible) to predict all possible
-failure cases.  As a result, unless proven otherwise, any app
-that uses rdtsc must be assumed to be TSC-sensitive and, as we
-will see, this is the default starting in Xen 4.0.
-
-Xen's new tsc_mode parameter determines the circumstances under which
-the family of rdtsc instructions are executed "natively" vs emulated.
-Roughly speaking, native means rdtsc is fast but TSC-sensitive apps
-may, under unpredictable circumstances, run incorrectly; emulated means
-there is some performance degradation (unobservable in most cases),
-but TSC-sensitive apps will always run correctly.  Prior to Xen 4.0,
-all rdtsc instructions were native: "fast but potentially incorrect."
-Starting at Xen 4.0, the default is that all rdtsc instructions are
-"correct but potentially slow".  The tsc_mode parameter in 4.0 provides
-an intelligent default but allows system administrator's to adjust
-how rdtsc instructions are executed differently for different domains.
-
-The non-default choices for tsc_mode are:
-
-=over 4
-
-=item * B<tsc_mode=1> (always emulate).
-
-All rdtsc instructions are emulated; this is the best choice when
-TSC-sensitive apps are running and it is necessary to understand
-worst-case performance degradation for a specific hardware environment.
-
-=item * B<tsc_mode=2> (never emulate).
-
-This is the same as prior to Xen 4.0 and is the best choice if it
-is certain that all apps running in this VM are TSC-resilient and
-highest performance is required.
-
-=item * B<tsc_mode=3> (PVRDTSCP).
-
-This mode has been removed.
-
-=back
-
-If tsc_mode is left unspecified (or set to B<tsc_mode=0>), a hybrid
-algorithm is utilized to ensure correctness while providing the
-best performance possible given:
-
-=over 4
-
-=item *
-
-the requirement of correctness,
-
-=item *
-
-the underlying hardware, and
-
-=item *
-
-whether or not the VM has been saved/restored/migrated
-
-=back
-
-To understand this in more detail, the rest of this document must
-be read.
-
-=head1 DETERMINING RDTSC FREQUENCY
-
-To determine the frequency of rdtsc instructions that are emulated,
-an "xl" command can be used by a privileged user of domain0.  The
-command:
-
-    # xl debug-key s; xl dmesg | tail
-
-provides information about TSC usage in each domain where TSC
-emulation is currently enabled.
-
-=head1 TSC HISTORY
-
-To understand tsc_mode completely, some background on TSC is required:
-
-The x86 "timestamp counter", or TSC, is a 64-bit register on each
-processor that increases monotonically.  Historically, TSC incremented
-every processor cycle, but on recent processors, it increases
-at a constant rate even if the processor changes frequency (for example,
-to reduce processor power usage).  TSC is known by x86 programmers
-as the fastest, highest-precision measurement of the passage of time
-so it is often used as a foundation for performance monitoring.
-And since it is guaranteed to be monotonically increasing and, at
-64 bits, is guaranteed to not wraparound within 10 years, it is
-sometimes used as a random number or a unique sequence identifier,
-such as to stamp transactions so they can be replayed in a specific
-order.
-
-On most older SMP and early multi-core machines, TSC was not synchronized
-between processors.  Thus if an application were to read the TSC on
-one processor, then was moved by the OS to another processor, then read
-TSC again, it might appear that "time went backwards".  This loss of
-monotonicity resulted in many obscure application bugs when TSC-sensitive
-apps were ported from a uniprocessor to an SMP environment; as a result,
-many applications -- especially in the Windows world -- removed their
-dependency on TSC and replaced their timestamp needs with OS-specific
-functions, losing both performance and precision. On some more recent
-generations of multi-core machines, especially multi-socket multi-core
-machines, the TSC was synchronized but if one processor were to enter
-certain low-power states, its TSC would stop, destroying the synchrony
-and again causing obscure bugs.  This reinforced decisions to avoid use
-of TSC altogether.  On the most recent generations of multi-core
-machines, however, synchronization is provided across all processors
-in all power states, even on multi-socket machines, and provide a
-flag that indicates that TSC is synchronized and "invariant".  Thus
-TSC is once again useful for applications, and even newer operating
-systems are using and depending upon TSC for critical timekeeping
-tasks when running on these recent machines.
-
-We will refer to hardware that ensures TSC is both synchronized and
-invariant as "TSC-safe" and any hardware on which TSC is not (or
-may not remain) synchronized as "TSC-unsafe".
-
-As a result of TSC's sordid history, two classes of applications use
-TSC: old applications designed for single processors, and the most recent
-enterprise applications which require high-frequency high-precision
-timestamping.
-
-We will refer to apps that might break if running on a TSC-unsafe
-machine as "TSC-sensitive"; apps that don't use TSC, or do use
-TSC but use it in a way that monotonicity and frequency invariance
-are unimportant as "TSC-resilient".
-
-The emergence of virtualization once again complicates the usage of
-TSC.  When features such as save/restore or live migration are employed,
-a guest OS and all its currently running applications may be invisibly
-transported to an entirely different physical machine.  While TSC
-may be "safe" on one machine, it is essentially impossible to precisely
-synchronize TSC across a data center or even a pool of machines.  As
-a result, when run in a virtualized environment, rare and obscure
-"time going backwards" problems might once again occur for those
-TSC-sensitive applications.  Worse, if a guest OS moves from, for
-example, a 3GHz
-machine to a 1.5GHz machine, attempts by an OS/app to measure time
-intervals with TSC may without notice be incorrect by a factor of two.
-
-The rdtsc (read timestamp counter) instruction is used to read the
-TSC register.  The rdtscp instruction is a variant of rdtsc on recent
-processors.  We refer to these together as the rdtsc family of instructions,
-or just "rdtsc".  Instructions in the rdtsc family are non-privileged, but
-privileged software may set a cpuid bit to cause all rdtsc family
-instructions to trap.  This trap can be detected by Xen, which can
-then transparently "emulate" the results of the rdtsc instruction and
-return control to the code following the rdtsc instruction.
-
-To provide a "safe" TSC, i.e. to ensure both TSC monotonicity and a
-fixed rate, Xen provides rdtsc emulation whenever necessary or when
-explicitly specified by a per-VM configuration option.  TSC emulation is
-relatively slow -- roughly 15-20 times slower than the rdtsc instruction
-when executed natively.  However, except when an OS or application uses
-the rdtsc instruction at a high frequency (e.g. more than about 10,000 times
-per second per processor), this performance degradation is not noticeable
-(i.e. <0.3%).  And, TSC emulation is nearly always faster than
-OS-provided alternatives (e.g. Linux's gettimeofday).  For environments
-where it is certain that all apps are TSC-resilient (e.g.
-"TSC-safeness" is not necessary) and highest performance is a
-requirement, TSC emulation may be entirely disabled (tsc_mode==2).
-
-The default mode (tsc_mode==0) checks TSC-safeness of the underlying
-hardware on which the virtual machine is launched.  If it is
-TSC-safe, rdtsc will execute at hardware speed; if it is not, rdtsc
-will be emulated.  Once a virtual machine is save/restored or migrated,
-however, there are two possibilities: TSC remains native IF the source
-physical machine and target physical machine have the same TSC frequency
-(or, for HVM/PVH guests, if TSC scaling support is available); else TSC
-is emulated.  Note that, though emulated, the "apparent" TSC frequency
-will be the TSC frequency of the initial physical machine, even after
-migration.
-
-Finally, tsc_mode==1 always enables TSC emulation, regardless of
-the underlying physical hardware. The "apparent" TSC frequency will
-be the TSC frequency of the initial physical machine, even after migration.
-This mode is useful to measure any performance degradation that
-might be encountered by a tsc_mode==0 domain after migration occurs,
-or a tsc_mode==3 domain when it is running on TSC-unsafe hardware.
-
-Note that while Xen ensures that an emulated TSC is "safe" across migration,
-it does not ensure that it continues to tick at the same rate during
-the actual migration.  As an oversimplified example, if TSC is ticking
-once per second in a guest, and the guest is saved when the TSC is 1000,
-then restored 30 seconds later, TSC is only guaranteed to be greater
-than or equal to 1001, not precisely 1030.  This has some OS implications
-as will be seen in the next section.
-
-=head1 TSC INVARIANT BIT and NO_MIGRATE
-
-Related to TSC emulation, the "TSC Invariant" bit is architecturally defined
-in a cpuid bit on the most recent x86 processors.  If set, TSC invariance
-ensures that the TSC is "safe", that is it will increment at a constant rate
-regardless of power events, will be synchronized across all processors, and
-was properly initialized to zero on all processors at boot-time
-by system hardware/BIOS.  As long as system software never writes to TSC,
-TSC will be safe and continuously incremented at a fixed rate and thus
-can be used as a system "clocksource".
-
-This bit is used by some OS's, and specifically by Linux starting with
-version 2.6.30(?), to select TSC as a system clocksource.  Once selected,
-TSC remains the Linux system clocksource unless manually overridden.  In
-a virtualized environment, since it is not possible to synchronize TSC
-across all the machines in a pool or data center, a migration may "break"
-TSC as a usable clocksource; while time will not go backwards, it may
-not track wallclock time well enough to avoid certain time-sensitive
-consequences.  As a result, Xen can only expose the TSC Invariant bit
-to a guest OS if it is certain that the domain will never migrate.
-As of Xen 4.0, the "no_migrate=1" VM configuration option may be specified
-to disable migration.  If no_migrate is selected and the VM is running
-on a physical machine with "TSC Invariant", Linux 2.6.30+ will safely
-use TSC as the system clocksource.  But, attempts to migrate or, once
-saved, restore this domain will fail.
-
-There is another cpuid-related complication: The x86 cpuid instruction is
-non-privileged.  HVM domains are configured to always trap this instruction
-to Xen, where Xen can "filter" the result.  In a PV OS, all cpuid instructions
-have been replaced by a paravirtualized equivalent of the cpuid instruction
-("pvcpuid") and also trap to Xen.  But apps in a PV guest that use a
-cpuid instruction execute it directly, without a trap to Xen.  As a result,
-an app may directly examine the physical TSC Invariant cpuid bit and make
-decisions based on that bit.
-
-=head1 HARDWARE TSC SCALING
-
-Intel VMX TSC scaling and AMD SVM TSC ratio allow the guest TSC read
-by guest rdtsc/p increasing in a different frequency than the host
-TSC frequency.
-
-If a HVM container in default TSC mode (tsc_mode=0) is created on a host
-that provides constant TSC, its guest TSC frequency will be the same as
-the host. If it is later migrated to another host that provides constant
-TSC and supports Intel VMX TSC scaling/AMD SVM TSC ratio, its guest TSC
-frequency will be the same before and after migration.
-
-For above HVM container in default TSC mode (tsc_mode=0), if above
-hosts support rdtscp, both guest rdtsc and rdtscp instructions will be
-executed natively before and after migration.
-
-=head1 AUTHORS
-
-Dan Magenheimer <dan.magenheimer@oracle.com>
diff --git a/docs/man/xen-vbd-interface.7.pandoc b/docs/man/xen-vbd-interface.7.pandoc
new file mode 100644 (file)
index 0000000..1c996bf
--- /dev/null
@@ -0,0 +1,135 @@
+Xen guest interface
+-------------------
+
+A Xen guest can be provided with block devices.  These are always
+provided as Xen VBDs; for HVM guests they may also be provided as
+emulated IDE, AHCI or SCSI disks.
+
+The abstract interface involves specifying, for each block device:
+
+ * Nominal disk type: Xen virtual disk (aka xvd*, the default); SCSI
+   (sd*); IDE or AHCI (hd*).
+
+   For HVM guests, each whole-disk hd* and and sd* device is made
+   available _both_ via emulated IDE resp. SCSI controller, _and_ as a
+   Xen VBD.  The HVM guest is entitled to assume that the IDE or SCSI
+   disks available via the emulated IDE controller target the same
+   underlying devices as the corresponding Xen VBD (ie, multipath).
+   In hd* case with hdtype=ahci, disk will be AHCI via emulated
+   ich9 disk controller.
+
+   For PV guests every device is made available to the guest only as a
+   Xen VBD.  For these domains the type is advisory, for use by the
+   guest's device naming scheme.
+
+   The Xen interface does not specify what name a device should have
+   in the guest (nor what major/minor device number it should have in
+   the guest, if the guest has such a concept).
+
+ * Disk number, which is a nonnegative integer,
+   conventionally starting at 0 for the first disk.
+
+ * Partition number, which is a nonnegative integer where by
+   convention partition 0 indicates the "whole disk".
+
+   Normally for any disk _either_ partition 0 should be supplied in
+   which case the guest is expected to treat it as they would a native
+   whole disk (for example by putting or expecting a partition table
+   or disk label on it);
+
+   _Or_ only non-0 partitions should be supplied in which case the
+   guest should expect storage management to be done by the host and
+   treat each vbd as it would a partition or slice or LVM volume (for
+   example by putting or expecting a filesystem on it).
+
+   Non-whole disk devices cannot be passed through to HVM guests via
+   the emulated IDE or SCSI controllers.
+
+
+Configuration file syntax
+-------------------------
+
+The config file syntaxes are, for example
+
+       d0 d0p0  xvda     Xen virtual disk 0 partition 0 (whole disk)
+       d1p2     xvdb2    Xen virtual disk 1 partition 2
+       d536p37  xvdtq37  Xen virtual disk 536 partition 37
+       sdb3              SCSI disk 1 partition 3
+       hdc2              IDE disk 2 partition 2
+
+The d*p* syntax is not supported by xm/xend.
+
+To cope with guests which predate this specification we preserve the
+existing facility to specify the xenstore numerical value directly by
+putting a single number (hex, decimal or octal) in the domain config
+file instead of the disk identifier; this number is written directly
+to xenstore (after conversion to the canonical decimal format).
+
+
+Concrete encoding in the VBD interface (in xenstore)
+----------------------------------------------------
+
+The information above is encoded in the concrete interface as an
+integer (in a canonical decimal format in xenstore), whose value
+encodes the information above as follows:
+
+    1 << 28 | disk << 8 | partition      xvd, disks or partitions 16 onwards
+   202 << 8 | disk << 4 | partition      xvd, disks and partitions up to 15
+     8 << 8 | disk << 4 | partition      sd, disks and partitions up to 15
+     3 << 8 | disk << 6 | partition      hd, disks 0..1, partitions 0..63
+    22 << 8 | (disk-2) << 6 | partition  hd, disks 2..3, partitions 0..63
+    2 << 28 onwards                      reserved for future use
+   other values less than 1 << 28        deprecated / reserved
+
+The 1<<28 format handles disks up to (1<<20)-1 and partitions up to
+255.  It will be used only where the 202<<8 format does not have
+enough bits.
+
+Guests MAY support any subset of the formats above except that if they
+support 1<<28 they MUST also support 202<<8.  PV-on-HVM drivers MUST
+support at least one of 3<<8 or 8<<8; 3<<8 is recommended.
+
+Some software has used or understood Linux-specific encodings for SCSI
+disks beyond disk 15 partition 15, and IDE disks beyond disk 3
+partition 63.  These vbds, and the corresponding encoded integers, are
+deprecated.
+
+Guests SHOULD ignore numbers that they do not understand or
+recognise.  They SHOULD check supplied numbers for validity.
+
+
+Notes on Linux as a guest
+-------------------------
+
+Very old Linux guests (PV and PV-on-HVM) are able to "steal" the
+device numbers and names normally used by the IDE and SCSI
+controllers, so that writing "hda1" in the config file results in
+/dev/hda1 in the guest.  These systems interpret the xenstore integer
+as
+       major << 8 | minor
+where major and minor are the Linux-specific device numbers.  Some old
+configurations may depend on deprecated high-numbered SCSI and IDE
+disks.  This does not work in recent versions of Linux.
+
+So for Linux PV guests, users are recommended to supply xvd* devices
+only.  Modern PV drivers will map these to identically-named devices
+in the guest.
+
+For Linux HVM guests using PV-on-HVM drivers, users are recommended to
+supply as few hd* devices as possible, and for the rest of the disks,
+to use pure xvd* devices starting at xvde.  Modern PV-on-HVM drivers
+will map provided hd* devices to the corresponding /dev/xvd* (for
+example, hda is presented also as /dev/xvda).
+
+Some Linux HVM guests with broken PV-on-HVM drivers do not cope
+properly if both hda and hdc are supplied, nor with both hda and xvda,
+because they directly map the bottom 8 bits of the xenstore integer
+directly to the Linux guest's device number and throw away the rest;
+they can crash due to minor number clashes.  With these guests, the
+workaround is not to supply problematic combinations of devices.
+
+
+Other frontend and backend options
+----------------------------------
+
+See xen/include/public/io/blkif.h for the full list of options.
diff --git a/docs/man/xen-vbd-interface.markdown.7 b/docs/man/xen-vbd-interface.markdown.7
deleted file mode 100644 (file)
index 1c996bf..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-Xen guest interface
--------------------
-
-A Xen guest can be provided with block devices.  These are always
-provided as Xen VBDs; for HVM guests they may also be provided as
-emulated IDE, AHCI or SCSI disks.
-
-The abstract interface involves specifying, for each block device:
-
- * Nominal disk type: Xen virtual disk (aka xvd*, the default); SCSI
-   (sd*); IDE or AHCI (hd*).
-
-   For HVM guests, each whole-disk hd* and and sd* device is made
-   available _both_ via emulated IDE resp. SCSI controller, _and_ as a
-   Xen VBD.  The HVM guest is entitled to assume that the IDE or SCSI
-   disks available via the emulated IDE controller target the same
-   underlying devices as the corresponding Xen VBD (ie, multipath).
-   In hd* case with hdtype=ahci, disk will be AHCI via emulated
-   ich9 disk controller.
-
-   For PV guests every device is made available to the guest only as a
-   Xen VBD.  For these domains the type is advisory, for use by the
-   guest's device naming scheme.
-
-   The Xen interface does not specify what name a device should have
-   in the guest (nor what major/minor device number it should have in
-   the guest, if the guest has such a concept).
-
- * Disk number, which is a nonnegative integer,
-   conventionally starting at 0 for the first disk.
-
- * Partition number, which is a nonnegative integer where by
-   convention partition 0 indicates the "whole disk".
-
-   Normally for any disk _either_ partition 0 should be supplied in
-   which case the guest is expected to treat it as they would a native
-   whole disk (for example by putting or expecting a partition table
-   or disk label on it);
-
-   _Or_ only non-0 partitions should be supplied in which case the
-   guest should expect storage management to be done by the host and
-   treat each vbd as it would a partition or slice or LVM volume (for
-   example by putting or expecting a filesystem on it).
-
-   Non-whole disk devices cannot be passed through to HVM guests via
-   the emulated IDE or SCSI controllers.
-
-
-Configuration file syntax
--------------------------
-
-The config file syntaxes are, for example
-
-       d0 d0p0  xvda     Xen virtual disk 0 partition 0 (whole disk)
-       d1p2     xvdb2    Xen virtual disk 1 partition 2
-       d536p37  xvdtq37  Xen virtual disk 536 partition 37
-       sdb3              SCSI disk 1 partition 3
-       hdc2              IDE disk 2 partition 2
-
-The d*p* syntax is not supported by xm/xend.
-
-To cope with guests which predate this specification we preserve the
-existing facility to specify the xenstore numerical value directly by
-putting a single number (hex, decimal or octal) in the domain config
-file instead of the disk identifier; this number is written directly
-to xenstore (after conversion to the canonical decimal format).
-
-
-Concrete encoding in the VBD interface (in xenstore)
-----------------------------------------------------
-
-The information above is encoded in the concrete interface as an
-integer (in a canonical decimal format in xenstore), whose value
-encodes the information above as follows:
-
-    1 << 28 | disk << 8 | partition      xvd, disks or partitions 16 onwards
-   202 << 8 | disk << 4 | partition      xvd, disks and partitions up to 15
-     8 << 8 | disk << 4 | partition      sd, disks and partitions up to 15
-     3 << 8 | disk << 6 | partition      hd, disks 0..1, partitions 0..63
-    22 << 8 | (disk-2) << 6 | partition  hd, disks 2..3, partitions 0..63
-    2 << 28 onwards                      reserved for future use
-   other values less than 1 << 28        deprecated / reserved
-
-The 1<<28 format handles disks up to (1<<20)-1 and partitions up to
-255.  It will be used only where the 202<<8 format does not have
-enough bits.
-
-Guests MAY support any subset of the formats above except that if they
-support 1<<28 they MUST also support 202<<8.  PV-on-HVM drivers MUST
-support at least one of 3<<8 or 8<<8; 3<<8 is recommended.
-
-Some software has used or understood Linux-specific encodings for SCSI
-disks beyond disk 15 partition 15, and IDE disks beyond disk 3
-partition 63.  These vbds, and the corresponding encoded integers, are
-deprecated.
-
-Guests SHOULD ignore numbers that they do not understand or
-recognise.  They SHOULD check supplied numbers for validity.
-
-
-Notes on Linux as a guest
--------------------------
-
-Very old Linux guests (PV and PV-on-HVM) are able to "steal" the
-device numbers and names normally used by the IDE and SCSI
-controllers, so that writing "hda1" in the config file results in
-/dev/hda1 in the guest.  These systems interpret the xenstore integer
-as
-       major << 8 | minor
-where major and minor are the Linux-specific device numbers.  Some old
-configurations may depend on deprecated high-numbered SCSI and IDE
-disks.  This does not work in recent versions of Linux.
-
-So for Linux PV guests, users are recommended to supply xvd* devices
-only.  Modern PV drivers will map these to identically-named devices
-in the guest.
-
-For Linux HVM guests using PV-on-HVM drivers, users are recommended to
-supply as few hd* devices as possible, and for the rest of the disks,
-to use pure xvd* devices starting at xvde.  Modern PV-on-HVM drivers
-will map provided hd* devices to the corresponding /dev/xvd* (for
-example, hda is presented also as /dev/xvda).
-
-Some Linux HVM guests with broken PV-on-HVM drivers do not cope
-properly if both hda and hdc are supplied, nor with both hda and xvda,
-because they directly map the bottom 8 bits of the xenstore integer
-directly to the Linux guest's device number and throw away the rest;
-they can crash due to minor number clashes.  With these guests, the
-workaround is not to supply problematic combinations of devices.
-
-
-Other frontend and backend options
-----------------------------------
-
-See xen/include/public/io/blkif.h for the full list of options.
diff --git a/docs/man/xen-vtpm.7.pod b/docs/man/xen-vtpm.7.pod
new file mode 100644 (file)
index 0000000..1d81856
--- /dev/null
@@ -0,0 +1,383 @@
+=head1 NAME
+
+xen-vtpm - Xen virtual Trusted Platform Module (vTPM) subsystem
+
+=head1 RUBRIC
+
+Copyright (c) 2010-2012 United States Government, as represented by
+the Secretary of Defense.  All rights reserved.
+November 12 2012
+Authors: Matthew Fioravante (JHUAPL), Daniel De Graaf (NSA)
+
+This document describes the virtual Trusted Platform Module (vTPM) subsystem
+for Xen. The reader is assumed to have familiarity with building and installing
+Xen, Linux, and a basic understanding of the TPM and vTPM concepts.
+
+=head1 INTRODUCTION
+
+The goal of this work is to provide a TPM functionality to a virtual guest
+operating system (a DomU).  This allows programs to interact with a TPM in a
+virtual system the same way they interact with a TPM on the physical system.
+Each guest gets its own unique, emulated, software TPM.  However, each of the
+vTPM's secrets (Keys, NVRAM, etc) are managed by a vTPM Manager domain, which
+seals the secrets to the Physical TPM.  If the process of creating each of these
+domains (manager, vTPM, and guest) is trusted, the vTPM subsystem extends the
+chain of trust rooted in the hardware TPM to virtual machines in Xen. Each
+major component of vTPM is implemented as a separate domain, providing secure
+separation guaranteed by the hypervisor. The vTPM domains are implemented in
+mini-os to reduce memory and processor overhead.
+This mini-os vTPM subsystem was built on top of the previous vTPM work done by
+IBM and Intel corporation.
+=head1 DESIGN OVERVIEW
+
+The architecture of vTPM is described below:
+
+    +------------------+
+    |    Linux DomU    | ...
+    |       |  ^       |
+    |       v  |       |
+    |   xen-tpmfront   |
+    +------------------+
+            |  ^
+            v  |
+    +------------------+
+    | mini-os/tpmback  |
+    |       |  ^       |
+    |       v  |       |
+    |  vtpm-stubdom    | ...
+    |       |  ^       |
+    |       v  |       |
+    | mini-os/tpmfront |
+    +------------------+
+            |  ^
+            v  |
+    +------------------+
+    | mini-os/tpmback  |
+    |       |  ^       |
+    |       v  |       |
+    | vtpmmgr-stubdom  |
+    |       |  ^       |
+    |       v  |       |
+    | mini-os/tpm_tis  |
+    +------------------+
+            |  ^
+            v  |
+    +------------------+
+    |   Hardware TPM   |
+    +------------------+
+
+=over 4
+
+=item Linux DomU
+
+The Linux based guest that wants to use a vTPM. There many be
+more than one of these.
+
+=item xen-tpmfront.ko
+
+Linux kernel virtual TPM frontend driver. This driver
+provides vTPM access to a para-virtualized Linux based DomU.
+
+=item mini-os/tpmback
+
+Mini-os TPM backend driver. The Linux frontend driver
+connects to this backend driver to facilitate
+communications between the Linux DomU and its vTPM. This
+driver is also used by vtpmmgr-stubdom to communicate with
+vtpm-stubdom.
+
+=item vtpm-stubdom
+
+A mini-os stub domain that implements a vTPM. There is a
+one to one mapping between running vtpm-stubdom instances and
+logical vtpms on the system. The vTPM Platform Configuration
+Registers (PCRs) are all initialized to zero.
+
+=item mini-os/tpmfront
+
+Mini-os TPM frontend driver. The vTPM mini-os domain
+vtpm-stubdom uses this driver to communicate with
+vtpmmgr-stubdom. This driver could also be used separately to
+implement a mini-os domain that wishes to use a vTPM of
+its own.
+
+=item vtpmmgr-stubdom
+
+A mini-os domain that implements the vTPM manager.
+There is only one vTPM manager and it should be running during
+the entire lifetime of the machine.  This domain regulates
+access to the physical TPM on the system and secures the
+persistent state of each vTPM.
+
+=item mini-os/tpm_tis
+
+Mini-os TPM version 1.2 TPM Interface Specification (TIS)
+driver. This driver used by vtpmmgr-stubdom to talk directly to
+the hardware TPM. Communication is facilitated by mapping
+hardware memory pages into vtpmmgr-stubdom.
+
+=item Hardware TPM
+
+The physical TPM that is soldered onto the motherboard.
+
+=back
+
+=head1 INSTALLATION
+
+=head2 Prerequisites:
+
+You must have an x86 machine with a TPM on the motherboard.  The only extra
+software requirement for compiling vTPM is cmake.  You must use libxl to manage
+domains with vTPMs; 'xm' is deprecated and does not support vTPMs.
+
+=head2 Compiling the Xen tree:
+
+Compile and install the Xen tree as usual; be sure that the vTPM domains are
+enabled when you run configure.
+
+=head2 Compiling the LINUX dom0 kernel:
+
+Because the TPM manager uses direct access to the physical TPM, it may interfere
+with access to the TPM by dom0.  The simplest solution for this is to prevent
+dom0 from accessing the physical TPM by compiling the kernel without a driver or
+blacklisting the module.  If dom0 needs a TPM but does not need to use it during
+the boot process (i.e. it is not using IMA), a virtual TPM can be attached to
+dom0 after the system is booted.
+
+Access to the physical TPM may be required in order to manage the NVRAM or to
+perform other advanced operations where the vTPM is insufficient.  In order to
+prevent interference, the TPM Manager and dom0 should use different values for
+the TPM's locality; since Linux always uses locality 0, using locality 2 for the
+TPM Manager is recommended.  If both Linux and the TPM Manager attempt to access
+the TPM at the same time, the TPM device will return a busy status; some
+applications will consider this a fatal error instead of retrying the command at
+a later time.  If a vTPM gets an error when loading its key, it will currently
+generate a fresh vTPM image (with a new EK, SRK, and blank NVRAM).
+
+
+=head2 Compiling the LINUX domU kernel:
+
+The domU kernel used by domains with vtpms must include the xen-tpmfront.ko
+driver. It can be built directly into the kernel or as a module; however, some
+features such as IMA require the TPM to be built in to the kernel.
+
+    CONFIG_TCG_TPM=y
+    CONFIG_TCG_XEN=y
+
+=head1 VTPM MANAGER SETUP
+
+=head2 Manager disk image setup:
+
+The vTPM Manager requires a disk image to store its encrypted data. The image
+does not require a filesystem and can live anywhere on the host disk. The image
+is not large; the Xen 4.5 vtpmmgr is limited to using the first 2MB of the image
+but can support more than 20,000 vTPMs.
+
+=head2 Manager config file:
+
+The vTPM Manager domain (vtpmmgr-stubdom) must be started like any other Xen
+virtual machine and requires a config file.  The manager requires a disk image
+for storage and permission to access the hardware memory pages for the TPM. The
+disk must be presented as "hda", and the TPM memory pages are passed using the
+iomem configuration parameter. The TPM TIS uses 5 pages of IO memory (one per
+locality) that start at physical address 0xfed40000. By default, the TPM manager
+uses locality 0 (so only the page at 0xfed40 is needed); this can be changed on
+the domain's command line.  For full functionality in deep quotes, using
+locality 2 is required to manipulate PCR 20-22.
+
+=head2 Starting and stopping the manager:
+
+The vTPM manager should be started at boot; you may wish to create an init
+script to do this.  If a domain builder is used, the TPM Manager should be
+started by the domain builder to minimize the trusted computing base for the
+vTPM manager's secrets.
+
+Once initialization is complete you should see the following:
+
+    INFO[VTPM]: Waiting for commands from vTPM's:
+
+The TPM Manager does not respond to shutdown requests; use the destroy command
+to shut it down.
+
+=head1 VTPM AND LINUX PVM SETUP
+
+=head2 vTPM disk image setup:
+
+The vTPM requires a disk image to store its persistent data (RSA keys, NVRAM,
+etc). The image does not require a filesystem. The image does not need to be
+large; 2 Mb should be sufficient.
+
+=head2 vTPM config file:
+
+The vTPM domain requires a configuration file like any other domain. The vTPM
+requires a disk image for storage and a TPM frontend driver to communicate with
+the manager.  You are required to generate a uuid for this vtpm, which is
+specified on the C<vtpm=> line that describes its connection to the vTPM Manager.
+The uuidgen application may be used to generate a uuid, or one from the output
+of the C<manage-vtpmmgr.pl vtpm-add> command may be used to create a vTPM
+belonging to a specific group.
+
+If you wish to clear the vTPM data you can either recreate the disk image or
+change the uuid.
+
+=head2 Linux Guest config file:
+
+The Linux guest config file needs to be modified to include the Linux tpmfront
+driver. Add the following line:
+
+    vtpm=["backend=domu-vtpm"]
+
+Currently only Linux guests are supported (PV or HVM with PV drivers).
+
+While attaching a vTPM after a guest is booted (using xl vtpm-attach) is
+supported, the attached vTPM will not have a record of the boot of the attached
+guest.  Furthermore, if the vTPM has been freshly created, a malicious guest
+could then extend any values into PCRs, potentially forging its boot
+configuration.  Attaching a vTPM to a running domain should only be used for
+trusted domains or when measurements have already been sent to the vTPM from
+another source.
+
+=head2 Using the vTPM in the guest:
+
+If xen-tpmfront was compiled as a module, it must be loaded it in the guest.
+
+    # modprobe xen-tpmfront
+
+After the Linux domain boots and the xen-tpmfront driver is loaded, you should
+see the following on the vtpm console:
+
+    Info: VTPM attached to Frontend X/Y
+
+You can quickly test the vTPM by using the sysfs interface:
+
+    # cat /sys/devices/vtpm-0/pubek
+    # cat /sys/devices/vtpm-0/pcrs
+
+If you have trousers and tpm_tools installed on the guest, the tpm_version
+command should return the following:
+
+The version command should return the following:
+
+    TPM 1.2 Version Info:
+    Chip Version:        1.2.0.7
+    Spec Level:          2
+    Errata Revision:     1
+    TPM Vendor ID:       ETHZ
+    TPM Version:         01010000
+    Manufacturer Info:   4554485a
+
+You should also see the command being sent to the vtpm console as well as the
+vtpm saving its state. You should see the vtpm key being encrypted and stored on
+the vtpmmgr console.
+
+You may wish to write a script to start your vtpm and guest together and to
+destroy the vtpm when the guest shuts down.
+
+=head1 INTEGRATION WITH PV-GRUB
+
+The vTPM currently starts up with all PCRs set to their default values (all
+zeros for the lower 16).  This means that any decisions about the
+trustworthiness of the created domain must be made based on the environment that
+created the vTPM and the domU; for example, a system that only constructs images
+using a trusted configuration and guest kernel be able to provide guarantees
+about the guests and any measurements done that kernel (such as the IMA TCB
+log).  Guests wishing to use a custom kernel in such a secure environment are
+often started using the pv-grub bootloader as the kernel, which then can load
+the untrusted kernel without needing to parse an untrusted filesystem and kernel
+in dom0.  If the pv-grub stub domain succeeds in connecting to a vTPM, it will
+extend the hash of the kernel that it boots into PCR #4, and will extend the
+command line and initrd into PCR #5 before booting so that a domU booted in this
+way can attest to its early boot state.
+
+=head1 MORE INFORMATION
+
+See <xen-vtpmmgr(7)> for more details about how the manager domain works, how to use
+it, and its command line parameters.
+
+=head1 VTPM DOMAIN OPERATION
+
+The vtpm-stubdom is a mini-OS domain that emulates a TPM for the guest OS to
+use. It is a small wrapper around the Berlios TPM emulator version 0.7.4.
+Commands are passed from the linux guest via the mini-os TPM backend driver.
+vTPM data is encrypted and stored via a disk image provided to the virtual
+machine. The key used to encrypt the data along with a hash of the vTPM's data
+is sent to the vTPM manager for secure storage and later retrieval.  The vTPM
+domain communicates with the manager using a mini-os tpm front/back device pair.
+
+=head1 VTPM DOMAIN COMMAND LINE ARGUMENTS
+
+Command line arguments are passed to the domain via the 'extra' parameter in the
+VM config file. Each parameter is separated by white space. For example:
+
+    extra="foo=bar baz"
+
+=head2 List of Arguments:
+
+=over 4
+
+=item B<loglevel>=<LOG>
+
+Controls the amount of logging printed to the console.
+The possible values for <LOG> are:
+
+=over 4
+
+=item * error
+
+=item * info (default)
+
+=item * debug
+
+=back
+
+=item B<clear>
+
+Start the Berlios emulator in "clear" mode. (default)
+
+=item B<save>
+
+Start the Berlios emulator in "save" mode.
+
+=item B<deactivated>
+
+Start the Berlios emulator in "deactivated" mode.
+See the Berlios TPM emulator documentation for details
+about the startup mode. For all normal use, always use clear
+which is the default. You should not need to specify any of these.
+
+=item B<maintcmds>=<1|0>
+
+Enable to disable the TPM maintenance commands.
+These commands are used by tpm manufacturers and thus
+open a security hole. They are disabled by default.
+
+=item B<hwinitpcr>=<PCRSPEC>
+
+Initialize the virtual Platform Configuration Registers
+(PCRs) with PCR values from the hardware TPM. Each pcr specified by
+<PCRSPEC> will be initialized with the value of that same PCR in TPM
+once at startup. By default all PCRs are zero initialized.
+Possible values of <PCRSPEC> are:
+
+=over
+
+=item * all: copy all pcrs
+
+=item * none: copy no pcrs (default)
+
+=item * <N>: copy pcr n
+
+=item * <X-Y>: copy pcrs x to y (inclusive)
+
+=back
+
+These can also be combined by comma separation, for example:
+C<hwinitpcrs=5,12-16> will copy pcrs 5, 12, 13, 14, 15, and 16.
+
+=back
+
+=head1 REFERENCES
+
+Berlios TPM Emulator: L<http://tpm-emulator.berlios.de/>
diff --git a/docs/man/xen-vtpm.pod.7 b/docs/man/xen-vtpm.pod.7
deleted file mode 100644 (file)
index 1d81856..0000000
+++ /dev/null
@@ -1,383 +0,0 @@
-=head1 NAME
-
-xen-vtpm - Xen virtual Trusted Platform Module (vTPM) subsystem
-
-=head1 RUBRIC
-
-Copyright (c) 2010-2012 United States Government, as represented by
-the Secretary of Defense.  All rights reserved.
-November 12 2012
-Authors: Matthew Fioravante (JHUAPL), Daniel De Graaf (NSA)
-
-This document describes the virtual Trusted Platform Module (vTPM) subsystem
-for Xen. The reader is assumed to have familiarity with building and installing
-Xen, Linux, and a basic understanding of the TPM and vTPM concepts.
-
-=head1 INTRODUCTION
-
-The goal of this work is to provide a TPM functionality to a virtual guest
-operating system (a DomU).  This allows programs to interact with a TPM in a
-virtual system the same way they interact with a TPM on the physical system.
-Each guest gets its own unique, emulated, software TPM.  However, each of the
-vTPM's secrets (Keys, NVRAM, etc) are managed by a vTPM Manager domain, which
-seals the secrets to the Physical TPM.  If the process of creating each of these
-domains (manager, vTPM, and guest) is trusted, the vTPM subsystem extends the
-chain of trust rooted in the hardware TPM to virtual machines in Xen. Each
-major component of vTPM is implemented as a separate domain, providing secure
-separation guaranteed by the hypervisor. The vTPM domains are implemented in
-mini-os to reduce memory and processor overhead.
-This mini-os vTPM subsystem was built on top of the previous vTPM work done by
-IBM and Intel corporation.
-=head1 DESIGN OVERVIEW
-
-The architecture of vTPM is described below:
-
-    +------------------+
-    |    Linux DomU    | ...
-    |       |  ^       |
-    |       v  |       |
-    |   xen-tpmfront   |
-    +------------------+
-            |  ^
-            v  |
-    +------------------+
-    | mini-os/tpmback  |
-    |       |  ^       |
-    |       v  |       |
-    |  vtpm-stubdom    | ...
-    |       |  ^       |
-    |       v  |       |
-    | mini-os/tpmfront |
-    +------------------+
-            |  ^
-            v  |
-    +------------------+
-    | mini-os/tpmback  |
-    |       |  ^       |
-    |       v  |       |
-    | vtpmmgr-stubdom  |
-    |       |  ^       |
-    |       v  |       |
-    | mini-os/tpm_tis  |
-    +------------------+
-            |  ^
-            v  |
-    +------------------+
-    |   Hardware TPM   |
-    +------------------+
-
-=over 4
-
-=item Linux DomU
-
-The Linux based guest that wants to use a vTPM. There many be
-more than one of these.
-
-=item xen-tpmfront.ko
-
-Linux kernel virtual TPM frontend driver. This driver
-provides vTPM access to a para-virtualized Linux based DomU.
-
-=item mini-os/tpmback
-
-Mini-os TPM backend driver. The Linux frontend driver
-connects to this backend driver to facilitate
-communications between the Linux DomU and its vTPM. This
-driver is also used by vtpmmgr-stubdom to communicate with
-vtpm-stubdom.
-
-=item vtpm-stubdom
-
-A mini-os stub domain that implements a vTPM. There is a
-one to one mapping between running vtpm-stubdom instances and
-logical vtpms on the system. The vTPM Platform Configuration
-Registers (PCRs) are all initialized to zero.
-
-=item mini-os/tpmfront
-
-Mini-os TPM frontend driver. The vTPM mini-os domain
-vtpm-stubdom uses this driver to communicate with
-vtpmmgr-stubdom. This driver could also be used separately to
-implement a mini-os domain that wishes to use a vTPM of
-its own.
-
-=item vtpmmgr-stubdom
-
-A mini-os domain that implements the vTPM manager.
-There is only one vTPM manager and it should be running during
-the entire lifetime of the machine.  This domain regulates
-access to the physical TPM on the system and secures the
-persistent state of each vTPM.
-
-=item mini-os/tpm_tis
-
-Mini-os TPM version 1.2 TPM Interface Specification (TIS)
-driver. This driver used by vtpmmgr-stubdom to talk directly to
-the hardware TPM. Communication is facilitated by mapping
-hardware memory pages into vtpmmgr-stubdom.
-
-=item Hardware TPM
-
-The physical TPM that is soldered onto the motherboard.
-
-=back
-
-=head1 INSTALLATION
-
-=head2 Prerequisites:
-
-You must have an x86 machine with a TPM on the motherboard.  The only extra
-software requirement for compiling vTPM is cmake.  You must use libxl to manage
-domains with vTPMs; 'xm' is deprecated and does not support vTPMs.
-
-=head2 Compiling the Xen tree:
-
-Compile and install the Xen tree as usual; be sure that the vTPM domains are
-enabled when you run configure.
-
-=head2 Compiling the LINUX dom0 kernel:
-
-Because the TPM manager uses direct access to the physical TPM, it may interfere
-with access to the TPM by dom0.  The simplest solution for this is to prevent
-dom0 from accessing the physical TPM by compiling the kernel without a driver or
-blacklisting the module.  If dom0 needs a TPM but does not need to use it during
-the boot process (i.e. it is not using IMA), a virtual TPM can be attached to
-dom0 after the system is booted.
-
-Access to the physical TPM may be required in order to manage the NVRAM or to
-perform other advanced operations where the vTPM is insufficient.  In order to
-prevent interference, the TPM Manager and dom0 should use different values for
-the TPM's locality; since Linux always uses locality 0, using locality 2 for the
-TPM Manager is recommended.  If both Linux and the TPM Manager attempt to access
-the TPM at the same time, the TPM device will return a busy status; some
-applications will consider this a fatal error instead of retrying the command at
-a later time.  If a vTPM gets an error when loading its key, it will currently
-generate a fresh vTPM image (with a new EK, SRK, and blank NVRAM).
-
-
-=head2 Compiling the LINUX domU kernel:
-
-The domU kernel used by domains with vtpms must include the xen-tpmfront.ko
-driver. It can be built directly into the kernel or as a module; however, some
-features such as IMA require the TPM to be built in to the kernel.
-
-    CONFIG_TCG_TPM=y
-    CONFIG_TCG_XEN=y
-
-=head1 VTPM MANAGER SETUP
-
-=head2 Manager disk image setup:
-
-The vTPM Manager requires a disk image to store its encrypted data. The image
-does not require a filesystem and can live anywhere on the host disk. The image
-is not large; the Xen 4.5 vtpmmgr is limited to using the first 2MB of the image
-but can support more than 20,000 vTPMs.
-
-=head2 Manager config file:
-
-The vTPM Manager domain (vtpmmgr-stubdom) must be started like any other Xen
-virtual machine and requires a config file.  The manager requires a disk image
-for storage and permission to access the hardware memory pages for the TPM. The
-disk must be presented as "hda", and the TPM memory pages are passed using the
-iomem configuration parameter. The TPM TIS uses 5 pages of IO memory (one per
-locality) that start at physical address 0xfed40000. By default, the TPM manager
-uses locality 0 (so only the page at 0xfed40 is needed); this can be changed on
-the domain's command line.  For full functionality in deep quotes, using
-locality 2 is required to manipulate PCR 20-22.
-
-=head2 Starting and stopping the manager:
-
-The vTPM manager should be started at boot; you may wish to create an init
-script to do this.  If a domain builder is used, the TPM Manager should be
-started by the domain builder to minimize the trusted computing base for the
-vTPM manager's secrets.
-
-Once initialization is complete you should see the following:
-
-    INFO[VTPM]: Waiting for commands from vTPM's:
-
-The TPM Manager does not respond to shutdown requests; use the destroy command
-to shut it down.
-
-=head1 VTPM AND LINUX PVM SETUP
-
-=head2 vTPM disk image setup:
-
-The vTPM requires a disk image to store its persistent data (RSA keys, NVRAM,
-etc). The image does not require a filesystem. The image does not need to be
-large; 2 Mb should be sufficient.
-
-=head2 vTPM config file:
-
-The vTPM domain requires a configuration file like any other domain. The vTPM
-requires a disk image for storage and a TPM frontend driver to communicate with
-the manager.  You are required to generate a uuid for this vtpm, which is
-specified on the C<vtpm=> line that describes its connection to the vTPM Manager.
-The uuidgen application may be used to generate a uuid, or one from the output
-of the C<manage-vtpmmgr.pl vtpm-add> command may be used to create a vTPM
-belonging to a specific group.
-
-If you wish to clear the vTPM data you can either recreate the disk image or
-change the uuid.
-
-=head2 Linux Guest config file:
-
-The Linux guest config file needs to be modified to include the Linux tpmfront
-driver. Add the following line:
-
-    vtpm=["backend=domu-vtpm"]
-
-Currently only Linux guests are supported (PV or HVM with PV drivers).
-
-While attaching a vTPM after a guest is booted (using xl vtpm-attach) is
-supported, the attached vTPM will not have a record of the boot of the attached
-guest.  Furthermore, if the vTPM has been freshly created, a malicious guest
-could then extend any values into PCRs, potentially forging its boot
-configuration.  Attaching a vTPM to a running domain should only be used for
-trusted domains or when measurements have already been sent to the vTPM from
-another source.
-
-=head2 Using the vTPM in the guest:
-
-If xen-tpmfront was compiled as a module, it must be loaded it in the guest.
-
-    # modprobe xen-tpmfront
-
-After the Linux domain boots and the xen-tpmfront driver is loaded, you should
-see the following on the vtpm console:
-
-    Info: VTPM attached to Frontend X/Y
-
-You can quickly test the vTPM by using the sysfs interface:
-
-    # cat /sys/devices/vtpm-0/pubek
-    # cat /sys/devices/vtpm-0/pcrs
-
-If you have trousers and tpm_tools installed on the guest, the tpm_version
-command should return the following:
-
-The version command should return the following:
-
-    TPM 1.2 Version Info:
-    Chip Version:        1.2.0.7
-    Spec Level:          2
-    Errata Revision:     1
-    TPM Vendor ID:       ETHZ
-    TPM Version:         01010000
-    Manufacturer Info:   4554485a
-
-You should also see the command being sent to the vtpm console as well as the
-vtpm saving its state. You should see the vtpm key being encrypted and stored on
-the vtpmmgr console.
-
-You may wish to write a script to start your vtpm and guest together and to
-destroy the vtpm when the guest shuts down.
-
-=head1 INTEGRATION WITH PV-GRUB
-
-The vTPM currently starts up with all PCRs set to their default values (all
-zeros for the lower 16).  This means that any decisions about the
-trustworthiness of the created domain must be made based on the environment that
-created the vTPM and the domU; for example, a system that only constructs images
-using a trusted configuration and guest kernel be able to provide guarantees
-about the guests and any measurements done that kernel (such as the IMA TCB
-log).  Guests wishing to use a custom kernel in such a secure environment are
-often started using the pv-grub bootloader as the kernel, which then can load
-the untrusted kernel without needing to parse an untrusted filesystem and kernel
-in dom0.  If the pv-grub stub domain succeeds in connecting to a vTPM, it will
-extend the hash of the kernel that it boots into PCR #4, and will extend the
-command line and initrd into PCR #5 before booting so that a domU booted in this
-way can attest to its early boot state.
-
-=head1 MORE INFORMATION
-
-See <xen-vtpmmgr(7)> for more details about how the manager domain works, how to use
-it, and its command line parameters.
-
-=head1 VTPM DOMAIN OPERATION
-
-The vtpm-stubdom is a mini-OS domain that emulates a TPM for the guest OS to
-use. It is a small wrapper around the Berlios TPM emulator version 0.7.4.
-Commands are passed from the linux guest via the mini-os TPM backend driver.
-vTPM data is encrypted and stored via a disk image provided to the virtual
-machine. The key used to encrypt the data along with a hash of the vTPM's data
-is sent to the vTPM manager for secure storage and later retrieval.  The vTPM
-domain communicates with the manager using a mini-os tpm front/back device pair.
-
-=head1 VTPM DOMAIN COMMAND LINE ARGUMENTS
-
-Command line arguments are passed to the domain via the 'extra' parameter in the
-VM config file. Each parameter is separated by white space. For example:
-
-    extra="foo=bar baz"
-
-=head2 List of Arguments:
-
-=over 4
-
-=item B<loglevel>=<LOG>
-
-Controls the amount of logging printed to the console.
-The possible values for <LOG> are:
-
-=over 4
-
-=item * error
-
-=item * info (default)
-
-=item * debug
-
-=back
-
-=item B<clear>
-
-Start the Berlios emulator in "clear" mode. (default)
-
-=item B<save>
-
-Start the Berlios emulator in "save" mode.
-
-=item B<deactivated>
-
-Start the Berlios emulator in "deactivated" mode.
-See the Berlios TPM emulator documentation for details
-about the startup mode. For all normal use, always use clear
-which is the default. You should not need to specify any of these.
-
-=item B<maintcmds>=<1|0>
-
-Enable to disable the TPM maintenance commands.
-These commands are used by tpm manufacturers and thus
-open a security hole. They are disabled by default.
-
-=item B<hwinitpcr>=<PCRSPEC>
-
-Initialize the virtual Platform Configuration Registers
-(PCRs) with PCR values from the hardware TPM. Each pcr specified by
-<PCRSPEC> will be initialized with the value of that same PCR in TPM
-once at startup. By default all PCRs are zero initialized.
-Possible values of <PCRSPEC> are:
-
-=over
-
-=item * all: copy all pcrs
-
-=item * none: copy no pcrs (default)
-
-=item * <N>: copy pcr n
-
-=item * <X-Y>: copy pcrs x to y (inclusive)
-
-=back
-
-These can also be combined by comma separation, for example:
-C<hwinitpcrs=5,12-16> will copy pcrs 5, 12, 13, 14, 15, and 16.
-
-=back
-
-=head1 REFERENCES
-
-Berlios TPM Emulator: L<http://tpm-emulator.berlios.de/>
diff --git a/docs/man/xen-vtpmmgr.7.pod b/docs/man/xen-vtpmmgr.7.pod
new file mode 100644 (file)
index 0000000..af825a7
--- /dev/null
@@ -0,0 +1,383 @@
+=head1 NAME
+
+xen-vtpmgr - Xen virtual TPM stubdomain
+
+=head1 Authors
+
+=over 4
+
+=item Daniel De Graaf <dgdegra@tycho.nsa.gov>
+
+=item Quan Xu <quan.xu@intel.com>
+
+=back
+
+This document describes the operation and command line interface of
+vtpmmgr-stubdom. See L<xen-vtpm(7)> for details on the vTPM subsystem as a
+whole.
+
+=head1 Overview
+
+The TPM Manager has three primary functions:
+
+=over 4
+
+=item 1. Securely store the encryption keys for vTPMs
+
+=item 2. Provide a single controlled path of access to the physical TPM
+
+=item 3. Provide evidence (via TPM Quotes) of the current configuration
+
+=back
+
+When combined with a platform that provides a trusted method for creating
+domains, the TPM Manager provides assurance that the private keys in a vTPM are
+only available in specific trusted configurations.
+
+The manager accepts commands from the vtpm-stubdom domains via the mini-os TPM
+backend driver. The vTPM manager communicates directly with hardware TPM using
+the mini-os tpm_tis driver.
+
+=head1 Boot Configurations and TPM Groups
+
+The TPM Manager's data is secured by using the physical TPM's seal operation,
+which allows data to be bound to specific PCRs. These PCRs are populated in the
+physical TPM during the boot process, either by the firmware/BIOS or by a
+dynamic launch environment such as TBOOT. In order to provide assurance of the
+system's security, the PCRs used to seal the TPM manager's data must contain
+measurements for domains used to bootstrap the TPM Manager and vTPMs.
+
+Because these measurements are based on hashes, they will change any time that
+any component of the system is upgraded. Since it is not possible to construct a
+list of all possible future good measurements, the job of approving
+configurations is delegated to a third party, referred to here as the system
+approval agent (SAA). The SAA is identified by its public (RSA) signature key,
+which is used to sign lists of valid configurations. A single TPM manager can
+support multiple SAAs via the use of vTPM groups. Each group is associated with
+a single SAA; this allows the creation of a multi-tenant environment where
+tenants may not all choose to trust the same SAA.
+
+Each vTPM is bound to a vTPM group at the time of its creation. Each vTPM group
+has its own AIK in the physical TPM for quotes of the hardware TPM state; when
+used with a conforming Privacy CA, this allows each group on the system to form
+the basis of a distinct identity.
+
+=head1 Initial Provisioning
+
+When the TPM Manager first boots up, it will create a stub vTPM group along with
+entries for any vTPMs that communicate with it. This stub group must be
+provisioned with an SAA and a boot configuration in order to survive a reboot.
+
+When a vTPM is connected to the TPM Manager using a UUID that is not recognized,
+a slot will be created in group 0 for it. In the future, this auto-creation may
+be restricted to specific UUIDs (such as the all-zero UUID) to enforce the use
+of the TPM manager as the generator of the UUID. The first vTPM to be connected
+is given administrative privileges for the TPM Manager, and should be attached
+to dom0 or a control domain in order to send provisioning commands.
+
+Provisioning a vTPM group for the system requires the public key of the SAA and
+privacy CA data used to certify the AIK (see the TPM spec for details). Once the
+group is created, a signed list of boot measurements can be installed. The
+initial group controls the ability to boot the system as a whole, and cannot be
+deleted once provisioned.
+
+=head1 Command Line Arguments
+
+Command line arguments are passed to the domain via the 'extra' parameter in the
+VM config file. Each parameter is separated by white space. For example:
+
+    extra="foo=bar baz"
+
+Valid arguments:
+
+=over 4
+
+=item owner_auth=<AUTHSPEC>
+
+=item srk_auth=<AUTHSPEC>
+
+Set the owner and SRK authdata for the TPM. If not specified, the
+default is 160 zero bits (the well-known auth value). Valid values of
+<AUTHSPEC> are:
+
+=over 4
+
+=item well-known
+
+Use the well known auth (default)
+
+=item hash:<HASH>
+
+Use the given 40-character ASCII hex string
+
+=item text:<STR>
+
+Use sha1 hash of <STR>.
+
+=back
+
+=item tpmdriver=<DRIVER>
+
+Choose the driver used for communication with the hardware TPM. Values
+other than tpm_tis should only be used for testing.
+
+The possible values of <DRIVER> are:
+
+=over 4
+
+=item tpm_tis
+
+Direct communication with a hardware TPM 1.2.  The
+domain must have access to TPM IO memory. (default)
+
+=item tpmfront
+
+Use the Xen tpmfront interface to talk to another
+domain which provides access to the TPM.
+
+=back
+
+=back
+
+The following options only apply to the tpm_tis driver:
+
+=over 4
+
+=item tpmiomem=<ADDR>
+
+The base address of the hardware memory pages of the TPM.
+The default is 0xfed40000, as defined by the TCG's PC Client spec.
+
+=item tpmirq=<IRQ>
+
+The irq of the hardware TPM if using interrupts. A value of
+"probe" can be set to probe for the irq. A value of 0 disables
+interrupts and uses polling (default 0).
+
+=item tpmlocality=<LOC>
+
+Attempt to use locality <LOC> of the hardware TPM.
+For full functionality of the TPM Manager, this should be set to "2".
+
+=back
+
+=head1 Platform Security Assumptions
+
+While the TPM Manager has the ability to check the hash of the vTPM requesting a
+key, there is currently no trusted method to inform the TPM Manager of the hash
+of each new domain.  Because of this, the TPM Manager trusts the UUID key in
+Xenstore to identify a vTPM in a trusted manner.  The XSM policy may be used to
+strengthen this assumption if the creation of vTPM-labeled domains is more
+constrained (for example, only permitted to a domain builder service): the only
+grants mapped by the TPM Manager should belong to vTPM domains, so restricting
+the ability to map other domain's granted pages will prevent other domains from
+directly requesting keys from the TPM Manager.  The TPM Manager uses the hash of
+the XSM label of the attached vTPM as the kernel hash, so vTPMs with distinct
+labels may be further partitioned using vTPM groups.
+
+A domain with direct access to the hardware TPM will be able to decrypt the TPM
+Manager's disk image if the haredware TPM's PCR values are in a permitted
+configuration.  To protect the TPM Manager's data, the list of permitted
+configurations should be chosen to include PCRs that measure the hypervisor,
+domain 0, the TPM Manager, and other critical configuration such as the XSM
+policy.  If the TPM Manager is configured to use locality 2 as recommended, it
+is safe to permit the hardware domain to access locality 0 (the default in
+Linux), although concurrent use of the TPM should be avoided as it can result in
+unexpected busy errors from the TPM driver.  The ability to access locality 2 of
+the TPM should be enforced using IO memory labeling in the XSM policy; the
+physical address 0xFED42xxx is always locality 2 for TPMs using the TIS driver.
+
+=head1 Appendix: unsecured migration process for vtpmmgr domain upgrade
+
+There is no direct upgrade supported from previous versions of the vtpmmgr
+domain due to changes in the on-disk format and the method used to seal data.
+If a vTPM domain supports migration, this feature should be used to migrate the
+vTPM's data; however, the vTPM packaged with Xen does not yet support migration.
+
+If adding migration support to the vTPM is not desired, a simpler migration
+domain usable only for local migration can be constructed. The migration process
+would look like the following:
+
+=over 4
+
+=item 1. Start the old vtpmmgr
+
+=item 2. Start the vTPM migration domain
+
+=item 3. Attach the vTPM migration domain's vtpm/0 device to the old vtpmmgr
+
+=item 4. Migration domain executes vtpmmgr_LoadHashKey on vtpm/0
+
+=item 5. Start the new vtpmmgr, possibly shutting down the old one first
+
+=item 6. Attach the vTPM migration domain's vtpm/1 device to the new vtpmmgr
+
+=item 7. Migration domain executes vtpmmgr_SaveHashKey on vtpm/1
+
+=back
+
+This requires the migration domain to be added to the list of valid vTPM kernel
+hashes. In the current version of the vtpmmgr domain, this is the hash of the
+XSM label, not the kernel.
+
+=head1 Appendix B: vtpmmgr on TPM 2.0
+
+=head2 Manager disk image setup:
+
+The vTPM Manager requires a disk image to store its encrypted data. The image
+does not require a filesystem and can live anywhere on the host disk. The image
+is not large; the Xen 4.5 vtpmmgr is limited to using the first 2MB of the image
+but can support more than 20,000 vTPMs.
+
+    dd if=/dev/zero of=/home/vtpm2/vmgr bs=16M count=1
+
+=head2 Manager config file:
+
+The vTPM Manager domain (vtpmmgr-stubdom) must be started like any other Xen
+virtual machine and requires a config file.  The manager requires a disk image
+for storage and permission to access the hardware memory pages for the TPM. The
+disk must be presented as "hda", and the TPM memory pages are passed using the
+iomem configuration parameter. The TPM TIS uses 5 pages of IO memory (one per
+locality) that start at physical address 0xfed40000. By default, the TPM manager
+uses locality 0 (so only the page at 0xfed40 is needed).
+
+Add:
+
+     extra="tpm2=1"
+
+extra option to launch vtpmmgr-stubdom domain on TPM 2.0, and ignore it on TPM
+1.x. for example:
+
+    kernel="/usr/lib/xen/boot/vtpmmgr-stubdom.gz"
+    memory=128
+    disk=["file:/home/vtpm2/vmgr,hda,w"]
+    name="vtpmmgr"
+    iomem=["fed40,5"]
+    extra="tpm2=1"
+
+
+=head2 Key Hierarchy
+
+    +------------------+
+    |  vTPM's secrets  | ...
+    +------------------+
+            |  ^
+            |  |(Bind / Unbind)
+- - - - -  -v  |- - - - - - - - TPM 2.0
+    +------------------+
+    |        SK        +
+    +------------------+
+            |  ^
+            v  |
+    +------------------+
+    |       SRK        |
+    +------------------+
+            |  ^
+            v  |
+    +------------------+
+    | TPM 2.0 Storage  |
+    |   Primary Seed   |
+    +------------------+
+
+Now the secrets for the vTPMs are only being bound to the presence of thephysical
+TPM 2.0. Since using PCRs to seal the data can be an important security feature
+that users of the vtpmmgr rely on. I will replace TPM2_Bind/TPM2_Unbind with
+TPM2_Seal/TPM2_Unseal to provide as much security as it did for TPM 1.2 in later
+series of patch.
+
+=head2 Design Overview
+
+The architecture of vTPM subsystem on TPM 2.0 is described below:
+
+    +------------------+
+    |    Linux DomU    | ...
+    |       |  ^       |
+    |       v  |       |
+    |   xen-tpmfront   |
+    +------------------+
+            |  ^
+            v  |
+    +------------------+
+    | mini-os/tpmback  |
+    |       |  ^       |
+    |       v  |       |
+    |  vtpm-stubdom    | ...
+    |       |  ^       |
+    |       v  |       |
+    | mini-os/tpmfront |
+    +------------------+
+            |  ^
+            v  |
+    +------------------+
+    | mini-os/tpmback  |
+    |       |  ^       |
+    |       v  |       |
+    | vtpmmgr-stubdom  |
+    |       |  ^       |
+    |       v  |       |
+    | mini-os/tpm2_tis |
+    +------------------+
+            |  ^
+            v  |
+    +------------------+
+    | Hardware TPM 2.0 |
+    +------------------+
+
+=over 4
+
+=item Linux DomU
+
+The Linux based guest that wants to use a vTPM. There many be
+more than one of these.
+
+=item xen-tpmfront.ko
+
+Linux kernel virtual TPM frontend driver. This driver
+provides vTPM access to a para-virtualized Linux based DomU.
+
+=item mini-os/tpmback
+
+Mini-os TPM backend driver. The Linux frontend driver
+connects to this backend driver to facilitate
+communications between the Linux DomU and its vTPM. This
+driver is also used by vtpmmgr-stubdom to communicate with
+vtpm-stubdom.
+
+=item vtpm-stubdom
+
+A mini-os stub domain that implements a vTPM. There is a
+one to one mapping between running vtpm-stubdom instances and
+logical vtpms on the system. The vTPM Platform Configuration
+Registers (PCRs) are all initialized to zero.
+
+=item mini-os/tpmfront
+
+Mini-os TPM frontend driver. The vTPM mini-os domain
+vtpm-stubdom uses this driver to communicate with
+vtpmmgr-stubdom. This driver could also be used separately to
+implement a mini-os domain that wishes to use a vTPM of
+its own.
+
+=item vtpmmgr-stubdom
+
+A mini-os domain that implements the vTPM manager.
+There is only one vTPM manager and it should be running during
+the entire lifetime of the machine.  This domain regulates
+access to the physical TPM on the system and secures the
+persistent state of each vTPM.
+
+=item mini-os/tpm2_tis
+
+Mini-os TPM version 2.0 TPM Interface Specification (TIS)
+driver. This driver used by vtpmmgr-stubdom to talk directly
+to the hardware TPM 2.0. Communication is facilitated by mapping
+hardware memory pages into vtpmmgr-stubdom.
+
+=item Hardware TPM 2.0
+
+The physical TPM 2.0 that is soldered onto the motherboard.
+
+=back
+
+Noted:
+    functionality for a virtual guest operating system (a DomU) is still TPM 1.2.
diff --git a/docs/man/xen-vtpmmgr.pod.7 b/docs/man/xen-vtpmmgr.pod.7
deleted file mode 100644 (file)
index af825a7..0000000
+++ /dev/null
@@ -1,383 +0,0 @@
-=head1 NAME
-
-xen-vtpmgr - Xen virtual TPM stubdomain
-
-=head1 Authors
-
-=over 4
-
-=item Daniel De Graaf <dgdegra@tycho.nsa.gov>
-
-=item Quan Xu <quan.xu@intel.com>
-
-=back
-
-This document describes the operation and command line interface of
-vtpmmgr-stubdom. See L<xen-vtpm(7)> for details on the vTPM subsystem as a
-whole.
-
-=head1 Overview
-
-The TPM Manager has three primary functions:
-
-=over 4
-
-=item 1. Securely store the encryption keys for vTPMs
-
-=item 2. Provide a single controlled path of access to the physical TPM
-
-=item 3. Provide evidence (via TPM Quotes) of the current configuration
-
-=back
-
-When combined with a platform that provides a trusted method for creating
-domains, the TPM Manager provides assurance that the private keys in a vTPM are
-only available in specific trusted configurations.
-
-The manager accepts commands from the vtpm-stubdom domains via the mini-os TPM
-backend driver. The vTPM manager communicates directly with hardware TPM using
-the mini-os tpm_tis driver.
-
-=head1 Boot Configurations and TPM Groups
-
-The TPM Manager's data is secured by using the physical TPM's seal operation,
-which allows data to be bound to specific PCRs. These PCRs are populated in the
-physical TPM during the boot process, either by the firmware/BIOS or by a
-dynamic launch environment such as TBOOT. In order to provide assurance of the
-system's security, the PCRs used to seal the TPM manager's data must contain
-measurements for domains used to bootstrap the TPM Manager and vTPMs.
-
-Because these measurements are based on hashes, they will change any time that
-any component of the system is upgraded. Since it is not possible to construct a
-list of all possible future good measurements, the job of approving
-configurations is delegated to a third party, referred to here as the system
-approval agent (SAA). The SAA is identified by its public (RSA) signature key,
-which is used to sign lists of valid configurations. A single TPM manager can
-support multiple SAAs via the use of vTPM groups. Each group is associated with
-a single SAA; this allows the creation of a multi-tenant environment where
-tenants may not all choose to trust the same SAA.
-
-Each vTPM is bound to a vTPM group at the time of its creation. Each vTPM group
-has its own AIK in the physical TPM for quotes of the hardware TPM state; when
-used with a conforming Privacy CA, this allows each group on the system to form
-the basis of a distinct identity.
-
-=head1 Initial Provisioning
-
-When the TPM Manager first boots up, it will create a stub vTPM group along with
-entries for any vTPMs that communicate with it. This stub group must be
-provisioned with an SAA and a boot configuration in order to survive a reboot.
-
-When a vTPM is connected to the TPM Manager using a UUID that is not recognized,
-a slot will be created in group 0 for it. In the future, this auto-creation may
-be restricted to specific UUIDs (such as the all-zero UUID) to enforce the use
-of the TPM manager as the generator of the UUID. The first vTPM to be connected
-is given administrative privileges for the TPM Manager, and should be attached
-to dom0 or a control domain in order to send provisioning commands.
-
-Provisioning a vTPM group for the system requires the public key of the SAA and
-privacy CA data used to certify the AIK (see the TPM spec for details). Once the
-group is created, a signed list of boot measurements can be installed. The
-initial group controls the ability to boot the system as a whole, and cannot be
-deleted once provisioned.
-
-=head1 Command Line Arguments
-
-Command line arguments are passed to the domain via the 'extra' parameter in the
-VM config file. Each parameter is separated by white space. For example:
-
-    extra="foo=bar baz"
-
-Valid arguments:
-
-=over 4
-
-=item owner_auth=<AUTHSPEC>
-
-=item srk_auth=<AUTHSPEC>
-
-Set the owner and SRK authdata for the TPM. If not specified, the
-default is 160 zero bits (the well-known auth value). Valid values of
-<AUTHSPEC> are:
-
-=over 4
-
-=item well-known
-
-Use the well known auth (default)
-
-=item hash:<HASH>
-
-Use the given 40-character ASCII hex string
-
-=item text:<STR>
-
-Use sha1 hash of <STR>.
-
-=back
-
-=item tpmdriver=<DRIVER>
-
-Choose the driver used for communication with the hardware TPM. Values
-other than tpm_tis should only be used for testing.
-
-The possible values of <DRIVER> are:
-
-=over 4
-
-=item tpm_tis
-
-Direct communication with a hardware TPM 1.2.  The
-domain must have access to TPM IO memory. (default)
-
-=item tpmfront
-
-Use the Xen tpmfront interface to talk to another
-domain which provides access to the TPM.
-
-=back
-
-=back
-
-The following options only apply to the tpm_tis driver:
-
-=over 4
-
-=item tpmiomem=<ADDR>
-
-The base address of the hardware memory pages of the TPM.
-The default is 0xfed40000, as defined by the TCG's PC Client spec.
-
-=item tpmirq=<IRQ>
-
-The irq of the hardware TPM if using interrupts. A value of
-"probe" can be set to probe for the irq. A value of 0 disables
-interrupts and uses polling (default 0).
-
-=item tpmlocality=<LOC>
-
-Attempt to use locality <LOC> of the hardware TPM.
-For full functionality of the TPM Manager, this should be set to "2".
-
-=back
-
-=head1 Platform Security Assumptions
-
-While the TPM Manager has the ability to check the hash of the vTPM requesting a
-key, there is currently no trusted method to inform the TPM Manager of the hash
-of each new domain.  Because of this, the TPM Manager trusts the UUID key in
-Xenstore to identify a vTPM in a trusted manner.  The XSM policy may be used to
-strengthen this assumption if the creation of vTPM-labeled domains is more
-constrained (for example, only permitted to a domain builder service): the only
-grants mapped by the TPM Manager should belong to vTPM domains, so restricting
-the ability to map other domain's granted pages will prevent other domains from
-directly requesting keys from the TPM Manager.  The TPM Manager uses the hash of
-the XSM label of the attached vTPM as the kernel hash, so vTPMs with distinct
-labels may be further partitioned using vTPM groups.
-
-A domain with direct access to the hardware TPM will be able to decrypt the TPM
-Manager's disk image if the haredware TPM's PCR values are in a permitted
-configuration.  To protect the TPM Manager's data, the list of permitted
-configurations should be chosen to include PCRs that measure the hypervisor,
-domain 0, the TPM Manager, and other critical configuration such as the XSM
-policy.  If the TPM Manager is configured to use locality 2 as recommended, it
-is safe to permit the hardware domain to access locality 0 (the default in
-Linux), although concurrent use of the TPM should be avoided as it can result in
-unexpected busy errors from the TPM driver.  The ability to access locality 2 of
-the TPM should be enforced using IO memory labeling in the XSM policy; the
-physical address 0xFED42xxx is always locality 2 for TPMs using the TIS driver.
-
-=head1 Appendix: unsecured migration process for vtpmmgr domain upgrade
-
-There is no direct upgrade supported from previous versions of the vtpmmgr
-domain due to changes in the on-disk format and the method used to seal data.
-If a vTPM domain supports migration, this feature should be used to migrate the
-vTPM's data; however, the vTPM packaged with Xen does not yet support migration.
-
-If adding migration support to the vTPM is not desired, a simpler migration
-domain usable only for local migration can be constructed. The migration process
-would look like the following:
-
-=over 4
-
-=item 1. Start the old vtpmmgr
-
-=item 2. Start the vTPM migration domain
-
-=item 3. Attach the vTPM migration domain's vtpm/0 device to the old vtpmmgr
-
-=item 4. Migration domain executes vtpmmgr_LoadHashKey on vtpm/0
-
-=item 5. Start the new vtpmmgr, possibly shutting down the old one first
-
-=item 6. Attach the vTPM migration domain's vtpm/1 device to the new vtpmmgr
-
-=item 7. Migration domain executes vtpmmgr_SaveHashKey on vtpm/1
-
-=back
-
-This requires the migration domain to be added to the list of valid vTPM kernel
-hashes. In the current version of the vtpmmgr domain, this is the hash of the
-XSM label, not the kernel.
-
-=head1 Appendix B: vtpmmgr on TPM 2.0
-
-=head2 Manager disk image setup:
-
-The vTPM Manager requires a disk image to store its encrypted data. The image
-does not require a filesystem and can live anywhere on the host disk. The image
-is not large; the Xen 4.5 vtpmmgr is limited to using the first 2MB of the image
-but can support more than 20,000 vTPMs.
-
-    dd if=/dev/zero of=/home/vtpm2/vmgr bs=16M count=1
-
-=head2 Manager config file:
-
-The vTPM Manager domain (vtpmmgr-stubdom) must be started like any other Xen
-virtual machine and requires a config file.  The manager requires a disk image
-for storage and permission to access the hardware memory pages for the TPM. The
-disk must be presented as "hda", and the TPM memory pages are passed using the
-iomem configuration parameter. The TPM TIS uses 5 pages of IO memory (one per
-locality) that start at physical address 0xfed40000. By default, the TPM manager
-uses locality 0 (so only the page at 0xfed40 is needed).
-
-Add:
-
-     extra="tpm2=1"
-
-extra option to launch vtpmmgr-stubdom domain on TPM 2.0, and ignore it on TPM
-1.x. for example:
-
-    kernel="/usr/lib/xen/boot/vtpmmgr-stubdom.gz"
-    memory=128
-    disk=["file:/home/vtpm2/vmgr,hda,w"]
-    name="vtpmmgr"
-    iomem=["fed40,5"]
-    extra="tpm2=1"
-
-
-=head2 Key Hierarchy
-
-    +------------------+
-    |  vTPM's secrets  | ...
-    +------------------+
-            |  ^
-            |  |(Bind / Unbind)
-- - - - -  -v  |- - - - - - - - TPM 2.0
-    +------------------+
-    |        SK        +
-    +------------------+
-            |  ^
-            v  |
-    +------------------+
-    |       SRK        |
-    +------------------+
-            |  ^
-            v  |
-    +------------------+
-    | TPM 2.0 Storage  |
-    |   Primary Seed   |
-    +------------------+
-
-Now the secrets for the vTPMs are only being bound to the presence of thephysical
-TPM 2.0. Since using PCRs to seal the data can be an important security feature
-that users of the vtpmmgr rely on. I will replace TPM2_Bind/TPM2_Unbind with
-TPM2_Seal/TPM2_Unseal to provide as much security as it did for TPM 1.2 in later
-series of patch.
-
-=head2 Design Overview
-
-The architecture of vTPM subsystem on TPM 2.0 is described below:
-
-    +------------------+
-    |    Linux DomU    | ...
-    |       |  ^       |
-    |       v  |       |
-    |   xen-tpmfront   |
-    +------------------+
-            |  ^
-            v  |
-    +------------------+
-    | mini-os/tpmback  |
-    |       |  ^       |
-    |       v  |       |
-    |  vtpm-stubdom    | ...
-    |       |  ^       |
-    |       v  |       |
-    | mini-os/tpmfront |
-    +------------------+
-            |  ^
-            v  |
-    +------------------+
-    | mini-os/tpmback  |
-    |       |  ^       |
-    |       v  |       |
-    | vtpmmgr-stubdom  |
-    |       |  ^       |
-    |       v  |       |
-    | mini-os/tpm2_tis |
-    +------------------+
-            |  ^
-            v  |
-    +------------------+
-    | Hardware TPM 2.0 |
-    +------------------+
-
-=over 4
-
-=item Linux DomU
-
-The Linux based guest that wants to use a vTPM. There many be
-more than one of these.
-
-=item xen-tpmfront.ko
-
-Linux kernel virtual TPM frontend driver. This driver
-provides vTPM access to a para-virtualized Linux based DomU.
-
-=item mini-os/tpmback
-
-Mini-os TPM backend driver. The Linux frontend driver
-connects to this backend driver to facilitate
-communications between the Linux DomU and its vTPM. This
-driver is also used by vtpmmgr-stubdom to communicate with
-vtpm-stubdom.
-
-=item vtpm-stubdom
-
-A mini-os stub domain that implements a vTPM. There is a
-one to one mapping between running vtpm-stubdom instances and
-logical vtpms on the system. The vTPM Platform Configuration
-Registers (PCRs) are all initialized to zero.
-
-=item mini-os/tpmfront
-
-Mini-os TPM frontend driver. The vTPM mini-os domain
-vtpm-stubdom uses this driver to communicate with
-vtpmmgr-stubdom. This driver could also be used separately to
-implement a mini-os domain that wishes to use a vTPM of
-its own.
-
-=item vtpmmgr-stubdom
-
-A mini-os domain that implements the vTPM manager.
-There is only one vTPM manager and it should be running during
-the entire lifetime of the machine.  This domain regulates
-access to the physical TPM on the system and secures the
-persistent state of each vTPM.
-
-=item mini-os/tpm2_tis
-
-Mini-os TPM version 2.0 TPM Interface Specification (TIS)
-driver. This driver used by vtpmmgr-stubdom to talk directly
-to the hardware TPM 2.0. Communication is facilitated by mapping
-hardware memory pages into vtpmmgr-stubdom.
-
-=item Hardware TPM 2.0
-
-The physical TPM 2.0 that is soldered onto the motherboard.
-
-=back
-
-Noted:
-    functionality for a virtual guest operating system (a DomU) is still TPM 1.2.
diff --git a/docs/man/xenstore-chmod.1.pod b/docs/man/xenstore-chmod.1.pod
new file mode 100644 (file)
index 0000000..cb1dc2e
--- /dev/null
@@ -0,0 +1,62 @@
+=head1 NAME
+
+xenstore-chmod - set the permissions of a Xenstore key
+
+=head1 SYNOPSIS
+
+B<xenstore-chmod> [I<OPTION>]... [I<KEY>] [I<PERM>]...
+
+=head1 DESCRIPTION
+
+Sets the permissions of the Xenstore I<KEY>.
+
+I<PERM> has the format I<LD>, where I<L> is a letter for the type of
+permission and I<D> is the corresponding domain ID.
+
+The types of permission are:
+
+=over
+
+=item B<r>
+
+read
+
+=item B<w>
+
+write
+
+=item B<b>
+
+read and write (both)
+
+=item B<n>
+
+no access
+
+=back
+
+The first permission entry is the domain owning the key (the owner)
+I<and> the permissions for any domain not explicitly listed in
+subsequent entries.  The key owner always has full access (read,
+write, and set permissions).
+
+=over
+
+=item B<-r>
+
+Apply the permissions to the key and all its I<children>.
+
+=item B<-s>
+
+Connect to the Xenstore daemon using a local socket only.
+
+=item B<-u>
+
+Apply the permissions to the key and all its I<parents>.
+
+=back
+
+=head1 BUGS
+
+Send bugs to xen-devel@lists.xen.org, see
+http://wiki.xen.org/xenwiki/ReportingBugs on how to send bug reports.
diff --git a/docs/man/xenstore-chmod.pod.1 b/docs/man/xenstore-chmod.pod.1
deleted file mode 100644 (file)
index cb1dc2e..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-=head1 NAME
-
-xenstore-chmod - set the permissions of a Xenstore key
-
-=head1 SYNOPSIS
-
-B<xenstore-chmod> [I<OPTION>]... [I<KEY>] [I<PERM>]...
-
-=head1 DESCRIPTION
-
-Sets the permissions of the Xenstore I<KEY>.
-
-I<PERM> has the format I<LD>, where I<L> is a letter for the type of
-permission and I<D> is the corresponding domain ID.
-
-The types of permission are:
-
-=over
-
-=item B<r>
-
-read
-
-=item B<w>
-
-write
-
-=item B<b>
-
-read and write (both)
-
-=item B<n>
-
-no access
-
-=back
-
-The first permission entry is the domain owning the key (the owner)
-I<and> the permissions for any domain not explicitly listed in
-subsequent entries.  The key owner always has full access (read,
-write, and set permissions).
-
-=over
-
-=item B<-r>
-
-Apply the permissions to the key and all its I<children>.
-
-=item B<-s>
-
-Connect to the Xenstore daemon using a local socket only.
-
-=item B<-u>
-
-Apply the permissions to the key and all its I<parents>.
-
-=back
-
-=head1 BUGS
-
-Send bugs to xen-devel@lists.xen.org, see
-http://wiki.xen.org/xenwiki/ReportingBugs on how to send bug reports.
diff --git a/docs/man/xenstore-ls.1.pod b/docs/man/xenstore-ls.1.pod
new file mode 100644 (file)
index 0000000..e04a509
--- /dev/null
@@ -0,0 +1,62 @@
+=head1 NAME
+
+xenstore-ls - list Xenstore keys and values
+
+=head1 SYNOPSIS
+
+B<xenstore-ls> [I<OPTION>]... [I<PATH>]...
+
+=head1 DESCRIPTION
+
+List keys, values and permissions of one or more Xenstore I<PATH>s,
+using a nested, tree-like view.
+
+=over
+
+=item B<-f>
+
+Show the full path for all keys.
+
+=item B<-p>
+
+Show permissions of all the listed keys as comma separated list.  The
+format of each permission is I<LD>, where I<L> is a letter for the
+type of permission and I<D> is the corresponding domain ID.
+
+The types of permission are:
+
+=over
+
+=item B<r>
+
+read
+
+=item B<w>
+
+write
+
+=item B<b>
+
+read and write (both)
+
+=item B<n>
+
+no access
+
+=back
+
+The first permission entry is the domain owning the key (the owner)
+I<and> the permissions for any domain not explicitly listed in
+subsequent entries.  The key owner always has full access (read,
+write, and set permissions).
+
+=item B<-s>
+
+Connect to the Xenstore daemon using a local socket only.
+
+=back
+
+=head1 BUGS
+
+Send bugs to xen-devel@lists.xen.org, see
+http://wiki.xen.org/xenwiki/ReportingBugs on how to send bug reports.
diff --git a/docs/man/xenstore-ls.pod.1 b/docs/man/xenstore-ls.pod.1
deleted file mode 100644 (file)
index e04a509..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-=head1 NAME
-
-xenstore-ls - list Xenstore keys and values
-
-=head1 SYNOPSIS
-
-B<xenstore-ls> [I<OPTION>]... [I<PATH>]...
-
-=head1 DESCRIPTION
-
-List keys, values and permissions of one or more Xenstore I<PATH>s,
-using a nested, tree-like view.
-
-=over
-
-=item B<-f>
-
-Show the full path for all keys.
-
-=item B<-p>
-
-Show permissions of all the listed keys as comma separated list.  The
-format of each permission is I<LD>, where I<L> is a letter for the
-type of permission and I<D> is the corresponding domain ID.
-
-The types of permission are:
-
-=over
-
-=item B<r>
-
-read
-
-=item B<w>
-
-write
-
-=item B<b>
-
-read and write (both)
-
-=item B<n>
-
-no access
-
-=back
-
-The first permission entry is the domain owning the key (the owner)
-I<and> the permissions for any domain not explicitly listed in
-subsequent entries.  The key owner always has full access (read,
-write, and set permissions).
-
-=item B<-s>
-
-Connect to the Xenstore daemon using a local socket only.
-
-=back
-
-=head1 BUGS
-
-Send bugs to xen-devel@lists.xen.org, see
-http://wiki.xen.org/xenwiki/ReportingBugs on how to send bug reports.
diff --git a/docs/man/xenstore-read.1.pod b/docs/man/xenstore-read.1.pod
new file mode 100644 (file)
index 0000000..5496de1
--- /dev/null
@@ -0,0 +1,32 @@
+=head1 NAME
+
+xenstore-read - read Xenstore values
+
+=head1 SYNOPSIS
+
+B<xenstore-read> [I<OPTION>]... [I<PATH>]...
+
+=head1 DESCRIPTION
+
+Read values of one or more Xenstore I<PATH>s.
+
+=over
+
+=item B<-p>
+
+Prefix value with key name.
+
+=item B<-s>
+
+Connect to the Xenstore daemon using a local socket only.
+
+=item B<-R>
+
+Read raw value, skip escaping non-printable characters (\x..).
+
+=back
+
+=head1 BUGS
+
+Send bugs to xen-devel@lists.xen.org, see
+http://wiki.xen.org/xenwiki/ReportingBugs on how to send bug reports.
diff --git a/docs/man/xenstore-read.pod.1 b/docs/man/xenstore-read.pod.1
deleted file mode 100644 (file)
index 5496de1..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-=head1 NAME
-
-xenstore-read - read Xenstore values
-
-=head1 SYNOPSIS
-
-B<xenstore-read> [I<OPTION>]... [I<PATH>]...
-
-=head1 DESCRIPTION
-
-Read values of one or more Xenstore I<PATH>s.
-
-=over
-
-=item B<-p>
-
-Prefix value with key name.
-
-=item B<-s>
-
-Connect to the Xenstore daemon using a local socket only.
-
-=item B<-R>
-
-Read raw value, skip escaping non-printable characters (\x..).
-
-=back
-
-=head1 BUGS
-
-Send bugs to xen-devel@lists.xen.org, see
-http://wiki.xen.org/xenwiki/ReportingBugs on how to send bug reports.
diff --git a/docs/man/xenstore-write.1.pod b/docs/man/xenstore-write.1.pod
new file mode 100644 (file)
index 0000000..78cbbe1
--- /dev/null
@@ -0,0 +1,29 @@
+=head1 NAME
+
+xenstore-write - write Xenstore values
+
+=head1 SYNOPSIS
+
+B<xenstore-read> [I<OPTION>]... I<PATH> I<VALUE>...
+
+=head1 DESCRIPTION
+
+Write I<VALUE>s to Xenstore I<PATH>s. Multiple pairs I<PATH> I<VALUE> can be
+provided to write them at once - in one Xenstore transaction.
+
+=over
+
+=item B<-s>
+
+Connect to the Xenstore daemon using a local socket only.
+
+=item B<-R>
+
+Write raw value, skip parsing escaped characters (\x..).
+
+=back
+
+=head1 BUGS
+
+Send bugs to xen-devel@lists.xen.org, see
+http://wiki.xen.org/xenwiki/ReportingBugs on how to send bug reports.
diff --git a/docs/man/xenstore-write.pod.1 b/docs/man/xenstore-write.pod.1
deleted file mode 100644 (file)
index 78cbbe1..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-=head1 NAME
-
-xenstore-write - write Xenstore values
-
-=head1 SYNOPSIS
-
-B<xenstore-read> [I<OPTION>]... I<PATH> I<VALUE>...
-
-=head1 DESCRIPTION
-
-Write I<VALUE>s to Xenstore I<PATH>s. Multiple pairs I<PATH> I<VALUE> can be
-provided to write them at once - in one Xenstore transaction.
-
-=over
-
-=item B<-s>
-
-Connect to the Xenstore daemon using a local socket only.
-
-=item B<-R>
-
-Write raw value, skip parsing escaped characters (\x..).
-
-=back
-
-=head1 BUGS
-
-Send bugs to xen-devel@lists.xen.org, see
-http://wiki.xen.org/xenwiki/ReportingBugs on how to send bug reports.
diff --git a/docs/man/xenstore.1.pod b/docs/man/xenstore.1.pod
new file mode 100644 (file)
index 0000000..dd8f806
--- /dev/null
@@ -0,0 +1,52 @@
+=head1 NAME
+
+xenstore - interact with Xenstore
+
+=head1 SYNOPSIS
+
+B<xenstore> I<CMD> ...
+
+=head1 DESCRIPTION
+
+A set of utilities for interacting with Xenstore.
+
+=over
+
+=item B<xenstore-chmod>(1)
+
+Sets the permissions of keys.
+
+=item B<xenstore-exists>(1)
+
+Test for the existence of a key.
+
+=item B<xenstore-list>(1)
+
+List keys.
+
+=item B<xenstore-ls>(1)
+
+List keys, values and permissions.
+
+=item B<xenstore-read>(1)
+
+Read the value of a key.
+
+=item B<xenstore-rm>(1)
+
+Remove keys.
+
+=item B<xenstore-watch>(1)
+
+Watch for changes to keys or values.
+
+=item B<xenstore-write>(1)
+
+Add or modify keys and values.
+
+=back
+
+=head1 BUGS
+
+Send bugs to xen-devel@lists.xen.org, see
+http://wiki.xen.org/xenwiki/ReportingBugs on how to send bug reports.
diff --git a/docs/man/xenstore.pod.1 b/docs/man/xenstore.pod.1
deleted file mode 100644 (file)
index dd8f806..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-=head1 NAME
-
-xenstore - interact with Xenstore
-
-=head1 SYNOPSIS
-
-B<xenstore> I<CMD> ...
-
-=head1 DESCRIPTION
-
-A set of utilities for interacting with Xenstore.
-
-=over
-
-=item B<xenstore-chmod>(1)
-
-Sets the permissions of keys.
-
-=item B<xenstore-exists>(1)
-
-Test for the existence of a key.
-
-=item B<xenstore-list>(1)
-
-List keys.
-
-=item B<xenstore-ls>(1)
-
-List keys, values and permissions.
-
-=item B<xenstore-read>(1)
-
-Read the value of a key.
-
-=item B<xenstore-rm>(1)
-
-Remove keys.
-
-=item B<xenstore-watch>(1)
-
-Watch for changes to keys or values.
-
-=item B<xenstore-write>(1)
-
-Add or modify keys and values.
-
-=back
-
-=head1 BUGS
-
-Send bugs to xen-devel@lists.xen.org, see
-http://wiki.xen.org/xenwiki/ReportingBugs on how to send bug reports.
diff --git a/docs/man/xentop.1.pod b/docs/man/xentop.1.pod
new file mode 100644 (file)
index 0000000..1d0eb50
--- /dev/null
@@ -0,0 +1,111 @@
+=head1 NAME
+
+xentop - displays real-time information about a Xen system and domains
+
+=head1 SYNOPSIS
+
+B<xentop> [B<-h>] [B<-V>] [B<-d>SECONDS] [B<-n>] [B<-r>] [B<-v>] [B<-f>]
+[B<-b>] [B<-i>ITERATIONS]
+
+=head1 DESCRIPTION
+
+B<xentop> displays information about the Xen system and domains, in a
+continually-updating manner.  Command-line options and interactive commands
+can change the detail and format of the information displayed by B<xentop>.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-h>, B<--help>
+
+display help and exit
+
+=item B<-V>, B<--version>
+
+output version information and exit
+
+=item B<-d>, B<--delay>=I<SECONDS>
+
+seconds between updates (default 3)
+
+=item B<-n>, B<--networks>
+
+output network information
+
+=item B<-x>, B<--vbds>
+
+output vbd block device data
+
+=item B<-r>, B<--repeat-header>
+
+repeat table header before each domain
+
+=item B<-v>, B<--vcpus>
+
+output VCPU data
+
+=item B<-f>, B<--full-name>
+
+output the full domain name (not truncated)
+
+=item B<-b>, B<--batch>
+
+output data in batch mode (to stdout)
+
+=item B<-i>, B<--iterations>=I<ITERATIONS>
+
+maximum number of iterations xentop should produce before ending
+
+=back
+
+=head1 INTERACTIVE COMMANDS
+
+All interactive commands are case-insensitive.
+
+=over 4
+
+=item B<D>
+
+set delay between updates
+
+=item B<N>
+
+toggle display of network information
+
+=item B<Q>, B<Esc>
+
+quit
+
+=item B<R>
+
+toggle table header before each domain
+
+=item B<S>
+
+cycle sort order
+
+=item B<V>
+
+toggle display of VCPU information
+
+=item B<Arrows>
+
+scroll domain display
+
+=back
+
+=head1 AUTHORS
+
+Written by Judy Fischbach, David Hendricks, and Josh Triplett
+
+=head1 REPORTING BUGS
+
+Report bugs to <xen-devel@lists.xen.org>.
+
+=head1 COPYRIGHT
+
+Copyright 2005  International Business Machines  Corp
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/docs/man/xentop.pod.1 b/docs/man/xentop.pod.1
deleted file mode 100644 (file)
index 1d0eb50..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-=head1 NAME
-
-xentop - displays real-time information about a Xen system and domains
-
-=head1 SYNOPSIS
-
-B<xentop> [B<-h>] [B<-V>] [B<-d>SECONDS] [B<-n>] [B<-r>] [B<-v>] [B<-f>]
-[B<-b>] [B<-i>ITERATIONS]
-
-=head1 DESCRIPTION
-
-B<xentop> displays information about the Xen system and domains, in a
-continually-updating manner.  Command-line options and interactive commands
-can change the detail and format of the information displayed by B<xentop>.
-
-=head1 OPTIONS
-
-=over 4
-
-=item B<-h>, B<--help>
-
-display help and exit
-
-=item B<-V>, B<--version>
-
-output version information and exit
-
-=item B<-d>, B<--delay>=I<SECONDS>
-
-seconds between updates (default 3)
-
-=item B<-n>, B<--networks>
-
-output network information
-
-=item B<-x>, B<--vbds>
-
-output vbd block device data
-
-=item B<-r>, B<--repeat-header>
-
-repeat table header before each domain
-
-=item B<-v>, B<--vcpus>
-
-output VCPU data
-
-=item B<-f>, B<--full-name>
-
-output the full domain name (not truncated)
-
-=item B<-b>, B<--batch>
-
-output data in batch mode (to stdout)
-
-=item B<-i>, B<--iterations>=I<ITERATIONS>
-
-maximum number of iterations xentop should produce before ending
-
-=back
-
-=head1 INTERACTIVE COMMANDS
-
-All interactive commands are case-insensitive.
-
-=over 4
-
-=item B<D>
-
-set delay between updates
-
-=item B<N>
-
-toggle display of network information
-
-=item B<Q>, B<Esc>
-
-quit
-
-=item B<R>
-
-toggle table header before each domain
-
-=item B<S>
-
-cycle sort order
-
-=item B<V>
-
-toggle display of VCPU information
-
-=item B<Arrows>
-
-scroll domain display
-
-=back
-
-=head1 AUTHORS
-
-Written by Judy Fischbach, David Hendricks, and Josh Triplett
-
-=head1 REPORTING BUGS
-
-Report bugs to <xen-devel@lists.xen.org>.
-
-=head1 COPYRIGHT
-
-Copyright 2005  International Business Machines  Corp
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/docs/man/xentrace.8.pod b/docs/man/xentrace.8.pod
new file mode 100644 (file)
index 0000000..69aef05
--- /dev/null
@@ -0,0 +1,166 @@
+=head1 NAME
+
+xentrace - capture Xen trace buffer data
+
+=head1 SYNOPSIS
+
+B<xentrace> [ I<OPTIONS> ] [ I<FILE> ]
+
+=head1 DESCRIPTION
+
+B<xentrace> is used to capture trace buffer data from Xen.  The data is
+output in the following binary format (host endian):
+
+    CPU(uint) TSC(u64) EVENT(u32) D1 D2 D3 D4 D5 (all u32)
+
+Where CPU is the processor number, TSC is the record's timestamp
+(the value of the CPU cycle counter), EVENT is the event ID and
+D1...D5 are the trace data.
+
+Data is dumped onto the standard output (which must not be a TTY) or a
+I<FILE> specified on the command line.
+
+The output should be parsed using the tool xentrace_format, which can
+produce human-readable output in ASCII format.
+
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-t> I<l>, B<--log-thresh>=I<l>
+
+set the threshold number, I<l>, of new records required to trigger a write of
+all new records to the output
+
+=item B<-s> I<p>, B<--poll-sleep>=I<p>
+
+set the time, I<p>, (in milliseconds) to sleep between polling the buffers
+for new data.
+
+=item B<-c> [I<c>|I<CPU-LIST>|I<all>], B<--cpu-mask>=[I<c>|I<CPU-LIST>|I<all>]
+
+This can be: a hex value (of the form 0xNNNN...), or a set of cpu
+ranges as described below, or the string I<all>. Hex values are limited
+to 32 bits. If not specified, the cpu-mask as set during bootup will be
+constructed. If using the I<CPU-LIST> it expects decimal numbers, which
+may be specified as follows:
+
+  "0-3"
+      Trace only on CPUs 0 through 3
+
+  "0,2,5-7"
+      Trace only on CPUs 0, 2, and 5 through 7
+
+  "-3"
+      Trace only on CPUs 0 through 3
+
+  "-3,7"
+      Trace only on CPUs 0 through 3 and 7
+
+  "3-"
+      Trace only on CPUs 3 up to maximum numbers of CPUs the host has
+
+If using I<all> it will use all of the CPUs the host has.
+
+=item B<-e> I<mask>, B<--evt-mask>=I<mask>
+
+set event capture mask. If not specified the TRC_ALL will be used.
+
+=item B<-?>, B<--help>
+
+Give this help list
+
+=item B<--usage>
+
+Give a short usage message
+
+=item B<-V>, B<--version>
+
+Print program version
+
+=back
+
+=head2 Event Classes (Masks)
+
+The following event classes (masks) can be used to filter the events being
+gathered by xentrace:
+
+        ID                  Description
+
+        0x0001f000          TRC_GEN
+        0x0002f000          TRC_SCHED
+        0x0004f000          TRC_DOM0OP
+        0x0008f000          TRC_HVM
+        0x0010f000          TRC_MEM
+        0xfffff000          TRC_ALL
+
+
+=head2 Event Subclasses (More Masks)
+
+The following event subclasses (masks) can also be used to filter the events being
+gathered by xentrace:
+
+        ID                  Description
+
+        0x00081000          TRC_HVM_ENTRYEXIT
+        0x00082000          TRC_HVM_HANDLER
+
+
+=head2 Events
+
+B<xentrace> collects the following events from the trace buffer:
+
+        ID                 Description
+
+        0x0001f001         TRC_LOST_RECORDS
+        0x0002f001         TRC_SCHED_DOM_ADD
+        0x0002f002         TRC_SCHED_DOM_REM
+        0x0002f003         TRC_SCHED_SLEEP
+        0x0002f004         TRC_SCHED_WAKE
+        0x0002f005         TRC_SCHED_YIELD
+        0x0002f006         TRC_SCHED_BLOCK
+        0x0002f007         TRC_SCHED_SHUTDOWN
+        0x0002f008         TRC_SCHED_CTL
+        0x0002f009         TRC_SCHED_ADJDOM
+        0x0002f010         TRC_SCHED_SWITCH
+        0x0002f011         TRC_SCHED_S_TIMER_FN
+        0x0002f012         TRC_SCHED_T_TIMER_FN
+        0x0002f013         TRC_SCHED_DOM_TIMER_FN
+        0x0002f014         TRC_SCHED_SWITCH_INFPREV
+        0x0002f015         TRC_SCHED_SWITCH_INFNEXT
+
+        0x00081001         TRC_HVM_VMENTRY
+        0x00081002         TRC_HVM_VMEXIT
+        0x00082001         TRC_HVM_PF_XEN
+        0x00082002         TRC_HVM_PF_INJECT
+        0x00082003         TRC_HVM_INJ_EXC
+        0x00082004         TRC_HVM_INJ_VIRQ
+        0x00082005         TRC_HVM_REINJ_VIRQ
+        0x00082006         TRC_HVM_IO_READ
+        0x00082007         TRC_HVM_IO_WRITE
+        0x00082008         TRC_HVM_CR_READ
+        0x00082009         TRC_HVM_CR_WRITE
+        0x0008200A         TRC_HVM_DR_READ
+        0x0008200B         TRC_HVM_DR_WRITE
+        0x0008200C         TRC_HVM_MSR_READ
+        0x0008200D         TRC_HVM_MSR_WRITE
+        0x0008200E         TRC_HVM_CPUID
+        0x0008200F         TRC_HVM_INTR
+        0x00082010         TRC_HVM_NMI
+        0x00082011         TRC_HVM_SMI
+        0x00082012         TRC_HVM_VMMCALL
+        0x00082013         TRC_HVM_HLT
+        0x00082014         TRC_HVM_INVLPG
+
+        0x0010f001         TRC_MEM_PAGE_GRANT_MAP
+        0x0010f002         TRC_MEM_PAGE_GRANT_UNMAP
+        0x0010f003         TRC_MEM_PAGE_GRANT_TRANSFER
+
+=head1 AUTHOR
+
+Mark A. Williamson <mark.a.williamson@intel.com>
+
+=head1 SEE ALSO
+
+xentrace_format(1)
diff --git a/docs/man/xentrace.pod.8 b/docs/man/xentrace.pod.8
deleted file mode 100644 (file)
index 69aef05..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-=head1 NAME
-
-xentrace - capture Xen trace buffer data
-
-=head1 SYNOPSIS
-
-B<xentrace> [ I<OPTIONS> ] [ I<FILE> ]
-
-=head1 DESCRIPTION
-
-B<xentrace> is used to capture trace buffer data from Xen.  The data is
-output in the following binary format (host endian):
-
-    CPU(uint) TSC(u64) EVENT(u32) D1 D2 D3 D4 D5 (all u32)
-
-Where CPU is the processor number, TSC is the record's timestamp
-(the value of the CPU cycle counter), EVENT is the event ID and
-D1...D5 are the trace data.
-
-Data is dumped onto the standard output (which must not be a TTY) or a
-I<FILE> specified on the command line.
-
-The output should be parsed using the tool xentrace_format, which can
-produce human-readable output in ASCII format.
-
-
-=head1 OPTIONS
-
-=over 4
-
-=item B<-t> I<l>, B<--log-thresh>=I<l>
-
-set the threshold number, I<l>, of new records required to trigger a write of
-all new records to the output
-
-=item B<-s> I<p>, B<--poll-sleep>=I<p>
-
-set the time, I<p>, (in milliseconds) to sleep between polling the buffers
-for new data.
-
-=item B<-c> [I<c>|I<CPU-LIST>|I<all>], B<--cpu-mask>=[I<c>|I<CPU-LIST>|I<all>]
-
-This can be: a hex value (of the form 0xNNNN...), or a set of cpu
-ranges as described below, or the string I<all>. Hex values are limited
-to 32 bits. If not specified, the cpu-mask as set during bootup will be
-constructed. If using the I<CPU-LIST> it expects decimal numbers, which
-may be specified as follows:
-
-  "0-3"
-      Trace only on CPUs 0 through 3
-
-  "0,2,5-7"
-      Trace only on CPUs 0, 2, and 5 through 7
-
-  "-3"
-      Trace only on CPUs 0 through 3
-
-  "-3,7"
-      Trace only on CPUs 0 through 3 and 7
-
-  "3-"
-      Trace only on CPUs 3 up to maximum numbers of CPUs the host has
-
-If using I<all> it will use all of the CPUs the host has.
-
-=item B<-e> I<mask>, B<--evt-mask>=I<mask>
-
-set event capture mask. If not specified the TRC_ALL will be used.
-
-=item B<-?>, B<--help>
-
-Give this help list
-
-=item B<--usage>
-
-Give a short usage message
-
-=item B<-V>, B<--version>
-
-Print program version
-
-=back
-
-=head2 Event Classes (Masks)
-
-The following event classes (masks) can be used to filter the events being
-gathered by xentrace:
-
-        ID                  Description
-
-        0x0001f000          TRC_GEN
-        0x0002f000          TRC_SCHED
-        0x0004f000          TRC_DOM0OP
-        0x0008f000          TRC_HVM
-        0x0010f000          TRC_MEM
-        0xfffff000          TRC_ALL
-
-
-=head2 Event Subclasses (More Masks)
-
-The following event subclasses (masks) can also be used to filter the events being
-gathered by xentrace:
-
-        ID                  Description
-
-        0x00081000          TRC_HVM_ENTRYEXIT
-        0x00082000          TRC_HVM_HANDLER
-
-
-=head2 Events
-
-B<xentrace> collects the following events from the trace buffer:
-
-        ID                 Description
-
-        0x0001f001         TRC_LOST_RECORDS
-        0x0002f001         TRC_SCHED_DOM_ADD
-        0x0002f002         TRC_SCHED_DOM_REM
-        0x0002f003         TRC_SCHED_SLEEP
-        0x0002f004         TRC_SCHED_WAKE
-        0x0002f005         TRC_SCHED_YIELD
-        0x0002f006         TRC_SCHED_BLOCK
-        0x0002f007         TRC_SCHED_SHUTDOWN
-        0x0002f008         TRC_SCHED_CTL
-        0x0002f009         TRC_SCHED_ADJDOM
-        0x0002f010         TRC_SCHED_SWITCH
-        0x0002f011         TRC_SCHED_S_TIMER_FN
-        0x0002f012         TRC_SCHED_T_TIMER_FN
-        0x0002f013         TRC_SCHED_DOM_TIMER_FN
-        0x0002f014         TRC_SCHED_SWITCH_INFPREV
-        0x0002f015         TRC_SCHED_SWITCH_INFNEXT
-
-        0x00081001         TRC_HVM_VMENTRY
-        0x00081002         TRC_HVM_VMEXIT
-        0x00082001         TRC_HVM_PF_XEN
-        0x00082002         TRC_HVM_PF_INJECT
-        0x00082003         TRC_HVM_INJ_EXC
-        0x00082004         TRC_HVM_INJ_VIRQ
-        0x00082005         TRC_HVM_REINJ_VIRQ
-        0x00082006         TRC_HVM_IO_READ
-        0x00082007         TRC_HVM_IO_WRITE
-        0x00082008         TRC_HVM_CR_READ
-        0x00082009         TRC_HVM_CR_WRITE
-        0x0008200A         TRC_HVM_DR_READ
-        0x0008200B         TRC_HVM_DR_WRITE
-        0x0008200C         TRC_HVM_MSR_READ
-        0x0008200D         TRC_HVM_MSR_WRITE
-        0x0008200E         TRC_HVM_CPUID
-        0x0008200F         TRC_HVM_INTR
-        0x00082010         TRC_HVM_NMI
-        0x00082011         TRC_HVM_SMI
-        0x00082012         TRC_HVM_VMMCALL
-        0x00082013         TRC_HVM_HLT
-        0x00082014         TRC_HVM_INVLPG
-
-        0x0010f001         TRC_MEM_PAGE_GRANT_MAP
-        0x0010f002         TRC_MEM_PAGE_GRANT_UNMAP
-        0x0010f003         TRC_MEM_PAGE_GRANT_TRANSFER
-
-=head1 AUTHOR
-
-Mark A. Williamson <mark.a.williamson@intel.com>
-
-=head1 SEE ALSO
-
-xentrace_format(1)
diff --git a/docs/man/xentrace_format.1.pod b/docs/man/xentrace_format.1.pod
new file mode 100644 (file)
index 0000000..e05479a
--- /dev/null
@@ -0,0 +1,46 @@
+=head1 NAME
+
+xentrace_format - pretty-print Xen trace data
+
+=head1 SYNOPSIS
+
+B<xentrace_format> [ I<DEFS-FILE> ]
+
+=head1 DESCRIPTION
+
+B<xentrace_format> parses trace data in B<xentrace> binary format from
+standard input and reformats it according to the rules in a file of
+definitions (I<DEFS-FILE>), printing to standard output.
+
+The rules in I<DEFS-FILE> should have the format shown below:
+
+I<event_id> I<whitespace> I<format>
+
+Each rule should start on a new line.
+
+The format string may include format specifiers, such as:
+%(cpu)d, %(tsc)d, %(event)d, %(1)d, %(2)d, %(3)d, %(4)d, %(5)d
+
+[ the `d' format specifier output in decimal, alternatively `x'
+  will output in hexadecimal and `o' will output in octal ]
+
+These correspond to the CPU number, event ID, timestamp counter and
+the 5 data fields from the trace record.  There should be one such
+rule for each type of event to be pretty-printed (events which do not
+have formatting rules are ignored).
+
+A sample format file for Xen's predefined trace events is available
+in the file tools/xentrace/formats in the Xen source tree.
+
+Depending on your system and the rate at which trace data is produced,
+this script may not be able to keep up with the output of
+B<xentrace> if it is piped directly.  In these circumstances you
+should have B<xentrace> output to a file for processing off-line.
+
+=head1 AUTHOR
+
+Mark A. Williamson <mark.a.williamson@intel.com>
+
+=head1 SEE ALSO
+
+xentrace(8)
diff --git a/docs/man/xentrace_format.pod.1 b/docs/man/xentrace_format.pod.1
deleted file mode 100644 (file)
index e05479a..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-=head1 NAME
-
-xentrace_format - pretty-print Xen trace data
-
-=head1 SYNOPSIS
-
-B<xentrace_format> [ I<DEFS-FILE> ]
-
-=head1 DESCRIPTION
-
-B<xentrace_format> parses trace data in B<xentrace> binary format from
-standard input and reformats it according to the rules in a file of
-definitions (I<DEFS-FILE>), printing to standard output.
-
-The rules in I<DEFS-FILE> should have the format shown below:
-
-I<event_id> I<whitespace> I<format>
-
-Each rule should start on a new line.
-
-The format string may include format specifiers, such as:
-%(cpu)d, %(tsc)d, %(event)d, %(1)d, %(2)d, %(3)d, %(4)d, %(5)d
-
-[ the `d' format specifier output in decimal, alternatively `x'
-  will output in hexadecimal and `o' will output in octal ]
-
-These correspond to the CPU number, event ID, timestamp counter and
-the 5 data fields from the trace record.  There should be one such
-rule for each type of event to be pretty-printed (events which do not
-have formatting rules are ignored).
-
-A sample format file for Xen's predefined trace events is available
-in the file tools/xentrace/formats in the Xen source tree.
-
-Depending on your system and the rate at which trace data is produced,
-this script may not be able to keep up with the output of
-B<xentrace> if it is piped directly.  In these circumstances you
-should have B<xentrace> output to a file for processing off-line.
-
-=head1 AUTHOR
-
-Mark A. Williamson <mark.a.williamson@intel.com>
-
-=head1 SEE ALSO
-
-xentrace(8)
diff --git a/docs/man/xl-disk-configuration.5.pod b/docs/man/xl-disk-configuration.5.pod
new file mode 100644 (file)
index 0000000..d3eedc1
--- /dev/null
@@ -0,0 +1,529 @@
+=head1 NAME
+
+xl-disk-configuration - XL Disk Configuration Syntax
+
+=head1 SYNTAX
+
+This document specifies the xl config file format disk configuration
+option.  It has the following form:
+
+   disk = [ 'DISKSPEC', 'DISKSPEC', ... ]
+
+where each C<DISKSPEC> is in this form:
+
+   [<key>=<value>|<flag>,]*,
+     [<target>, [<format>, [<vdev>, [<access>]]]],
+     [<key>=<value>|<flag>,]*
+     [target=<target>]
+
+For example, these strings are equivalent:
+
+    /dev/vg/guest-volume,,hda
+    /dev/vg/guest-volume,raw,hda,rw
+    format=raw, vdev=hda, access=rw, target=/dev/vg/guest-volume
+    raw:/dev/vg/guest-volume,hda,w  (deprecated, see below)
+
+As are these:
+
+    /root/image.iso,,hdc,cdrom
+    /root/image.iso,,hdc,,cdrom
+    /root/image.iso,raw,hdc,devtype=cdrom
+    format=raw, vdev=hdc, access=ro, devtype=cdrom, target=/root/image.iso
+    raw:/root/image.iso,hdc:cdrom,ro   (deprecated, see below)
+
+These might be specified in the domain config file like this:
+
+    disk = [ '/dev/vg/guest-volume,,hda', '/root/image.iso,,hdc,cdrom' ]
+
+
+More formally, the string is a series of comma-separated keyword/value
+pairs, flags and positional parameters.  Parameters which are not bare
+keywords and which do not contain "=" symbols are assigned to the
+so-far-unspecified positional parameters, in the order below.  The
+positional parameters may also be specified explicitly by name.
+
+Each parameter may be specified at most once, either as a positional
+parameter or a named parameter.  Default values apply if the parameter
+is not specified, or if it is specified with an empty value (whether
+positionally or explicitly).
+
+Whitespace may appear before each parameter and will be ignored.
+
+=head1 Positional Parameters
+
+=over 4
+
+=item B<target>
+
+=over 4
+
+=item Description
+
+Block device or image file path.  When this is used as a path, F</dev>
+will be prepended if the path doesn't start with a '/'.
+
+=item Supported values
+
+N/A
+
+=item Deprecated values
+
+N/A
+
+=item Default value
+
+None.  While a path is provided in most cases there is an exception:
+for a cdrom device, lack of this attribute would imply an empty cdrom
+drive.
+
+=item Special syntax
+
+When this parameter is specified by name, ie with the C<target=>
+syntax in the configuration file, it consumes the whole rest of the
+C<DISKSPEC> including trailing whitespaces.  Therefore in that case
+it must come last.  This is permissible even if an empty value for
+the target was already specified as a positional parameter.  This
+is the only way to specify a target string containing metacharacters
+such as commas and (in some cases) colons, which would otherwise be
+misinterpreted.
+
+Future parameter and flag names will start with an ascii letter and
+contain only ascii alphanumerics, hyphens and underscores, and will
+not be legal as vdevs.  Targets which might match that syntax
+should not be specified as positional parameters.
+
+=back
+
+=item B<format>
+
+=over 4
+
+=item Description
+
+Specifies the format of image file.
+
+=item Supported values
+
+raw, qcow, qcow2, vhd, qed
+
+=item Deprecated values
+
+None
+
+=item Default value
+
+raw
+
+=back
+
+=item B<vdev>
+
+=over 4
+
+=item Description
+
+Virtual device as seen by the guest (also referred to as guest drive
+designation in some specifications).  L<xen-vbd-interface(7)>
+
+=item Supported values
+
+hd[x], xvd[x], sd[x] etc.  Please refer to the above specification for
+further details.
+
+=item Deprecated values
+
+None
+
+=item Default Value
+
+None, this parameter is mandatory.
+
+=back
+
+=item B<access>
+
+=over 4
+
+=item Description
+
+Specified access control information.  Whether or not the block device is
+provided to the guest in read-only or read-write mode depends on this
+attribute.
+
+=item Supported values
+
+C<ro>, C<r>   (specifies read-only)
+
+C<rw>, C<w>   (specifies read/write)
+
+=item Deprecated values
+
+None
+
+=item Default value
+
+C<rw> unless devtype=cdrom, in which case C<r>
+
+=back
+
+=back
+
+=head1 Other Parameters And Flags
+
+=over 4
+
+=item B<devtype>=I<DEVTYPE>
+
+=over 4
+
+=item Description
+
+Qualifies virtual device type.
+
+=item Supported values
+
+cdrom
+
+=item Deprecated values
+
+None
+
+=item Mandatory
+
+No
+
+=back
+
+=item B<cdrom>
+
+Convenience alias for "devtype=cdrom".
+
+
+=item B<backend>=I<DOMAIN-NAME>
+
+=over 4
+
+=item Description
+
+Designates a backend domain for the device
+
+=item Supported values
+
+Valid domain names
+
+=item Mandatory
+
+No
+
+=back
+
+Specifies the backend domain which this device should attach to. This
+defaults to domain 0. Specifying another domain requires setting up a
+driver domain which is outside the scope of this document.
+
+
+=item B<backendtype>=I<TYPE>
+
+=over 4
+
+=item Description
+
+Specifies the backend implementation to use
+
+=item Supported values
+
+phy, tap, qdisk
+
+=item Mandatory
+
+No
+
+=item Default value
+
+Automatically determine which backend to use.
+
+=back
+
+This does not affect the guest's view of the device.  It controls
+which software implementation of the Xen backend driver is used.
+
+Not all backend drivers support all combinations of other options.
+For example, "phy" does not support formats other than "raw".
+Normally this option should not be specified, in which case libxl will
+automatically determine the most suitable backend.
+
+
+=item B<script>=I<SCRIPT>
+
+Specifies that B<target> is not a normal host path, but rather
+information to be interpreted by the executable program I<SCRIPT>,
+(looked for in F</etc/xen/scripts>, if it doesn't contain a slash).
+
+These scripts are normally called "block-I<SCRIPT>".
+
+
+=item B<direct-io-safe>
+
+=over 4
+
+=item Description
+
+Disables non-O_DIRECT workaround
+
+=item Supported values
+
+absent, present
+
+=item Mandatory
+
+No
+
+=item Default value
+
+absent (workaround may be enabled)
+
+=back
+
+There is a memory lifetime bug in some driver domain (dom0) kernels
+which can cause crashes when using O_DIRECT.  The bug occurs due to a
+mismatch between the backend-visible lifetime of pages used for the
+Xen PV network protocol and that expected by the backend kernel's
+networking subsystem.  This can cause crashes when using certain
+backends with certain underlying storage.
+
+See:
+ L<http://lists.xen.org/archives/html/xen-devel/2012-12/msg01154.html>
+
+For this reason, (this version of) the Xen libxl toolstack disables
+O_DIRECT when using the qemu-based Xen PV backend (C<qdisk>).
+
+However, this workaround has performance and scaling implications, and
+it is only necessary if the underlying device is a network filesystem.
+If the underlying device is not, then it is good to disable it; that
+is what this option is for.
+
+This option simply requests that the workaround be disabled.  (However,
+not all backends versions which use the workaround understand this
+option, so this is on a best effort basis.)
+
+It's important to note that if you are storing the VM disk on a
+network filesystem or a network block device (NFS or ISCSI) it might
+not be safe to use this option.  Otherwise specifying it is safe and
+can give better performances.
+
+If in the future the bug is fixed properly this option will then be
+silently ignored.
+
+
+=item B<discard> / B<no-discard>
+
+=over 4
+
+=item Description
+
+Request that backend advertise discard support to frontend
+
+=item Supported values
+
+discard, no-discard
+
+=item Mandatory
+
+No
+
+=item Default value
+
+discard
+
+=back
+
+An advisory setting for the backend driver, specifying whether to
+advertise discard support (TRIM, UNMAP) to the frontend.  The real
+benefit of this option is to be able to force it off rather than on.  It
+can be used to disable "hole punching" for file based backends which
+were intentionally created non-sparse to avoid fragmentation of the
+file.
+
+=back
+
+
+=head1 COLO Parameters
+
+=over 4
+
+=item B<colo>
+
+Enable COLO HA for disk. For better understanding block replication on
+QEMU, please refer to: L<http://wiki.qemu.org/Features/BlockReplication>
+Note that the COLO configuration settings should be considered unstable.
+They may change incompatibly in future versions of Xen.
+
+
+=item B<colo-host>
+
+=over 4
+
+=item Description
+
+Secondary host's address
+
+=item Mandatory
+
+Yes when COLO enabled
+
+=back
+
+=item B<colo-port>
+
+=over 4
+
+=item Description
+
+Secondary port.  We will run a nbd server on secondary host,
+and the nbd server will listen this port.
+
+=item Mandatory
+
+Yes when COLO enabled
+
+=back
+
+=item B<colo-export>
+
+=over 4
+
+=item Description
+
+We will run a nbd server on secondary host, exportname is
+the nbd server's disk export name.
+
+=item Mandatory
+
+Yes when COLO enabled
+
+=back
+
+=item B<active-disk>
+
+=over 4
+
+=item Description
+
+This is used by secondary. Secondary guest's write will be buffered in this
+disk.
+
+=item Mandatory
+
+Yes when COLO enabled
+
+=back
+
+=item B<hidden-disk>
+
+=over 4
+
+=item Description
+
+This is used by secondary. It buffers the original content that is modified
+by the primary VM.
+
+=item Mandatory
+
+Yes when COLO enabled
+
+=back
+
+=back
+
+
+=head1 Deprecated Parameters, Prefixes And Syntaxes
+
+Deprecated forms are acceptable and are intended work compatibly with
+xend and xl from xen 4.1.  In future they may print a warning.
+Support for deprecated parameters and syntaxes are likely to be
+dropped in future versions of xl.
+
+There is support for a deprecated old syntax for C<DISKSPEC>:
+
+  [<format>:][<target>],<vdev>[:<devtype>],<access>   (deprecated)
+
+This syntax also supports deprecated prefixes, described below.  These
+are found prepended to the format parameter - eg C<tap:aio:qcow:>.
+
+=over 4
+
+=item B<format>
+
+=over 4
+
+=item Description
+
+Specifies the format (deprecated)
+
+=item Supported values
+
+raw:  qcow2:  vhd:
+
+=back
+
+In xend and old versions of libxl it was necessary to specify the
+format with a prefix.  For compatibility, these three prefixes are
+recognised as specifying the corresponding format.  They are
+equivalent to C<format=FORMAT> or the specification of B<format>
+(without a colon) as a positional parameter.
+
+
+=item B<script>
+
+=over 4
+
+=item Description
+
+Specifies the script (deprecated)
+
+=item Supported values
+
+iscsi:  nbd:  enbd:  drbd:
+
+=back
+
+In xend and old versions of libxl it was necessary to specify the
+"script" (see above) with a prefix.  For compatibility, these four
+prefixes are recognised as specifying the corresponding script.  They
+are equivalent to C<script=block-SCRIPT>.
+
+
+=item B<deprecated-prefix>
+
+=over 4
+
+=item Description
+
+Deprecated prefix, ignored
+
+=item Supported values
+
+tapdisk:  tap2:  aio:  ioemu:  file:  phy:
+
+=back
+
+Various prefixes were required by xend and older versions of libxl to
+make the block devices work.  In some cases these options would
+override the backend type, but in other cases they would be ignored in
+favour of "making it work"; in yet other cases it would be necessary
+to specify several of these, for example:
+
+  tap:aio:/some/path...
+
+All of these prefixes are now stripped and ignored.
+
+=back
+
+=head2 Missing format and empty target
+
+The following syntax is also supported:
+
+  ,<vdev>:<devtype>,<access>   (deprecated)
+
+This is solely for compatibility with xend's syntax for empty cdroms,
+which is (for example) C<,hdc:cdrom,r>.
diff --git a/docs/man/xl-disk-configuration.pod.5 b/docs/man/xl-disk-configuration.pod.5
deleted file mode 100644 (file)
index d3eedc1..0000000
+++ /dev/null
@@ -1,529 +0,0 @@
-=head1 NAME
-
-xl-disk-configuration - XL Disk Configuration Syntax
-
-=head1 SYNTAX
-
-This document specifies the xl config file format disk configuration
-option.  It has the following form:
-
-   disk = [ 'DISKSPEC', 'DISKSPEC', ... ]
-
-where each C<DISKSPEC> is in this form:
-
-   [<key>=<value>|<flag>,]*,
-     [<target>, [<format>, [<vdev>, [<access>]]]],
-     [<key>=<value>|<flag>,]*
-     [target=<target>]
-
-For example, these strings are equivalent:
-
-    /dev/vg/guest-volume,,hda
-    /dev/vg/guest-volume,raw,hda,rw
-    format=raw, vdev=hda, access=rw, target=/dev/vg/guest-volume
-    raw:/dev/vg/guest-volume,hda,w  (deprecated, see below)
-
-As are these:
-
-    /root/image.iso,,hdc,cdrom
-    /root/image.iso,,hdc,,cdrom
-    /root/image.iso,raw,hdc,devtype=cdrom
-    format=raw, vdev=hdc, access=ro, devtype=cdrom, target=/root/image.iso
-    raw:/root/image.iso,hdc:cdrom,ro   (deprecated, see below)
-
-These might be specified in the domain config file like this:
-
-    disk = [ '/dev/vg/guest-volume,,hda', '/root/image.iso,,hdc,cdrom' ]
-
-
-More formally, the string is a series of comma-separated keyword/value
-pairs, flags and positional parameters.  Parameters which are not bare
-keywords and which do not contain "=" symbols are assigned to the
-so-far-unspecified positional parameters, in the order below.  The
-positional parameters may also be specified explicitly by name.
-
-Each parameter may be specified at most once, either as a positional
-parameter or a named parameter.  Default values apply if the parameter
-is not specified, or if it is specified with an empty value (whether
-positionally or explicitly).
-
-Whitespace may appear before each parameter and will be ignored.
-
-=head1 Positional Parameters
-
-=over 4
-
-=item B<target>
-
-=over 4
-
-=item Description
-
-Block device or image file path.  When this is used as a path, F</dev>
-will be prepended if the path doesn't start with a '/'.
-
-=item Supported values
-
-N/A
-
-=item Deprecated values
-
-N/A
-
-=item Default value
-
-None.  While a path is provided in most cases there is an exception:
-for a cdrom device, lack of this attribute would imply an empty cdrom
-drive.
-
-=item Special syntax
-
-When this parameter is specified by name, ie with the C<target=>
-syntax in the configuration file, it consumes the whole rest of the
-C<DISKSPEC> including trailing whitespaces.  Therefore in that case
-it must come last.  This is permissible even if an empty value for
-the target was already specified as a positional parameter.  This
-is the only way to specify a target string containing metacharacters
-such as commas and (in some cases) colons, which would otherwise be
-misinterpreted.
-
-Future parameter and flag names will start with an ascii letter and
-contain only ascii alphanumerics, hyphens and underscores, and will
-not be legal as vdevs.  Targets which might match that syntax
-should not be specified as positional parameters.
-
-=back
-
-=item B<format>
-
-=over 4
-
-=item Description
-
-Specifies the format of image file.
-
-=item Supported values
-
-raw, qcow, qcow2, vhd, qed
-
-=item Deprecated values
-
-None
-
-=item Default value
-
-raw
-
-=back
-
-=item B<vdev>
-
-=over 4
-
-=item Description
-
-Virtual device as seen by the guest (also referred to as guest drive
-designation in some specifications).  L<xen-vbd-interface(7)>
-
-=item Supported values
-
-hd[x], xvd[x], sd[x] etc.  Please refer to the above specification for
-further details.
-
-=item Deprecated values
-
-None
-
-=item Default Value
-
-None, this parameter is mandatory.
-
-=back
-
-=item B<access>
-
-=over 4
-
-=item Description
-
-Specified access control information.  Whether or not the block device is
-provided to the guest in read-only or read-write mode depends on this
-attribute.
-
-=item Supported values
-
-C<ro>, C<r>   (specifies read-only)
-
-C<rw>, C<w>   (specifies read/write)
-
-=item Deprecated values
-
-None
-
-=item Default value
-
-C<rw> unless devtype=cdrom, in which case C<r>
-
-=back
-
-=back
-
-=head1 Other Parameters And Flags
-
-=over 4
-
-=item B<devtype>=I<DEVTYPE>
-
-=over 4
-
-=item Description
-
-Qualifies virtual device type.
-
-=item Supported values
-
-cdrom
-
-=item Deprecated values
-
-None
-
-=item Mandatory
-
-No
-
-=back
-
-=item B<cdrom>
-
-Convenience alias for "devtype=cdrom".
-
-
-=item B<backend>=I<DOMAIN-NAME>
-
-=over 4
-
-=item Description
-
-Designates a backend domain for the device
-
-=item Supported values
-
-Valid domain names
-
-=item Mandatory
-
-No
-
-=back
-
-Specifies the backend domain which this device should attach to. This
-defaults to domain 0. Specifying another domain requires setting up a
-driver domain which is outside the scope of this document.
-
-
-=item B<backendtype>=I<TYPE>
-
-=over 4
-
-=item Description
-
-Specifies the backend implementation to use
-
-=item Supported values
-
-phy, tap, qdisk
-
-=item Mandatory
-
-No
-
-=item Default value
-
-Automatically determine which backend to use.
-
-=back
-
-This does not affect the guest's view of the device.  It controls
-which software implementation of the Xen backend driver is used.
-
-Not all backend drivers support all combinations of other options.
-For example, "phy" does not support formats other than "raw".
-Normally this option should not be specified, in which case libxl will
-automatically determine the most suitable backend.
-
-
-=item B<script>=I<SCRIPT>
-
-Specifies that B<target> is not a normal host path, but rather
-information to be interpreted by the executable program I<SCRIPT>,
-(looked for in F</etc/xen/scripts>, if it doesn't contain a slash).
-
-These scripts are normally called "block-I<SCRIPT>".
-
-
-=item B<direct-io-safe>
-
-=over 4
-
-=item Description
-
-Disables non-O_DIRECT workaround
-
-=item Supported values
-
-absent, present
-
-=item Mandatory
-
-No
-
-=item Default value
-
-absent (workaround may be enabled)
-
-=back
-
-There is a memory lifetime bug in some driver domain (dom0) kernels
-which can cause crashes when using O_DIRECT.  The bug occurs due to a
-mismatch between the backend-visible lifetime of pages used for the
-Xen PV network protocol and that expected by the backend kernel's
-networking subsystem.  This can cause crashes when using certain
-backends with certain underlying storage.
-
-See:
- L<http://lists.xen.org/archives/html/xen-devel/2012-12/msg01154.html>
-
-For this reason, (this version of) the Xen libxl toolstack disables
-O_DIRECT when using the qemu-based Xen PV backend (C<qdisk>).
-
-However, this workaround has performance and scaling implications, and
-it is only necessary if the underlying device is a network filesystem.
-If the underlying device is not, then it is good to disable it; that
-is what this option is for.
-
-This option simply requests that the workaround be disabled.  (However,
-not all backends versions which use the workaround understand this
-option, so this is on a best effort basis.)
-
-It's important to note that if you are storing the VM disk on a
-network filesystem or a network block device (NFS or ISCSI) it might
-not be safe to use this option.  Otherwise specifying it is safe and
-can give better performances.
-
-If in the future the bug is fixed properly this option will then be
-silently ignored.
-
-
-=item B<discard> / B<no-discard>
-
-=over 4
-
-=item Description
-
-Request that backend advertise discard support to frontend
-
-=item Supported values
-
-discard, no-discard
-
-=item Mandatory
-
-No
-
-=item Default value
-
-discard
-
-=back
-
-An advisory setting for the backend driver, specifying whether to
-advertise discard support (TRIM, UNMAP) to the frontend.  The real
-benefit of this option is to be able to force it off rather than on.  It
-can be used to disable "hole punching" for file based backends which
-were intentionally created non-sparse to avoid fragmentation of the
-file.
-
-=back
-
-
-=head1 COLO Parameters
-
-=over 4
-
-=item B<colo>
-
-Enable COLO HA for disk. For better understanding block replication on
-QEMU, please refer to: L<http://wiki.qemu.org/Features/BlockReplication>
-Note that the COLO configuration settings should be considered unstable.
-They may change incompatibly in future versions of Xen.
-
-
-=item B<colo-host>
-
-=over 4
-
-=item Description
-
-Secondary host's address
-
-=item Mandatory
-
-Yes when COLO enabled
-
-=back
-
-=item B<colo-port>
-
-=over 4
-
-=item Description
-
-Secondary port.  We will run a nbd server on secondary host,
-and the nbd server will listen this port.
-
-=item Mandatory
-
-Yes when COLO enabled
-
-=back
-
-=item B<colo-export>
-
-=over 4
-
-=item Description
-
-We will run a nbd server on secondary host, exportname is
-the nbd server's disk export name.
-
-=item Mandatory
-
-Yes when COLO enabled
-
-=back
-
-=item B<active-disk>
-
-=over 4
-
-=item Description
-
-This is used by secondary. Secondary guest's write will be buffered in this
-disk.
-
-=item Mandatory
-
-Yes when COLO enabled
-
-=back
-
-=item B<hidden-disk>
-
-=over 4
-
-=item Description
-
-This is used by secondary. It buffers the original content that is modified
-by the primary VM.
-
-=item Mandatory
-
-Yes when COLO enabled
-
-=back
-
-=back
-
-
-=head1 Deprecated Parameters, Prefixes And Syntaxes
-
-Deprecated forms are acceptable and are intended work compatibly with
-xend and xl from xen 4.1.  In future they may print a warning.
-Support for deprecated parameters and syntaxes are likely to be
-dropped in future versions of xl.
-
-There is support for a deprecated old syntax for C<DISKSPEC>:
-
-  [<format>:][<target>],<vdev>[:<devtype>],<access>   (deprecated)
-
-This syntax also supports deprecated prefixes, described below.  These
-are found prepended to the format parameter - eg C<tap:aio:qcow:>.
-
-=over 4
-
-=item B<format>
-
-=over 4
-
-=item Description
-
-Specifies the format (deprecated)
-
-=item Supported values
-
-raw:  qcow2:  vhd:
-
-=back
-
-In xend and old versions of libxl it was necessary to specify the
-format with a prefix.  For compatibility, these three prefixes are
-recognised as specifying the corresponding format.  They are
-equivalent to C<format=FORMAT> or the specification of B<format>
-(without a colon) as a positional parameter.
-
-
-=item B<script>
-
-=over 4
-
-=item Description
-
-Specifies the script (deprecated)
-
-=item Supported values
-
-iscsi:  nbd:  enbd:  drbd:
-
-=back
-
-In xend and old versions of libxl it was necessary to specify the
-"script" (see above) with a prefix.  For compatibility, these four
-prefixes are recognised as specifying the corresponding script.  They
-are equivalent to C<script=block-SCRIPT>.
-
-
-=item B<deprecated-prefix>
-
-=over 4
-
-=item Description
-
-Deprecated prefix, ignored
-
-=item Supported values
-
-tapdisk:  tap2:  aio:  ioemu:  file:  phy:
-
-=back
-
-Various prefixes were required by xend and older versions of libxl to
-make the block devices work.  In some cases these options would
-override the backend type, but in other cases they would be ignored in
-favour of "making it work"; in yet other cases it would be necessary
-to specify several of these, for example:
-
-  tap:aio:/some/path...
-
-All of these prefixes are now stripped and ignored.
-
-=back
-
-=head2 Missing format and empty target
-
-The following syntax is also supported:
-
-  ,<vdev>:<devtype>,<access>   (deprecated)
-
-This is solely for compatibility with xend's syntax for empty cdroms,
-which is (for example) C<,hdc:cdrom,r>.
diff --git a/docs/man/xl-network-configuration.5.pod b/docs/man/xl-network-configuration.5.pod
new file mode 100644 (file)
index 0000000..e9ac3c5
--- /dev/null
@@ -0,0 +1,251 @@
+=encoding utf8
+
+=head1 NAME
+
+xl-network-configuration - XL Network Configuration Syntax
+
+
+=head1 SYNTAX
+
+This document specifies the xl config file format vif configuration
+option.  It has the following form:
+
+        vif = [ '<vifspec>', '<vifspec>', ... ]
+
+where each vifspec is in this form:
+
+        [<key>=<value>|<flag>,]
+
+For example:
+
+        'mac=00:16:3E:74:3d:76,model=rtl8139,bridge=xenbr0'
+        'mac=00:16:3E:74:34:32'
+        '' # The empty string
+
+These might be specified in the domain config file like this:
+
+        vif = [ 'mac=00:16:3E:74:34:32', 'mac=00:16:3e:5f:48:e4,bridge=xenbr1' ]
+
+More formally, the string is a series of comma-separated keyword/value
+pairs. All keywords are optional.
+
+Each device has a C<DEVID> which is its index within the vif list, starting from 0.
+
+
+=head1 Keywords
+
+
+=head2 mac
+
+If specified then this option specifies the MAC address inside the
+guest of this VIF device. The value is a 48-bit number represented as
+six groups of two hexadecimal digits, separated by colons (:).
+
+The default if this keyword is not specified is to be automatically
+generate a MAC address inside the space assigned to Xen's
+L<Organizationally Unique Identifier|http://en.wikipedia.org/wiki/Organizationally_Unique_Identifier> (00:16:3e).
+
+If you are choosing a MAC address then it is strongly recommend to
+follow one of the following strategies:
+
+=over
+
+=item *
+
+Generate a random sequence of 6 byte, set the locally administered
+bit (bit 2 of the first byte) and clear the multicast bit (bit 1
+of the first byte). In other words the first byte should have the
+bit pattern xxxxxx10 (where x is a randomly generated bit) and the
+remaining 5 bytes are randomly generated See
+[http://en.wikipedia.org/wiki/MAC_address] for more details the
+structure of a MAC address.
+
+
+=item *
+
+Allocate an address from within the space defined by your
+organization's OUI (if you have one) following your organization's
+procedures for doing so.
+
+
+=item *
+
+Allocate an address from within the space defined by Xen's OUI
+(00:16:3e). Taking care not to clash with other users of the
+physical network segment where this VIF will reside.
+
+
+=back
+
+If you have an OUI for your own use then that is the preferred
+strategy. Otherwise in general you should prefer to generate a random
+MAC and set the locally administered bit since this allows for more
+bits of randomness than using the Xen OUI.
+
+
+=head2 bridge
+
+Specifies the name of the network bridge which this VIF should be
+added to. The default is C<xenbr0>. The bridge must be configured using
+your distribution's network configuration tools. See the L<wiki|http://wiki.xen.org/wiki/HostConfiguration/Networking>
+for guidance and examples.
+
+
+=head2 gatewaydev
+
+Specifies the name of the network interface which has an IP and which
+is in the network the VIF should communicate with. This is used in the host
+by the vif-route hotplug script. See L<wiki|http://wiki.xen.org/wiki/Vif-route> for guidance and
+examples.
+
+NOTE: netdev is a deprecated alias of this option.
+
+
+=head2 type
+
+This keyword is valid for HVM guests only.
+
+Specifies the type of device to valid values are:
+
+=over
+
+=item *
+
+C<ioemu> (default) -- this device will be provided as an emulate
+device to the guest and also as a paravirtualised device which the
+guest may choose to use instead if it has suitable drivers
+available.
+
+
+=item *
+
+C<vif> -- this device will be provided as a paravirtualised device
+only.
+
+
+=back
+
+
+=head2 model
+
+This keyword is valid for HVM guest devices with C<type=ioemu> only.
+
+Specifies the type device to emulated for this guest. Valid values
+are:
+
+=over
+
+=item *
+
+C<rtl8139> (default) -- Realtek RTL8139
+
+
+=item *
+
+C<e1000> -- Intel E1000
+
+
+=item *
+
+in principle any device supported by your device model
+
+
+=back
+
+
+=head2 vifname
+
+Specifies the backend device name for the virtual device.
+
+If the domain is an HVM domain then the associated emulated (tap)
+device will have a "-emu" suffice added.
+
+The default name for the virtual device is C<vifDOMID.DEVID> where
+C<DOMID> is the guest domain ID and C<DEVID> is the device
+number. Likewise the default tap name is C<vifDOMID.DEVID-emu>.
+
+
+=head2 script
+
+Specifies the hotplug script to run to configure this device (e.g. to
+add it to the relevant bridge). Defaults to
+C<XEN_SCRIPT_DIR/vif-bridge> but can be set to any script. Some example
+scripts are installed in C<XEN_SCRIPT_DIR>.
+
+
+=head2 ip
+
+Specifies the IP address for the device, the default is not to
+specify an IP address.
+
+What, if any, effect this has depends on the hotplug script which is
+configured. A typically behaviour (exhibited by the example hotplug
+scripts) if set might be to configure firewall rules to allow only the
+specified IP address to be used by the guest (blocking all others).
+
+
+=head2 backend
+
+Specifies the backend domain which this device should attach to. This
+defaults to domain 0.  Specifying another domain requires setting up a
+driver domain which is outside the scope of this document.
+
+
+=head2 rate
+
+Specifies the rate at which the outgoing traffic will be limited to.
+The default if this keyword is not specified is unlimited.
+
+The rate may be specified as "/s" or optionally "/s@".
+
+=over
+
+=item *
+
+C<RATE> is in bytes and can accept suffixes:
+
+=over
+
+=item *
+
+GB, MB, KB, B for bytes.
+
+
+=item *
+
+Gb, Mb, Kb, b for bits.
+
+
+=back
+
+
+
+=item *
+
+C<INTERVAL> is in microseconds and can accept suffixes: ms, us, s.
+It determines the frequency at which the vif transmission credit
+is replenished. The default is 50ms.
+
+
+=back
+
+Vif rate limiting is credit-based. It means that for "1MB/s@20ms", the
+available credit will be equivalent of the traffic you would have done
+at "1MB/s" during 20ms. This will results in a credit of 20,000 bytes
+replenished every 20,000 us.
+
+For example:
+
+        'rate=10Mb/s' -- meaning up to 10 megabits every second
+        'rate=250KB/s' -- meaning up to 250 kilobytes every second
+        'rate=1MB/s@20ms' -- meaning 20,000 bytes in every 20 millisecond period
+
+NOTE: The actual underlying limits of rate limiting are dependent
+on the underlying netback implementation.
+
+
+=head2 devid
+
+Specifies the devid manually instead of letting xl choose the lowest index available.
+
+NOTE: This should not be set unless you have a reason to.
diff --git a/docs/man/xl-network-configuration.pod.5 b/docs/man/xl-network-configuration.pod.5
deleted file mode 100644 (file)
index e9ac3c5..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-=encoding utf8
-
-=head1 NAME
-
-xl-network-configuration - XL Network Configuration Syntax
-
-
-=head1 SYNTAX
-
-This document specifies the xl config file format vif configuration
-option.  It has the following form:
-
-        vif = [ '<vifspec>', '<vifspec>', ... ]
-
-where each vifspec is in this form:
-
-        [<key>=<value>|<flag>,]
-
-For example:
-
-        'mac=00:16:3E:74:3d:76,model=rtl8139,bridge=xenbr0'
-        'mac=00:16:3E:74:34:32'
-        '' # The empty string
-
-These might be specified in the domain config file like this:
-
-        vif = [ 'mac=00:16:3E:74:34:32', 'mac=00:16:3e:5f:48:e4,bridge=xenbr1' ]
-
-More formally, the string is a series of comma-separated keyword/value
-pairs. All keywords are optional.
-
-Each device has a C<DEVID> which is its index within the vif list, starting from 0.
-
-
-=head1 Keywords
-
-
-=head2 mac
-
-If specified then this option specifies the MAC address inside the
-guest of this VIF device. The value is a 48-bit number represented as
-six groups of two hexadecimal digits, separated by colons (:).
-
-The default if this keyword is not specified is to be automatically
-generate a MAC address inside the space assigned to Xen's
-L<Organizationally Unique Identifier|http://en.wikipedia.org/wiki/Organizationally_Unique_Identifier> (00:16:3e).
-
-If you are choosing a MAC address then it is strongly recommend to
-follow one of the following strategies:
-
-=over
-
-=item *
-
-Generate a random sequence of 6 byte, set the locally administered
-bit (bit 2 of the first byte) and clear the multicast bit (bit 1
-of the first byte). In other words the first byte should have the
-bit pattern xxxxxx10 (where x is a randomly generated bit) and the
-remaining 5 bytes are randomly generated See
-[http://en.wikipedia.org/wiki/MAC_address] for more details the
-structure of a MAC address.
-
-
-=item *
-
-Allocate an address from within the space defined by your
-organization's OUI (if you have one) following your organization's
-procedures for doing so.
-
-
-=item *
-
-Allocate an address from within the space defined by Xen's OUI
-(00:16:3e). Taking care not to clash with other users of the
-physical network segment where this VIF will reside.
-
-
-=back
-
-If you have an OUI for your own use then that is the preferred
-strategy. Otherwise in general you should prefer to generate a random
-MAC and set the locally administered bit since this allows for more
-bits of randomness than using the Xen OUI.
-
-
-=head2 bridge
-
-Specifies the name of the network bridge which this VIF should be
-added to. The default is C<xenbr0>. The bridge must be configured using
-your distribution's network configuration tools. See the L<wiki|http://wiki.xen.org/wiki/HostConfiguration/Networking>
-for guidance and examples.
-
-
-=head2 gatewaydev
-
-Specifies the name of the network interface which has an IP and which
-is in the network the VIF should communicate with. This is used in the host
-by the vif-route hotplug script. See L<wiki|http://wiki.xen.org/wiki/Vif-route> for guidance and
-examples.
-
-NOTE: netdev is a deprecated alias of this option.
-
-
-=head2 type
-
-This keyword is valid for HVM guests only.
-
-Specifies the type of device to valid values are:
-
-=over
-
-=item *
-
-C<ioemu> (default) -- this device will be provided as an emulate
-device to the guest and also as a paravirtualised device which the
-guest may choose to use instead if it has suitable drivers
-available.
-
-
-=item *
-
-C<vif> -- this device will be provided as a paravirtualised device
-only.
-
-
-=back
-
-
-=head2 model
-
-This keyword is valid for HVM guest devices with C<type=ioemu> only.
-
-Specifies the type device to emulated for this guest. Valid values
-are:
-
-=over
-
-=item *
-
-C<rtl8139> (default) -- Realtek RTL8139
-
-
-=item *
-
-C<e1000> -- Intel E1000
-
-
-=item *
-
-in principle any device supported by your device model
-
-
-=back
-
-
-=head2 vifname
-
-Specifies the backend device name for the virtual device.
-
-If the domain is an HVM domain then the associated emulated (tap)
-device will have a "-emu" suffice added.
-
-The default name for the virtual device is C<vifDOMID.DEVID> where
-C<DOMID> is the guest domain ID and C<DEVID> is the device
-number. Likewise the default tap name is C<vifDOMID.DEVID-emu>.
-
-
-=head2 script
-
-Specifies the hotplug script to run to configure this device (e.g. to
-add it to the relevant bridge). Defaults to
-C<XEN_SCRIPT_DIR/vif-bridge> but can be set to any script. Some example
-scripts are installed in C<XEN_SCRIPT_DIR>.
-
-
-=head2 ip
-
-Specifies the IP address for the device, the default is not to
-specify an IP address.
-
-What, if any, effect this has depends on the hotplug script which is
-configured. A typically behaviour (exhibited by the example hotplug
-scripts) if set might be to configure firewall rules to allow only the
-specified IP address to be used by the guest (blocking all others).
-
-
-=head2 backend
-
-Specifies the backend domain which this device should attach to. This
-defaults to domain 0.  Specifying another domain requires setting up a
-driver domain which is outside the scope of this document.
-
-
-=head2 rate
-
-Specifies the rate at which the outgoing traffic will be limited to.
-The default if this keyword is not specified is unlimited.
-
-The rate may be specified as "/s" or optionally "/s@".
-
-=over
-
-=item *
-
-C<RATE> is in bytes and can accept suffixes:
-
-=over
-
-=item *
-
-GB, MB, KB, B for bytes.
-
-
-=item *
-
-Gb, Mb, Kb, b for bits.
-
-
-=back
-
-
-
-=item *
-
-C<INTERVAL> is in microseconds and can accept suffixes: ms, us, s.
-It determines the frequency at which the vif transmission credit
-is replenished. The default is 50ms.
-
-
-=back
-
-Vif rate limiting is credit-based. It means that for "1MB/s@20ms", the
-available credit will be equivalent of the traffic you would have done
-at "1MB/s" during 20ms. This will results in a credit of 20,000 bytes
-replenished every 20,000 us.
-
-For example:
-
-        'rate=10Mb/s' -- meaning up to 10 megabits every second
-        'rate=250KB/s' -- meaning up to 250 kilobytes every second
-        'rate=1MB/s@20ms' -- meaning 20,000 bytes in every 20 millisecond period
-
-NOTE: The actual underlying limits of rate limiting are dependent
-on the underlying netback implementation.
-
-
-=head2 devid
-
-Specifies the devid manually instead of letting xl choose the lowest index available.
-
-NOTE: This should not be set unless you have a reason to.
diff --git a/docs/man/xl-numa-placement.7.pod b/docs/man/xl-numa-placement.7.pod
new file mode 100644 (file)
index 0000000..ae83302
--- /dev/null
@@ -0,0 +1,293 @@
+=encoding utf8
+
+=head1 NAME
+
+xl-numa-placement - Guest Automatic NUMA Placement in libxl and xl
+
+=head1 DESCRIPTION
+
+=head2 Rationale
+
+NUMA (which stands for Non-Uniform Memory Access) means that the memory
+accessing times of a program running on a CPU depends on the relative
+distance between that CPU and that memory. In fact, most of the NUMA
+systems are built in such a way that each processor has its local memory,
+on which it can operate very fast. On the other hand, getting and storing
+data from and on remote memory (that is, memory local to some other processor)
+is quite more complex and slow. On these machines, a NUMA node is usually
+defined as a set of processor cores (typically a physical CPU package) and
+the memory directly attached to the set of cores.
+
+NUMA awareness becomes very important as soon as many domains start
+running memory-intensive workloads on a shared host. In fact, the cost
+of accessing non node-local memory locations is very high, and the
+performance degradation is likely to be noticeable.
+
+For more information, have a look at the L<Xen NUMA Introduction|http://wiki.xen.org/wiki/Xen_NUMA_Introduction>
+page on the Wiki.
+
+
+=head2 Xen and NUMA machines: the concept of I<node-affinity>
+
+The Xen hypervisor deals with NUMA machines throughout the concept of
+I<node-affinity>. The node-affinity of a domain is the set of NUMA nodes
+of the host where the memory for the domain is being allocated (mostly,
+at domain creation time). This is, at least in principle, different and
+unrelated with the vCPU (hard and soft, see below) scheduling affinity,
+which instead is the set of pCPUs where the vCPU is allowed (or prefers)
+to run.
+
+Of course, despite the fact that they belong to and affect different
+subsystems, the domain node-affinity and the vCPUs affinity are not
+completely independent.
+In fact, if the domain node-affinity is not explicitly specified by the
+user, via the proper libxl calls or xl config item, it will be computed
+basing on the vCPUs' scheduling affinity.
+
+Notice that, even if the node affinity of a domain may change on-line,
+it is very important to "place" the domain correctly when it is fist
+created, as the most of its memory is allocated at that time and can
+not (for now) be moved easily.
+
+
+=head2 Placing via pinning and cpupools
+
+The simplest way of placing a domain on a NUMA node is setting the hard
+scheduling affinity of the domain's vCPUs to the pCPUs of the node. This
+also goes under the name of vCPU pinning, and can be done through the
+"cpus=" option in the config file (more about this below). Another option
+is to pool together the pCPUs spanning the node and put the domain in
+such a I<cpupool> with the "pool=" config option (as documented in our
+L<Wiki|http://wiki.xen.org/wiki/Cpupools_Howto>).
+
+In both the above cases, the domain will not be able to execute outside
+the specified set of pCPUs for any reasons, even if all those pCPUs are
+busy doing something else while there are others, idle, pCPUs.
+
+So, when doing this, local memory accesses are 100% guaranteed, but that
+may come at he cost of some load imbalances.
+
+
+=head2 NUMA aware scheduling
+
+If using the credit1 scheduler, and starting from Xen 4.3, the scheduler
+itself always tries to run the domain's vCPUs on one of the nodes in
+its node-affinity. Only if that turns out to be impossible, it will just
+pick any free pCPU. Locality of access is less guaranteed than in the
+pinning case, but that comes along with better chances to exploit all
+the host resources (e.g., the pCPUs).
+
+Starting from Xen 4.5, credit1 supports two forms of affinity: hard and
+soft, both on a per-vCPU basis. This means each vCPU can have its own
+soft affinity, stating where such vCPU prefers to execute on. This is
+less strict than what it (also starting from 4.5) is called hard affinity,
+as the vCPU can potentially run everywhere, it just prefers some pCPUs
+rather than others.
+In Xen 4.5, therefore, NUMA-aware scheduling is achieved by matching the
+soft affinity of the vCPUs of a domain with its node-affinity.
+
+In fact, as it was for 4.3, if all the pCPUs in a vCPU's soft affinity
+are busy, it is possible for the domain to run outside from there. The
+idea is that slower execution (due to remote memory accesses) is still
+better than no execution at all (as it would happen with pinning). For
+this reason, NUMA aware scheduling has the potential of bringing
+substantial performances benefits, although this will depend on the
+workload.
+
+Notice that, for each vCPU, the following three scenarios are possbile:
+
+=over
+
+=item *
+
+a vCPU I<is pinned> to some pCPUs and I<does not have> any soft affinity
+In this case, the vCPU is always scheduled on one of the pCPUs to which
+it is pinned, without any specific peference among them.
+
+
+=item *
+
+a vCPU I<has> its own soft affinity and I<is not> pinned to any particular
+pCPU. In this case, the vCPU can run on every pCPU. Nevertheless, the
+scheduler will try to have it running on one of the pCPUs in its soft
+affinity;
+
+
+=item *
+
+a vCPU I<has> its own vCPU soft affinity and I<is also> pinned to some
+pCPUs. In this case, the vCPU is always scheduled on one of the pCPUs
+onto which it is pinned, with, among them, a preference for the ones
+that also forms its soft affinity. In case pinning and soft affinity
+form two disjoint sets of pCPUs, pinning "wins", and the soft affinity
+is just ignored.
+
+
+=back
+
+
+=head2 Guest placement in xl
+
+If using xl for creating and managing guests, it is very easy to ask for
+both manual or automatic placement of them across the host's NUMA nodes.
+
+Note that xm/xend does a very similar thing, the only differences being
+the details of the heuristics adopted for automatic placement (see below),
+and the lack of support (in both xm/xend and the Xen versions where that
+was the default toolstack) for NUMA aware scheduling.
+
+
+=head2 Placing the guest manually
+
+Thanks to the "cpus=" option, it is possible to specify where a domain
+should be created and scheduled on, directly in its config file. This
+affects NUMA placement and memory accesses as, in this case, the
+hypervisor constructs the node-affinity of a VM basing right on its
+vCPU pinning when it is created.
+
+This is very simple and effective, but requires the user/system
+administrator to explicitly specify the pinning for each and every domain,
+or Xen won't be able to guarantee the locality for their memory accesses.
+
+That, of course, also mean the vCPUs of the domain will only be able to
+execute on those same pCPUs.
+
+It is is also possible to have a "cpus_soft=" option in the xl config file,
+to specify the soft affinity for all the vCPUs of the domain. This affects
+the NUMA placement in the following way:
+
+=over
+
+=item *
+
+if only "cpus_soft=" is present, the VM's node-affinity will be equal
+to the nodes to which the pCPUs in the soft affinity mask belong;
+
+
+=item *
+
+if both "cpus_soft=" and "cpus=" are present, the VM's node-affinity
+will be equal to the nodes to which the pCPUs present both in hard and
+soft affinity belong.
+
+
+=back
+
+
+=head2 Placing the guest automatically
+
+If neither "cpus=" nor "cpus_soft=" are present in the config file, libxl
+tries to figure out on its own on which node(s) the domain could fit best.
+If it finds one (some), the domain's node affinity get set to there,
+and both memory allocations and NUMA aware scheduling (for the credit
+scheduler and starting from Xen 4.3) will comply with it. Starting from
+Xen 4.5, this also means that the mask resulting from this "fitting"
+procedure will become the soft affinity of all the vCPUs of the domain.
+
+It is worthwhile noting that optimally fitting a set of VMs on the NUMA
+nodes of an host is an incarnation of the Bin Packing Problem. In fact,
+the various VMs with different memory sizes are the items to be packed,
+and the host nodes are the bins. As such problem is known to be NP-hard,
+we will be using some heuristics.
+
+The first thing to do is find the nodes or the sets of nodes (from now
+on referred to as 'candidates') that have enough free memory and enough
+physical CPUs for accommodating the new domain. The idea is to find a
+spot for the domain with at least as much free memory as it has configured
+to have, and as much pCPUs as it has vCPUs.  After that, the actual
+decision on which candidate to pick happens accordingly to the following
+heuristics:
+
+=over
+
+=item *
+
+candidates involving fewer nodes are considered better. In case
+two (or more) candidates span the same number of nodes,
+
+
+=item *
+
+candidates with a smaller number of vCPUs runnable on them (due
+to previous placement and/or plain vCPU pinning) are considered
+better. In case the same number of vCPUs can run on two (or more)
+candidates,
+
+
+=item *
+
+the candidate with with the greatest amount of free memory is
+considered to be the best one.
+
+
+=back
+
+Giving preference to candidates with fewer nodes ensures better
+performance for the guest, as it avoid spreading its memory among
+different nodes. Favoring candidates with fewer vCPUs already runnable
+there ensures a good balance of the overall host load. Finally, if more
+candidates fulfil these criteria, prioritizing the nodes that have the
+largest amounts of free memory helps keeping the memory fragmentation
+small, and maximizes the probability of being able to put more domains
+there.
+
+
+=head2 Guest placement in libxl
+
+xl achieves automatic NUMA placement because that is what libxl does
+by default. No API is provided (yet) for modifying the behaviour of
+the placement algorithm. However, if your program is calling libxl,
+it is possible to set the C<numa_placement> build info key to C<false>
+(it is C<true> by default) with something like the below, to prevent
+any placement from happening:
+
+    libxl_defbool_set(&domain_build_info->numa_placement, false);
+
+Also, if C<numa_placement> is set to C<true>, the domain's vCPUs must
+not be pinned (i.e., C<<< domain_build_info->cpumap >>> must have all its
+bits set, as it is by default), or domain creation will fail with
+C<ERROR_INVAL>.
+
+Starting from Xen 4.3, in case automatic placement happens (and is
+successful), it will affect the domain's node-affinity and I<not> its
+vCPU pinning. Namely, the domain's vCPUs will not be pinned to any
+pCPU on the host, but the memory from the domain will come from the
+selected node(s) and the NUMA aware scheduling (if the credit scheduler
+is in use) will try to keep the domain's vCPUs there as much as possible.
+
+Besides than that, looking and/or tweaking the placement algorithm
+search "Automatic NUMA placement" in libxl_internal.h.
+
+Note this may change in future versions of Xen/libxl.
+
+
+=head2 Xen < 4.5
+
+The concept of vCPU soft affinity has been introduced for the first time
+in Xen 4.5. In 4.3, it is the domain's node-affinity that drives the
+NUMA-aware scheduler. The main difference is soft affinity is per-vCPU,
+and so each vCPU can have its own mask of pCPUs, while node-affinity is
+per-domain, that is the equivalent of having all the vCPUs with the same
+soft affinity.
+
+
+=head2 Xen < 4.3
+
+As NUMA aware scheduling is a new feature of Xen 4.3, things are a little
+bit different for earlier version of Xen. If no "cpus=" option is specified
+and Xen 4.2 is in use, the automatic placement algorithm still runs, but
+the results is used to I<pin> the vCPUs of the domain to the output node(s).
+This is consistent with what was happening with xm/xend.
+
+On a version of Xen earlier than 4.2, there is not automatic placement at
+all in xl or libxl, and hence no node-affinity, vCPU affinity or pinning
+being introduced/modified.
+
+
+=head2 Limitations
+
+Analyzing various possible placement solutions is what makes the
+algorithm flexible and quite effective. However, that also means
+it won't scale well to systems with arbitrary number of nodes.
+For this reason, automatic placement is disabled (with a warning)
+if it is requested on a host with more than 16 NUMA nodes.
diff --git a/docs/man/xl-numa-placement.pod.7 b/docs/man/xl-numa-placement.pod.7
deleted file mode 100644 (file)
index ae83302..0000000
+++ /dev/null
@@ -1,293 +0,0 @@
-=encoding utf8
-
-=head1 NAME
-
-xl-numa-placement - Guest Automatic NUMA Placement in libxl and xl
-
-=head1 DESCRIPTION
-
-=head2 Rationale
-
-NUMA (which stands for Non-Uniform Memory Access) means that the memory
-accessing times of a program running on a CPU depends on the relative
-distance between that CPU and that memory. In fact, most of the NUMA
-systems are built in such a way that each processor has its local memory,
-on which it can operate very fast. On the other hand, getting and storing
-data from and on remote memory (that is, memory local to some other processor)
-is quite more complex and slow. On these machines, a NUMA node is usually
-defined as a set of processor cores (typically a physical CPU package) and
-the memory directly attached to the set of cores.
-
-NUMA awareness becomes very important as soon as many domains start
-running memory-intensive workloads on a shared host. In fact, the cost
-of accessing non node-local memory locations is very high, and the
-performance degradation is likely to be noticeable.
-
-For more information, have a look at the L<Xen NUMA Introduction|http://wiki.xen.org/wiki/Xen_NUMA_Introduction>
-page on the Wiki.
-
-
-=head2 Xen and NUMA machines: the concept of I<node-affinity>
-
-The Xen hypervisor deals with NUMA machines throughout the concept of
-I<node-affinity>. The node-affinity of a domain is the set of NUMA nodes
-of the host where the memory for the domain is being allocated (mostly,
-at domain creation time). This is, at least in principle, different and
-unrelated with the vCPU (hard and soft, see below) scheduling affinity,
-which instead is the set of pCPUs where the vCPU is allowed (or prefers)
-to run.
-
-Of course, despite the fact that they belong to and affect different
-subsystems, the domain node-affinity and the vCPUs affinity are not
-completely independent.
-In fact, if the domain node-affinity is not explicitly specified by the
-user, via the proper libxl calls or xl config item, it will be computed
-basing on the vCPUs' scheduling affinity.
-
-Notice that, even if the node affinity of a domain may change on-line,
-it is very important to "place" the domain correctly when it is fist
-created, as the most of its memory is allocated at that time and can
-not (for now) be moved easily.
-
-
-=head2 Placing via pinning and cpupools
-
-The simplest way of placing a domain on a NUMA node is setting the hard
-scheduling affinity of the domain's vCPUs to the pCPUs of the node. This
-also goes under the name of vCPU pinning, and can be done through the
-"cpus=" option in the config file (more about this below). Another option
-is to pool together the pCPUs spanning the node and put the domain in
-such a I<cpupool> with the "pool=" config option (as documented in our
-L<Wiki|http://wiki.xen.org/wiki/Cpupools_Howto>).
-
-In both the above cases, the domain will not be able to execute outside
-the specified set of pCPUs for any reasons, even if all those pCPUs are
-busy doing something else while there are others, idle, pCPUs.
-
-So, when doing this, local memory accesses are 100% guaranteed, but that
-may come at he cost of some load imbalances.
-
-
-=head2 NUMA aware scheduling
-
-If using the credit1 scheduler, and starting from Xen 4.3, the scheduler
-itself always tries to run the domain's vCPUs on one of the nodes in
-its node-affinity. Only if that turns out to be impossible, it will just
-pick any free pCPU. Locality of access is less guaranteed than in the
-pinning case, but that comes along with better chances to exploit all
-the host resources (e.g., the pCPUs).
-
-Starting from Xen 4.5, credit1 supports two forms of affinity: hard and
-soft, both on a per-vCPU basis. This means each vCPU can have its own
-soft affinity, stating where such vCPU prefers to execute on. This is
-less strict than what it (also starting from 4.5) is called hard affinity,
-as the vCPU can potentially run everywhere, it just prefers some pCPUs
-rather than others.
-In Xen 4.5, therefore, NUMA-aware scheduling is achieved by matching the
-soft affinity of the vCPUs of a domain with its node-affinity.
-
-In fact, as it was for 4.3, if all the pCPUs in a vCPU's soft affinity
-are busy, it is possible for the domain to run outside from there. The
-idea is that slower execution (due to remote memory accesses) is still
-better than no execution at all (as it would happen with pinning). For
-this reason, NUMA aware scheduling has the potential of bringing
-substantial performances benefits, although this will depend on the
-workload.
-
-Notice that, for each vCPU, the following three scenarios are possbile:
-
-=over
-
-=item *
-
-a vCPU I<is pinned> to some pCPUs and I<does not have> any soft affinity
-In this case, the vCPU is always scheduled on one of the pCPUs to which
-it is pinned, without any specific peference among them.
-
-
-=item *
-
-a vCPU I<has> its own soft affinity and I<is not> pinned to any particular
-pCPU. In this case, the vCPU can run on every pCPU. Nevertheless, the
-scheduler will try to have it running on one of the pCPUs in its soft
-affinity;
-
-
-=item *
-
-a vCPU I<has> its own vCPU soft affinity and I<is also> pinned to some
-pCPUs. In this case, the vCPU is always scheduled on one of the pCPUs
-onto which it is pinned, with, among them, a preference for the ones
-that also forms its soft affinity. In case pinning and soft affinity
-form two disjoint sets of pCPUs, pinning "wins", and the soft affinity
-is just ignored.
-
-
-=back
-
-
-=head2 Guest placement in xl
-
-If using xl for creating and managing guests, it is very easy to ask for
-both manual or automatic placement of them across the host's NUMA nodes.
-
-Note that xm/xend does a very similar thing, the only differences being
-the details of the heuristics adopted for automatic placement (see below),
-and the lack of support (in both xm/xend and the Xen versions where that
-was the default toolstack) for NUMA aware scheduling.
-
-
-=head2 Placing the guest manually
-
-Thanks to the "cpus=" option, it is possible to specify where a domain
-should be created and scheduled on, directly in its config file. This
-affects NUMA placement and memory accesses as, in this case, the
-hypervisor constructs the node-affinity of a VM basing right on its
-vCPU pinning when it is created.
-
-This is very simple and effective, but requires the user/system
-administrator to explicitly specify the pinning for each and every domain,
-or Xen won't be able to guarantee the locality for their memory accesses.
-
-That, of course, also mean the vCPUs of the domain will only be able to
-execute on those same pCPUs.
-
-It is is also possible to have a "cpus_soft=" option in the xl config file,
-to specify the soft affinity for all the vCPUs of the domain. This affects
-the NUMA placement in the following way:
-
-=over
-
-=item *
-
-if only "cpus_soft=" is present, the VM's node-affinity will be equal
-to the nodes to which the pCPUs in the soft affinity mask belong;
-
-
-=item *
-
-if both "cpus_soft=" and "cpus=" are present, the VM's node-affinity
-will be equal to the nodes to which the pCPUs present both in hard and
-soft affinity belong.
-
-
-=back
-
-
-=head2 Placing the guest automatically
-
-If neither "cpus=" nor "cpus_soft=" are present in the config file, libxl
-tries to figure out on its own on which node(s) the domain could fit best.
-If it finds one (some), the domain's node affinity get set to there,
-and both memory allocations and NUMA aware scheduling (for the credit
-scheduler and starting from Xen 4.3) will comply with it. Starting from
-Xen 4.5, this also means that the mask resulting from this "fitting"
-procedure will become the soft affinity of all the vCPUs of the domain.
-
-It is worthwhile noting that optimally fitting a set of VMs on the NUMA
-nodes of an host is an incarnation of the Bin Packing Problem. In fact,
-the various VMs with different memory sizes are the items to be packed,
-and the host nodes are the bins. As such problem is known to be NP-hard,
-we will be using some heuristics.
-
-The first thing to do is find the nodes or the sets of nodes (from now
-on referred to as 'candidates') that have enough free memory and enough
-physical CPUs for accommodating the new domain. The idea is to find a
-spot for the domain with at least as much free memory as it has configured
-to have, and as much pCPUs as it has vCPUs.  After that, the actual
-decision on which candidate to pick happens accordingly to the following
-heuristics:
-
-=over
-
-=item *
-
-candidates involving fewer nodes are considered better. In case
-two (or more) candidates span the same number of nodes,
-
-
-=item *
-
-candidates with a smaller number of vCPUs runnable on them (due
-to previous placement and/or plain vCPU pinning) are considered
-better. In case the same number of vCPUs can run on two (or more)
-candidates,
-
-
-=item *
-
-the candidate with with the greatest amount of free memory is
-considered to be the best one.
-
-
-=back
-
-Giving preference to candidates with fewer nodes ensures better
-performance for the guest, as it avoid spreading its memory among
-different nodes. Favoring candidates with fewer vCPUs already runnable
-there ensures a good balance of the overall host load. Finally, if more
-candidates fulfil these criteria, prioritizing the nodes that have the
-largest amounts of free memory helps keeping the memory fragmentation
-small, and maximizes the probability of being able to put more domains
-there.
-
-
-=head2 Guest placement in libxl
-
-xl achieves automatic NUMA placement because that is what libxl does
-by default. No API is provided (yet) for modifying the behaviour of
-the placement algorithm. However, if your program is calling libxl,
-it is possible to set the C<numa_placement> build info key to C<false>
-(it is C<true> by default) with something like the below, to prevent
-any placement from happening:
-
-    libxl_defbool_set(&domain_build_info->numa_placement, false);
-
-Also, if C<numa_placement> is set to C<true>, the domain's vCPUs must
-not be pinned (i.e., C<<< domain_build_info->cpumap >>> must have all its
-bits set, as it is by default), or domain creation will fail with
-C<ERROR_INVAL>.
-
-Starting from Xen 4.3, in case automatic placement happens (and is
-successful), it will affect the domain's node-affinity and I<not> its
-vCPU pinning. Namely, the domain's vCPUs will not be pinned to any
-pCPU on the host, but the memory from the domain will come from the
-selected node(s) and the NUMA aware scheduling (if the credit scheduler
-is in use) will try to keep the domain's vCPUs there as much as possible.
-
-Besides than that, looking and/or tweaking the placement algorithm
-search "Automatic NUMA placement" in libxl_internal.h.
-
-Note this may change in future versions of Xen/libxl.
-
-
-=head2 Xen < 4.5
-
-The concept of vCPU soft affinity has been introduced for the first time
-in Xen 4.5. In 4.3, it is the domain's node-affinity that drives the
-NUMA-aware scheduler. The main difference is soft affinity is per-vCPU,
-and so each vCPU can have its own mask of pCPUs, while node-affinity is
-per-domain, that is the equivalent of having all the vCPUs with the same
-soft affinity.
-
-
-=head2 Xen < 4.3
-
-As NUMA aware scheduling is a new feature of Xen 4.3, things are a little
-bit different for earlier version of Xen. If no "cpus=" option is specified
-and Xen 4.2 is in use, the automatic placement algorithm still runs, but
-the results is used to I<pin> the vCPUs of the domain to the output node(s).
-This is consistent with what was happening with xm/xend.
-
-On a version of Xen earlier than 4.2, there is not automatic placement at
-all in xl or libxl, and hence no node-affinity, vCPU affinity or pinning
-being introduced/modified.
-
-
-=head2 Limitations
-
-Analyzing various possible placement solutions is what makes the
-algorithm flexible and quite effective. However, that also means
-it won't scale well to systems with arbitrary number of nodes.
-For this reason, automatic placement is disabled (with a warning)
-if it is requested on a host with more than 16 NUMA nodes.
diff --git a/docs/man/xl.1.pod.in b/docs/man/xl.1.pod.in
new file mode 100644 (file)
index 0000000..1800688
--- /dev/null
@@ -0,0 +1,1992 @@
+=head1 NAME
+
+xl - Xen management tool, based on LibXenlight
+
+=head1 SYNOPSIS
+
+B<xl> I<subcommand> [I<args>]
+
+=head1 DESCRIPTION
+
+The B<xl> program is the new tool for managing Xen guest
+domains. The program can be used to create, pause, and shutdown
+domains. It can also be used to list current domains, enable or pin
+VCPUs, and attach or detach virtual block devices.
+
+The basic structure of every B<xl> command is almost always:
+
+=over 2
+
+B<xl> I<subcommand> [I<OPTIONS>] I<domain-id>
+
+=back
+
+Where I<subcommand> is one of the subcommands listed below, I<domain-id>
+is the numeric domain id, or the domain name (which will be internally
+translated to domain id), and I<OPTIONS> are subcommand specific
+options.  There are a few exceptions to this rule in the cases where
+the subcommand in question acts on all domains, the entire machine,
+or directly on the Xen hypervisor.  Those exceptions will be clear for
+each of those subcommands.
+
+=head1 NOTES
+
+=over 4
+
+=item start the script B</etc/init.d/xencommons> at boot time
+
+Most B<xl> operations rely upon B<xenstored> and B<xenconsoled>: make
+sure you start the script B</etc/init.d/xencommons> at boot time to
+initialize all the daemons needed by B<xl>.
+
+=item setup a B<xenbr0> bridge in dom0
+
+In the most common network configuration, you need to setup a bridge in dom0
+named B<xenbr0> in order to have a working network in the guest domains.
+Please refer to the documentation of your Linux distribution to know how to
+setup the bridge.
+
+=item B<autoballoon>
+
+If you specify the amount of memory dom0 has, passing B<dom0_mem> to
+Xen, it is highly recommended to disable B<autoballoon>. Edit
+B</etc/xen/xl.conf> and set it to 0.
+
+=item run xl as B<root>
+
+Most B<xl> commands require root privileges to run due to the
+communications channels used to talk to the hypervisor.  Running as
+non root will return an error.
+
+=back
+
+=head1 GLOBAL OPTIONS
+
+Some global options are always available:
+
+=over 4
+
+=item B<-v>
+
+Verbose.
+
+=item B<-N>
+
+Dry run: do not actually execute the command.
+
+=item B<-f>
+
+Force execution: xl will refuse to run some commands if it detects that xend is
+also running, this option will force the execution of those commands, even
+though it is unsafe.
+
+=item B<-t>
+
+Always use carriage-return-based overwriting for displaying progress
+messages without scrolling the screen.  Without -t, this is done only
+if stderr is a tty.
+
+=back
+
+=head1 DOMAIN SUBCOMMANDS
+
+The following subcommands manipulate domains directly.  As stated
+previously, most commands take I<domain-id> as the first parameter.
+
+=over 4
+
+=item B<button-press> I<domain-id> I<button>
+
+I<This command is deprecated. Please use C<xl trigger> instead.>
+
+Indicate an ACPI button press to the domain, where I<button> can be 'power' or
+'sleep'. This command is only available for HVM domains.
+
+=item B<create> [I<configfile>] [I<OPTIONS>]
+
+The create subcommand takes a config file as its first argument: see
+L<xl.cfg(5)> for full details of the file format and possible options.
+If I<configfile> is missing B<xl> creates the domain assuming the default
+values for every option.
+
+I<configfile> has to be an absolute path to a file.
+
+Create will return B<as soon> as the domain is started.  This B<does
+not> mean the guest OS in the domain has actually booted, or is
+available for input.
+
+If the I<-F> option is specified, create will start the domain and not
+return until its death.
+
+B<OPTIONS>
+
+=over 4
+
+=item B<-q>, B<--quiet>
+
+No console output.
+
+=item B<-f=FILE>, B<--defconfig=FILE>
+
+Use the given configuration file.
+
+=item B<-p>
+
+Leave the domain paused after it is created.
+
+=item B<-F>
+
+Run in foreground until death of the domain.
+
+=item B<-V>, B<--vncviewer>
+
+Attach to domain's VNC server, forking a vncviewer process.
+
+=item B<-A>, B<--vncviewer-autopass>
+
+Pass the VNC password to vncviewer via stdin.
+
+=item B<-c>
+
+Attach console to the domain as soon as it has started.  This is
+useful for determining issues with crashing domains and just as a
+general convenience since you often want to watch the
+domain boot.
+
+=item B<key=value>
+
+It is possible to pass I<key=value> pairs on the command line to provide
+options as if they were written in the configuration file; these override
+whatever is in the I<configfile>.
+
+NB: Many config options require characters such as quotes or brackets
+which are interpreted by the shell (and often discarded) before being
+passed to xl, resulting in xl being unable to parse the value
+correctly.  A simple work-around is to put all extra options within a
+single set of quotes, separated by semicolons.  (See below for an example.)
+
+=back
+
+B<EXAMPLES>
+
+=over 4
+
+=item I<with config file>
+
+  xl create DebianLenny
+
+This creates a domain with the file /etc/xen/DebianLenny, and returns as
+soon as it is run.
+
+=item I<with extra parameters>
+
+  xl create hvm.cfg 'cpus="0-3"; pci=["01:05.1","01:05.2"]'
+
+This creates a domain with the file hvm.cfg, but additionally pins it to
+cpus 0-3, and passes through two PCI devices.
+
+=back
+
+=item B<config-update> I<domain-id> [I<configfile>] [I<OPTIONS>]
+
+Update the saved configuration for a running domain. This has no
+immediate effect but will be applied when the guest is next
+restarted. This command is useful to ensure that runtime modifications
+made to the guest will be preserved when the guest is restarted.
+
+Since Xen 4.5 xl has improved capabilities to handle dynamic domain
+configuration changes and will preserve any changes made at runtime
+when necessary. Therefore it should not normally be necessary to use
+this command any more.
+
+I<configfile> has to be an absolute path to a file.
+
+B<OPTIONS>
+
+=over 4
+
+=item B<-f=FILE>, B<--defconfig=FILE>
+
+Use the given configuration file.
+
+=item B<key=value>
+
+It is possible to pass I<key=value> pairs on the command line to
+provide options as if they were written in the configuration file;
+these override whatever is in the I<configfile>.  Please see the note
+under I<create> on handling special characters when passing
+I<key=value> pairs on the command line.
+
+=back
+
+=item B<console> [I<OPTIONS>] I<domain-id>
+
+Attach to the console of a domain specified by I<domain-id>.  If you've set up
+your domains to have a traditional login console this will look much like a
+normal text login screen.
+
+Use the key combination Ctrl+] to detach from the domain console.
+
+B<OPTIONS>
+
+=over 4
+
+=item I<-t [pv|serial]>
+
+Connect to a PV console or connect to an emulated serial console.
+PV consoles are the only consoles available for PV domains while HVM
+domains can have both. If this option is not specified it defaults to
+emulated serial for HVM guests and PV console for PV guests.
+
+=item I<-n NUM>
+
+Connect to console number I<NUM>. Console numbers start from 0.
+
+=back
+
+=item B<destroy> [I<OPTIONS>] I<domain-id>
+
+Immediately terminate the domain specified by I<domain-id>.  This doesn't give
+the domain OS any chance to react, and is the equivalent of ripping the power
+cord out on a physical machine.  In most cases you will want to use the
+B<shutdown> command instead.
+
+B<OPTIONS>
+
+=over 4
+
+=item I<-f>
+
+Allow domain 0 to be destroyed.  Because a domain cannot destroy itself, this
+is only possible when using a disaggregated toolstack, and is most useful when
+using a hardware domain separated from domain 0.
+
+=back
+
+=item B<domid> I<domain-name>
+
+Converts a domain name to a domain id.
+
+=item B<domname> I<domain-id>
+
+Converts a domain id to a domain name.
+
+=item B<rename> I<domain-id> I<new-name>
+
+Change the domain name of a domain specified by I<domain-id> to I<new-name>.
+
+=item B<dump-core> I<domain-id> [I<filename>]
+
+Dumps the virtual machine's memory for the specified domain to the
+I<filename> specified, without pausing the domain.  The dump file will
+be written to a distribution specific directory for dump files, for example:
+@XEN_DUMP_DIR@/dump.
+
+=item B<help> [I<--long>]
+
+Displays the short help message (i.e. common commands) by default.
+
+If the I<--long> option is specified, it displays the complete set of B<xl>
+subcommands, grouped by function.
+
+=item B<list> [I<OPTIONS>] [I<domain-id> ...]
+
+Displays information about one or more domains.  If no domains are
+specified it displays information about all domains.
+
+
+B<OPTIONS>
+
+=over 4
+
+=item B<-l>, B<--long>
+
+The output for B<xl list> is not the table view shown below, but
+instead presents the data as a JSON data structure.
+
+=item B<-Z>, B<--context>
+
+Also displays the security labels.
+
+=item B<-v>, B<--verbose>
+
+Also displays the domain UUIDs, the shutdown reason and security labels.
+
+=item B<-c>, B<--cpupool>
+
+Also displays the cpupool the domain belongs to.
+
+=item B<-n>, B<--numa>
+
+Also displays the domain NUMA node affinity.
+
+=back
+
+B<EXAMPLE>
+
+An example format for the list is as follows:
+
+    Name                                        ID   Mem VCPUs      State   Time(s)
+    Domain-0                                     0   750     4     r-----   11794.3
+    win                                          1  1019     1     r-----       0.3
+    linux                                        2  2048     2     r-----    5624.2
+
+Name is the name of the domain.  ID the numeric domain id.  Mem is the
+desired amount of memory to allocate to the domain (although it may
+not be the currently allocated amount).  VCPUs is the number of
+virtual CPUs allocated to the domain.  State is the run state (see
+below).  Time is the total run time of the domain as accounted for by
+Xen.
+
+B<STATES>
+
+The State field lists 6 states for a Xen domain, and which ones the
+current domain is in.
+
+=over 4
+
+=item B<r - running>
+
+The domain is currently running on a CPU.
+
+=item B<b - blocked>
+
+The domain is blocked, and not running or runnable.  This can be because the
+domain is waiting on IO (a traditional wait state) or has
+gone to sleep because there was nothing else for it to do.
+
+=item B<p - paused>
+
+The domain has been paused, usually occurring through the administrator
+running B<xl pause>.  When in a paused state the domain will still
+consume allocated resources (like memory), but will not be eligible for
+scheduling by the Xen hypervisor.
+
+=item B<s - shutdown>
+
+The guest OS has shut down (SCHEDOP_shutdown has been called) but the
+domain is not dying yet.
+
+=item B<c - crashed>
+
+The domain has crashed, which is always a violent ending.  Usually
+this state only occurs if the domain has been configured not to
+restart on a crash.  See L<xl.cfg(5)> for more info.
+
+=item B<d - dying>
+
+The domain is in the process of dying, but hasn't completely shut down or
+crashed.
+
+=back
+
+B<NOTES>
+
+=over 4
+
+The Time column is deceptive.  Virtual IO (network and block devices)
+used by the domains requires coordination by Domain0, which means that
+Domain0 is actually charged for much of the time that a DomainU is
+doing IO.  Use of this time value to determine relative utilizations
+by domains is thus very unreliable, as a high IO workload may show as
+less utilized than a high CPU workload.  Consider yourself warned.
+
+=back
+
+=item B<mem-max> I<domain-id> I<mem>
+
+Specify the maximum amount of memory the domain is able to use, appending 't'
+for terabytes, 'g' for gigabytes, 'm' for megabytes, 'k' for kilobytes and 'b'
+for bytes.
+
+The mem-max value may not correspond to the actual memory used in the
+domain, as it may balloon down its memory to give more back to the OS.
+
+The value given just sets the memory amount the domain is allowed to allocate
+in the hypervisor. It can't be set lower than the current reservation, but
+it is allowed to be higher than the configured maximum memory size of the
+domain (B<maxmem> parameter in the domain's configuration). Using B<xl mem-max>
+to set the maximum memory above the initial B<maxmem> value will not allow the
+additional memory to be used via B<xl mem-set>. The initial B<maxmem> value is
+still used as an upper limit for B<xl mem-set>.
+
+The domain will not receive any signal regarding the changed memory limit.
+
+=item B<mem-set> I<domain-id> I<mem>
+
+Set the domain's used memory using the balloon driver; append 't' for
+terabytes, 'g' for gigabytes, 'm' for megabytes, 'k' for kilobytes and 'b' for
+bytes.
+
+Because this operation requires cooperation from the domain operating
+system, there is no guarantee that it will succeed.  This command will
+definitely not work unless the domain has the required paravirt
+driver.
+
+B<Warning:> There is no good way to know in advance how small of a
+mem-set will make a domain unstable and cause it to crash.  Be very
+careful when using this command on running domains.
+
+=item B<migrate> [I<OPTIONS>] I<domain-id> I<host>
+
+Migrate a domain to another host machine. By default B<xl> relies on ssh as a
+transport mechanism between the two hosts.
+
+B<OPTIONS>
+
+=over 4
+
+=item B<-s> I<sshcommand>
+
+Use <sshcommand> instead of ssh.  String will be passed to sh. If empty, run
+<host> instead of ssh <host> xl migrate-receive [-d -e].
+
+=item B<-e>
+
+On the new <host>, do not wait in the background for the death of the
+domain. See the corresponding option of the I<create> subcommand.
+
+=item B<-C> I<config>
+
+Send the specified <config> file instead of the file used on creation of the
+domain.
+
+=item B<--debug>
+
+Display huge (!) amount of debug information during the migration process.
+
+=item B<-p>
+
+Leave the domain on the receive side paused after migration.
+
+=back
+
+=item B<remus> [I<OPTIONS>] I<domain-id> I<host>
+
+Enable Remus HA or COLO HA for domain. By default B<xl> relies on ssh as a
+transport mechanism between the two hosts.
+
+B<NOTES>
+
+=over 4
+
+Remus support in xl is still in experimental (proof-of-concept) phase.
+Disk replication support is limited to DRBD disks.
+
+COLO support in xl is still in experimental (proof-of-concept)
+phase. All options are subject to change in the future.
+
+=back
+
+COLO disk configuration looks like:
+
+  disk = ['...,colo,colo-host=xxx,colo-port=xxx,colo-export=xxx,active-disk=xxx,hidden-disk=xxx...']
+
+The supported options are:
+
+=over 4
+
+=item B<colo-host>   : Secondary host's ip address.
+
+=item B<colo-port>   : Secondary host's port, we will run a nbd server on the
+secondary host, and the nbd server will listen on this port.
+
+=item B<colo-export> : Nbd server's disk export name of the secondary host.
+
+=item B<active-disk> : Secondary's guest write will be buffered to this disk,
+and it's used by the secondary.
+
+=item B<hidden-disk> : Primary's modified contents will be buffered in this
+disk, and it's used by the secondary.
+
+=back
+
+COLO network configuration looks like:
+
+  vif = [ '...,forwarddev=xxx,...']
+
+The supported options are:
+
+=over 4
+
+=item B<forwarddev> : Forward devices for the primary and the secondary, they
+are directly connected.
+
+
+=back
+
+B<OPTIONS>
+
+=over 4
+
+=item B<-i> I<MS>
+
+Checkpoint domain memory every MS milliseconds (default 200ms).
+
+=item B<-u>
+
+Disable memory checkpoint compression.
+
+=item B<-s> I<sshcommand>
+
+Use <sshcommand> instead of ssh.  String will be passed to sh.
+If empty, run <host> instead of ssh <host> xl migrate-receive -r [-e].
+
+=item B<-e>
+
+On the new <host>, do not wait in the background for the death of the domain.
+See the corresponding option of the I<create> subcommand.
+
+=item B<-N> I<netbufscript>
+
+Use <netbufscript> to setup network buffering instead of the
+default script (/etc/xen/scripts/remus-netbuf-setup).
+
+=item B<-F>
+
+Run Remus in unsafe mode. Use this option with caution as failover may
+not work as intended.
+
+=item B<-b>
+
+Replicate memory checkpoints to /dev/null (blackhole).
+Generally useful for debugging. Requires enabling unsafe mode.
+
+=item B<-n>
+
+Disable network output buffering. Requires enabling unsafe mode.
+
+=item B<-d>
+
+Disable disk replication. Requires enabling unsafe mode.
+
+=item B<-c>
+
+Enable COLO HA. This conflicts with B<-i> and B<-b>, and memory
+checkpoint compression must be disabled.
+
+=item B<-p>
+
+Use userspace COLO Proxy. This option must be used in conjunction
+with B<-c>.
+
+=back
+
+=item B<pause> I<domain-id>
+
+Pause a domain.  When in a paused state the domain will still consume
+allocated resources (such as memory), but will not be eligible for
+scheduling by the Xen hypervisor.
+
+=item B<reboot> [I<OPTIONS>] I<domain-id>
+
+Reboot a domain.  This acts just as if the domain had the B<reboot>
+command run from the console.  The command returns as soon as it has
+executed the reboot action, which may be significantly earlier than when the
+domain actually reboots.
+
+For HVM domains this requires PV drivers to be installed in your guest
+OS. If PV drivers are not present but you have configured the guest OS
+to behave appropriately you may be able to use the I<-F> option to
+trigger a reset button press.
+
+The behavior of what happens to a domain when it reboots is set by the
+B<on_reboot> parameter of the domain configuration file when the
+domain was created.
+
+B<OPTIONS>
+
+=over 4
+
+=item B<-F>
+
+If the guest does not support PV reboot control then fallback to
+sending an ACPI power event (equivalent to the I<reset> option to
+I<trigger>).
+
+You should ensure that the guest is configured to behave as expected
+in response to this event.
+
+=back
+
+=item B<restore> [I<OPTIONS>] [I<configfile>] I<checkpointfile>
+
+Build a domain from an B<xl save> state file.  See B<save> for more info.
+
+B<OPTIONS>
+
+=over 4
+
+=item B<-p>
+
+Do not unpause the domain after restoring it.
+
+=item B<-e>
+
+Do not wait in the background for the death of the domain on the new host.
+See the corresponding option of the I<create> subcommand.
+
+=item B<-d>
+
+Enable debug messages.
+
+=item B<-V>, B<--vncviewer>
+
+Attach to the domain's VNC server, forking a vncviewer process.
+
+=item B<-A>, B<--vncviewer-autopass>
+
+Pass the VNC password to vncviewer via stdin.
+
+
+
+=back
+
+=item B<save> [I<OPTIONS>] I<domain-id> I<checkpointfile> [I<configfile>]
+
+Saves a running domain to a state file so that it can be restored
+later.  Once saved, the domain will no longer be running on the
+system, unless the -c or -p options are used.
+B<xl restore> restores from this checkpoint file.
+Passing a config file argument allows the user to manually select the VM config
+file used to create the domain.
+
+=over 4
+
+=item B<-c>
+
+Leave the domain running after creating the snapshot.
+
+=item B<-p>
+
+Leave the domain paused after creating the snapshot.
+
+=back
+
+=item B<sharing> [I<domain-id>]
+
+Display the number of shared pages for a specified domain. If no domain is
+specified it displays information about all domains.
+
+=item B<shutdown> [I<OPTIONS>] I<-a|domain-id>
+
+Gracefully shuts down a domain.  This coordinates with the domain OS
+to perform graceful shutdown, so there is no guarantee that it will
+succeed, and may take a variable length of time depending on what
+services must be shut down in the domain.
+
+For HVM domains this requires PV drivers to be installed in your guest
+OS. If PV drivers are not present but you have configured the guest OS
+to behave appropriately you may be able to use the I<-F> option to
+trigger a power button press.
+
+The command returns immediately after signaling the domain unless the
+B<-w> flag is used.
+
+The behavior of what happens to a domain when it reboots is set by the
+B<on_shutdown> parameter of the domain configuration file when the
+domain was created.
+
+B<OPTIONS>
+
+=over 4
+
+=item B<-a>, B<--all>
+
+Shutdown all guest domains.  Often used when doing a complete shutdown
+of a Xen system.
+
+=item B<-w>, B<--wait>
+
+Wait for the domain to complete shutdown before returning.
+
+=item B<-F>
+
+If the guest does not support PV shutdown control then fallback to
+sending an ACPI power event (equivalent to the I<power> option to
+I<trigger>).
+
+You should ensure that the guest is configured to behave as expected
+in response to this event.
+
+=back
+
+=item B<sysrq> I<domain-id> I<letter>
+
+Send a <Magic System Request> to the domain, each type of request is
+represented by a different letter.
+It can be used to send SysRq requests to Linux guests, see sysrq.txt in
+your Linux Kernel sources for more information.
+It requires PV drivers to be installed in your guest OS.
+
+=item B<trigger> I<domain-id> I<nmi|reset|init|power|sleep|s3resume> [I<VCPU>]
+
+Send a trigger to a domain, where the trigger can be: nmi, reset, init, power
+or sleep.  Optionally a specific vcpu number can be passed as an argument.
+This command is only available for HVM domains.
+
+=item B<unpause> I<domain-id>
+
+Moves a domain out of the paused state.  This will allow a previously
+paused domain to now be eligible for scheduling by the Xen hypervisor.
+
+=item B<vcpu-set> I<domain-id> I<vcpu-count>
+
+Enables the I<vcpu-count> virtual CPUs for the domain in question.
+Like mem-set, this command can only allocate up to the maximum virtual
+CPU count configured at boot for the domain.
+
+If the I<vcpu-count> is smaller than the current number of active
+VCPUs, the highest number VCPUs will be hotplug removed.  This may be
+important for pinning purposes.
+
+Attempting to set the VCPUs to a number larger than the initially
+configured VCPU count is an error.  Trying to set VCPUs to < 1 will be
+quietly ignored.
+
+Some guests may need to actually bring the newly added CPU online
+after B<vcpu-set>, go to B<SEE ALSO> section for information.
+
+=item B<vcpu-list> [I<domain-id>]
+
+Lists VCPU information for a specific domain.  If no domain is
+specified, VCPU information for all domains will be provided.
+
+=item B<vcpu-pin> [I<-f|--force>] I<domain-id> I<vcpu> I<cpus hard> I<cpus soft>
+
+Set hard and soft affinity for a I<vcpu> of <domain-id>. Normally VCPUs
+can float between available CPUs whenever Xen deems a different run state
+is appropriate.
+
+Hard affinity can be used to restrict this, by ensuring certain VCPUs
+can only run on certain physical CPUs. Soft affinity specifies a I<preferred>
+set of CPUs. Soft affinity needs special support in the scheduler, which is
+only provided in credit1.
+
+The keyword B<all> can be used to apply the hard and soft affinity masks to
+all the VCPUs in the domain. The symbol '-' can be used to leave either
+hard or soft affinity alone.
+
+For example:
+
+ xl vcpu-pin 0 3 - 6-9
+
+will set soft affinity for vCPU 3 of domain 0 to pCPUs 6,7,8 and 9,
+leaving its hard affinity untouched. On the other hand:
+
+ xl vcpu-pin 0 3 3,4 6-9
+
+will set both hard and soft affinity, the former to pCPUs 3 and 4, the
+latter to pCPUs 6,7,8, and 9.
+
+Specifying I<-f> or I<--force> will remove a temporary pinning done by the
+operating system (normally this should be done by the operating system).
+In case a temporary pinning is active for a vcpu the affinity of this vcpu
+can't be changed without this option.
+
+=item B<vm-list>
+
+Prints information about guests. This list excludes information about
+service or auxiliary domains such as dom0 and stubdoms.
+
+B<EXAMPLE>
+
+An example format for the list is as follows:
+
+    UUID                                  ID    name
+    59e1cf6c-6ab9-4879-90e7-adc8d1c63bf5  2    win
+    50bc8f75-81d0-4d53-b2e6-95cb44e2682e  3    linux
+
+=item B<vncviewer> [I<OPTIONS>] I<domain-id>
+
+Attach to the domain's VNC server, forking a vncviewer process.
+
+B<OPTIONS>
+
+=over 4
+
+=item I<--autopass>
+
+Pass the VNC password to vncviewer via stdin.
+
+=back
+
+=back
+
+=head1 XEN HOST SUBCOMMANDS
+
+=over 4
+
+=item B<debug-keys> I<keys>
+
+Send debug I<keys> to Xen. It is the same as pressing the Xen
+"conswitch" (Ctrl-A by default) three times and then pressing "keys".
+
+=item B<set-parameters> I<params>
+
+Set hypervisor parameters as specified in I<params>. This allows for some
+boot parameters of the hypervisor to be modified in the running systems.
+
+=item B<dmesg> [I<OPTIONS>]
+
+Reads the Xen message buffer, similar to dmesg on a Linux system.  The
+buffer contains informational, warning, and error messages created
+during Xen's boot process.  If you are having problems with Xen, this
+is one of the first places to look as part of problem determination.
+
+B<OPTIONS>
+
+=over 4
+
+=item B<-c>, B<--clear>
+
+Clears Xen's message buffer.
+
+=back
+
+=item B<info> [I<OPTIONS>]
+
+Print information about the Xen host in I<name : value> format.  When
+reporting a Xen bug, please provide this information as part of the
+bug report. See I<http://wiki.xen.org/xenwiki/ReportingBugs> on how to
+report Xen bugs.
+
+Sample output looks as follows:
+
+ host                   : scarlett
+ release                : 3.1.0-rc4+
+ version                : #1001 SMP Wed Oct 19 11:09:54 UTC 2011
+ machine                : x86_64
+ nr_cpus                : 4
+ nr_nodes               : 1
+ cores_per_socket       : 4
+ threads_per_core       : 1
+ cpu_mhz                : 2266
+ hw_caps                : bfebfbff:28100800:00000000:00003b40:009ce3bd:00000000:00000001:00000000
+ virt_caps              : hvm hvm_directio
+ total_memory           : 6141
+ free_memory            : 4274
+ free_cpus              : 0
+ outstanding_claims     : 0
+ xen_major              : 4
+ xen_minor              : 2
+ xen_extra              : -unstable
+ xen_caps               : xen-3.0-x86_64 xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p hvm-3.0-x86_64
+ xen_scheduler          : credit
+ xen_pagesize           : 4096
+ platform_params        : virt_start=0xffff800000000000
+ xen_changeset          : Wed Nov 02 17:09:09 2011 +0000 24066:54a5e994a241
+ xen_commandline        : com1=115200,8n1 guest_loglvl=all dom0_mem=750M console=com1
+ cc_compiler            : gcc version 4.4.5 (Debian 4.4.5-8)
+ cc_compile_by          : sstabellini
+ cc_compile_domain      : uk.xensource.com
+ cc_compile_date        : Tue Nov  8 12:03:05 UTC 2011
+ xend_config_format     : 4
+
+
+B<FIELDS>
+
+Not all fields will be explained here, but some of the less obvious
+ones deserve explanation:
+
+=over 4
+
+=item B<hw_caps>
+
+A vector showing what hardware capabilities are supported by your
+processor.  This is equivalent to, though more cryptic, the flags
+field in /proc/cpuinfo on a normal Linux machine: they both derive from
+the feature bits returned by the cpuid command on x86 platforms.
+
+=item B<free_memory>
+
+Available memory (in MB) not allocated to Xen, or any other domains, or
+claimed for domains.
+
+=item B<outstanding_claims>
+
+When a claim call is done (see L<xl.conf>) a reservation for a specific
+amount of pages is set and also a global value is incremented. This
+global value (outstanding_claims) is then reduced as the domain's memory
+is populated and eventually reaches zero. Most of the time the value will
+be zero, but if you are launching multiple guests, and B<claim_mode> is
+enabled, this value can increase/decrease. Note that the value also
+affects the B<free_memory> - as it will reflect the free memory
+in the hypervisor minus the outstanding pages claimed for guests.
+See xl I<info> B<claims> parameter for detailed listing.
+
+=item B<xen_caps>
+
+The Xen version and architecture.  Architecture values can be one of:
+x86_32, x86_32p (i.e. PAE enabled), x86_64, ia64.
+
+=item B<xen_changeset>
+
+The Xen mercurial changeset id.  Very useful for determining exactly
+what version of code your Xen system was built from.
+
+=back
+
+B<OPTIONS>
+
+=over 4
+
+=item B<-n>, B<--numa>
+
+List host NUMA topology information
+
+=back
+
+=item B<top>
+
+Executes the B<xentop(1)> command, which provides real time monitoring of
+domains.  Xentop has a curses interface, and is reasonably self explanatory.
+
+=item B<uptime>
+
+Prints the current uptime of the domains running.
+
+=item B<claims>
+
+Prints information about outstanding claims by the guests. This provides
+the outstanding claims and currently populated memory count for the guests.
+These values added up reflect the global outstanding claim value, which
+is provided via the I<info> argument, B<outstanding_claims> value.
+The B<Mem> column has the cumulative value of outstanding claims and
+the total amount of memory that has been right now allocated to the guest.
+
+B<EXAMPLE>
+
+An example format for the list is as follows:
+
+ Name                                        ID   Mem VCPUs      State   Time(s)  Claimed
+ Domain-0                                     0  2047     4     r-----      19.7     0
+ OL5                                          2  2048     1     --p---       0.0   847
+ OL6                                          3  1024     4     r-----       5.9     0
+ Windows_XP                                   4  2047     1     --p---       0.0  1989
+
+In which it can be seen that the OL5 guest still has 847MB of claimed
+memory (out of the total 2048MB where 1191MB has been allocated to
+the guest).
+
+=back
+
+=head1 SCHEDULER SUBCOMMANDS
+
+Xen ships with a number of domain schedulers, which can be set at boot
+time with the B<sched=> parameter on the Xen command line.  By
+default B<credit> is used for scheduling.
+
+=over 4
+
+=item B<sched-credit> [I<OPTIONS>]
+
+Set or get credit (aka credit1) scheduler parameters.  The credit scheduler is
+a proportional fair share CPU scheduler built from the ground up to be
+work conserving on SMP hosts.
+
+Each domain (including Domain0) is assigned a weight and a cap.
+
+B<OPTIONS>
+
+=over 4
+
+=item B<-d DOMAIN>, B<--domain=DOMAIN>
+
+Specify domain for which scheduler parameters are to be modified or retrieved.
+Mandatory for modifying scheduler parameters.
+
+=item B<-w WEIGHT>, B<--weight=WEIGHT>
+
+A domain with a weight of 512 will get twice as much CPU as a domain
+with a weight of 256 on a contended host. Legal weights range from 1
+to 65535 and the default is 256.
+
+=item B<-c CAP>, B<--cap=CAP>
+
+The cap optionally fixes the maximum amount of CPU a domain will be
+able to consume, even if the host system has idle CPU cycles. The cap
+is expressed in percentage of one physical CPU: 100 is 1 physical CPU,
+50 is half a CPU, 400 is 4 CPUs, etc. The default, 0, means there is
+no upper cap.
+
+NB: Many systems have features that will scale down the computing
+power of a cpu that is not 100% utilized.  This can be in the
+operating system, but can also sometimes be below the operating system
+in the BIOS.  If you set a cap such that individual cores are running
+at less than 100%, this may have an impact on the performance of your
+workload over and above the impact of the cap. For example, if your
+processor runs at 2GHz, and you cap a vm at 50%, the power management
+system may also reduce the clock speed to 1GHz; the effect will be
+that your VM gets 25% of the available power (50% of 1GHz) rather than
+50% (50% of 2GHz).  If you are not getting the performance you expect,
+look at performance and cpufreq options in your operating system and
+your BIOS.
+
+=item B<-p CPUPOOL>, B<--cpupool=CPUPOOL>
+
+Restrict output to domains in the specified cpupool.
+
+=item B<-s>, B<--schedparam>
+
+Specify to list or set pool-wide scheduler parameters.
+
+=item B<-t TSLICE>, B<--tslice_ms=TSLICE>
+
+Timeslice tells the scheduler how long to allow VMs to run before
+pre-empting.  The default is 30ms.  Valid ranges are 1ms to 1000ms.
+The length of the timeslice (in ms) must be higher than the length of
+the ratelimit (see below).
+
+=item B<-r RLIMIT>, B<--ratelimit_us=RLIMIT>
+
+Ratelimit attempts to limit the number of schedules per second.  It
+sets a minimum amount of time (in microseconds) a VM must run before
+we will allow a higher-priority VM to pre-empt it.  The default value
+is 1000 microseconds (1ms).  Valid range is 100 to 500000 (500ms).
+The ratelimit length must be lower than the timeslice length.
+
+=item B<-m DELAY>, B<--migration_delay_us=DELAY>
+
+Migration delay specifies for how long a vCPU, after it stopped running should
+be considered "cache-hot". Basically, if less than DELAY us passed since when
+the vCPU was executing on a CPU, it is likely that most of the vCPU's working
+set is still in the CPU's cache, and therefore the vCPU is not migrated.
+
+Default is 0. Maximum is 100 ms. This can be effective at preventing vCPUs
+to bounce among CPUs too quickly, but, at the same time, the scheduler stops
+being fully work-conserving.
+
+=back
+
+B<COMBINATION>
+
+The following is the effect of combining the above options:
+
+=over 4
+
+=item B<E<lt>nothingE<gt>>             : List all domain params and sched params from all pools
+
+=item B<-d [domid]>            : List domain params for domain [domid]
+
+=item B<-d [domid] [params]>   : Set domain params for domain [domid]
+
+=item B<-p [pool]>             : list all domains and sched params for [pool]
+
+=item B<-s>                    : List sched params for poolid 0
+
+=item B<-s [params]>           : Set sched params for poolid 0
+
+=item B<-p [pool] -s>          : List sched params for [pool]
+
+=item B<-p [pool] -s [params]> : Set sched params for [pool]
+
+=item B<-p [pool] -d>...       : Illegal
+
+=back
+
+=item B<sched-credit2> [I<OPTIONS>]
+
+Set or get credit2 scheduler parameters.  The credit2 scheduler is a
+proportional fair share CPU scheduler built from the ground up to be
+work conserving on SMP hosts.
+
+Each domain (including Domain0) is assigned a weight.
+
+B<OPTIONS>
+
+=over 4
+
+=item B<-d DOMAIN>, B<--domain=DOMAIN>
+
+Specify domain for which scheduler parameters are to be modified or retrieved.
+Mandatory for modifying scheduler parameters.
+
+=item B<-w WEIGHT>, B<--weight=WEIGHT>
+
+A domain with a weight of 512 will get twice as much CPU as a domain
+with a weight of 256 on a contended host. Legal weights range from 1
+to 65535 and the default is 256.
+
+=item B<-p CPUPOOL>, B<--cpupool=CPUPOOL>
+
+Restrict output to domains in the specified cpupool.
+
+=item B<-s>, B<--schedparam>
+
+Specify to list or set pool-wide scheduler parameters.
+
+=item B<-r RLIMIT>, B<--ratelimit_us=RLIMIT>
+
+Attempts to limit the rate of context switching. It is basically the same
+as B<--ratelimit_us> in B<sched-credit>
+
+=back
+
+=item B<sched-rtds> [I<OPTIONS>]
+
+Set or get rtds (Real Time Deferrable Server) scheduler parameters.
+This rt scheduler applies Preemptive Global Earliest Deadline First
+real-time scheduling algorithm to schedule VCPUs in the system.
+Each VCPU has a dedicated period, budget and extratime.
+While scheduled, a VCPU burns its budget.
+A VCPU has its budget replenished at the beginning of each period;
+Unused budget is discarded at the end of each period.
+A VCPU with extratime set gets extra time from the unreserved system resource.
+
+B<OPTIONS>
+
+=over 4
+
+=item B<-d DOMAIN>, B<--domain=DOMAIN>
+
+Specify domain for which scheduler parameters are to be modified or retrieved.
+Mandatory for modifying scheduler parameters.
+
+=item B<-v VCPUID/all>, B<--vcpuid=VCPUID/all>
+
+Specify vcpu for which scheduler parameters are to be modified or retrieved.
+
+=item B<-p PERIOD>, B<--period=PERIOD>
+
+Period of time, in microseconds, over which to replenish the budget.
+
+=item B<-b BUDGET>, B<--budget=BUDGET>
+
+Amount of time, in microseconds, that the VCPU will be allowed
+to run every period.
+
+=item B<-e Extratime>, B<--extratime=Extratime>
+
+Binary flag to decide if the VCPU will be allowed to get extra time from
+the unreserved system resource.
+
+=item B<-c CPUPOOL>, B<--cpupool=CPUPOOL>
+
+Restrict output to domains in the specified cpupool.
+
+=back
+
+B<EXAMPLE>
+
+=over 4
+
+1) Use B<-v all> to see the budget and period of all the VCPUs of
+all the domains:
+
+    xl sched-rtds -v all
+    Cpupool Pool-0: sched=RTDS
+    Name                        ID VCPU    Period    Budget  Extratime
+    Domain-0                     0    0     10000      4000        yes
+    vm1                          2    0       300       150        yes
+    vm1                          2    1       400       200        yes
+    vm1                          2    2     10000      4000        yes
+    vm1                          2    3      1000       500        yes
+    vm2                          4    0     10000      4000        yes
+    vm2                          4    1     10000      4000        yes
+
+Without any arguments, it will output the default scheduling
+parameters for each domain:
+
+    xl sched-rtds
+    Cpupool Pool-0: sched=RTDS
+    Name                        ID    Period    Budget  Extratime
+    Domain-0                     0     10000      4000        yes
+    vm1                          2     10000      4000        yes
+    vm2                          4     10000      4000        yes
+
+
+2) Use, for instance, B<-d vm1, -v all> to see the budget and
+period of all VCPUs of a specific domain (B<vm1>):
+
+    xl sched-rtds -d vm1 -v all
+    Name                        ID VCPU    Period    Budget  Extratime
+    vm1                          2    0       300       150        yes
+    vm1                          2    1       400       200        yes
+    vm1                          2    2     10000      4000        yes
+    vm1                          2    3      1000       500        yes
+
+To see the parameters of a subset of the VCPUs of a domain, use:
+
+    xl sched-rtds -d vm1 -v 0 -v 3
+    Name                        ID VCPU    Period    Budget  Extratime
+    vm1                          2    0       300       150        yes
+    vm1                          2    3      1000       500        yes
+
+If no B<-v> is specified, the default scheduling parameters for the
+domain are shown:
+
+    xl sched-rtds -d vm1
+    Name                        ID    Period    Budget  Extratime
+    vm1                          2     10000      4000        yes
+
+
+3) Users can set the budget and period of multiple VCPUs of a
+specific domain with only one command,
+e.g., "xl sched-rtds -d vm1 -v 0 -p 100 -b 50 -e 1 -v 3 -p 300 -b 150 -e 0".
+
+To change the parameters of all the VCPUs of a domain, use B<-v all>,
+e.g., "xl sched-rtds -d vm1 -v all -p 500 -b 250 -e 1".
+
+=back
+
+=back
+
+=head1 CPUPOOLS COMMANDS
+
+Xen can group the physical cpus of a server in cpu-pools. Each physical CPU is
+assigned at most to one cpu-pool. Domains are each restricted to a single
+cpu-pool. Scheduling does not cross cpu-pool boundaries, so each cpu-pool has
+its own scheduler.
+Physical cpus and domains can be moved from one cpu-pool to another only by an
+explicit command.
+Cpu-pools can be specified either by name or by id.
+
+=over 4
+
+=item B<cpupool-create> [I<OPTIONS>] [I<configfile>] [I<variable=value> ...]
+
+Create a cpu pool based an config from a I<configfile> or command-line
+parameters.  Variable settings from the I<configfile> may be altered
+by specifying new or additional assignments on the command line.
+
+See the L<xlcpupool.cfg(5)> manpage for more information.
+
+B<OPTIONS>
+
+=over 4
+
+=item B<-f=FILE>, B<--defconfig=FILE>
+
+Use the given configuration file.
+
+=back
+
+=item B<cpupool-list> [I<OPTIONS>] [I<cpu-pool>]
+
+List CPU pools on the host.
+
+B<OPTIONS>
+
+=over 4
+
+=item B<-c>, B<--cpus>
+
+If this option is specified, B<xl> prints a list of CPUs used by I<cpu-pool>.
+
+=back
+
+=item B<cpupool-destroy> I<cpu-pool>
+
+Deactivates a cpu pool.
+This is possible only if no domain is active in the cpu-pool.
+
+=item B<cpupool-rename> I<cpu-pool> <newname>
+
+Renames a cpu-pool to I<newname>.
+
+=item B<cpupool-cpu-add> I<cpu-pool> I<cpus|node:nodes>
+
+Adds one or more CPUs or NUMA nodes to I<cpu-pool>. CPUs and NUMA
+nodes can be specified as single CPU/node IDs or as ranges.
+
+For example:
+
+ (a) xl cpupool-cpu-add mypool 4
+ (b) xl cpupool-cpu-add mypool 1,5,10-16,^13
+ (c) xl cpupool-cpu-add mypool node:0,nodes:2-3,^10-12,8
+
+means adding CPU 4 to mypool, in (a); adding CPUs 1,5,10,11,12,14,15
+and 16, in (b); and adding all the CPUs of NUMA nodes 0, 2 and 3,
+plus CPU 8, but keeping out CPUs 10,11,12, in (c).
+
+All the specified CPUs that can be added to the cpupool will be added
+to it. If some CPU can't (e.g., because they're already part of another
+cpupool), an error is reported about each one of them.
+
+=item B<cpupool-cpu-remove> I<cpus|node:nodes>
+
+Removes one or more CPUs or NUMA nodes from I<cpu-pool>. CPUs and NUMA
+nodes can be specified as single CPU/node IDs or as ranges, using the
+exact same syntax as in B<cpupool-cpu-add> above.
+
+=item B<cpupool-migrate> I<domain-id> I<cpu-pool>
+
+Moves a domain specified by domain-id or domain-name into a cpu-pool.
+Domain-0 can't be moved to another cpu-pool.
+
+=item B<cpupool-numa-split>
+
+Splits up the machine into one cpu-pool per numa node.
+
+=back
+
+=head1 VIRTUAL DEVICE COMMANDS
+
+Most virtual devices can be added and removed while guests are
+running, assuming that the necessary support exists in the guest OS.  The
+effect to the guest OS is much the same as any hotplug event.
+
+=head2 BLOCK DEVICES
+
+=over 4
+
+=item B<block-attach> I<domain-id> I<disc-spec-component(s)> ...
+
+Create a new virtual block device and attach it to the specified domain.
+A disc specification is in the same format used for the B<disk> variable in
+the domain config file. See L<xl-disk-configuration(5)>. This will trigger a
+hotplug event for the guest.
+
+Note that only PV block devices are supported by block-attach.
+Requests to attach emulated devices (eg, vdev=hdc) will result in only
+the PV view being available to the guest.
+
+=item B<block-detach> I<domain-id> I<devid> [I<OPTIONS>]
+
+Detach a domain's virtual block device. I<devid> may be the symbolic
+name or the numeric device id given to the device by domain 0.  You
+will need to run B<xl block-list> to determine that number.
+
+Detaching the device requires the cooperation of the domain.  If the
+domain fails to release the device (perhaps because the domain is hung
+or is still using the device), the detach will fail.
+
+B<OPTIONS>
+
+=over 4
+
+=item B<--force>
+
+If this parameter is specified the device will be forcefully detached, which
+may cause IO errors in the domain.
+
+=back
+
+
+
+=item B<block-list> I<domain-id>
+
+List virtual block devices for a domain.
+
+=item B<cd-insert> I<domain-id> I<virtualdevice> I<target>
+
+Insert a cdrom into a guest domain's existing virtual cd drive. The
+virtual drive must already exist but can be empty. How the device should be
+presented to the guest domain is specified by the I<virtualdevice> parameter;
+for example "hdc". Parameter I<target> is the target path in the backend domain
+(usually domain 0) to be exported; can be a block device or a file etc.
+See B<target> in L<xl-disk-configuration(5)>.
+
+Only works with HVM domains.
+
+
+=item B<cd-eject> I<domain-id> I<virtualdevice>
+
+Eject a cdrom from a guest domain's virtual cd drive, specified by
+I<virtualdevice>. Only works with HVM domains.
+
+=back
+
+=head2 NETWORK DEVICES
+
+=over 4
+
+=item B<network-attach> I<domain-id> I<network-device>
+
+Creates a new network device in the domain specified by I<domain-id>.
+I<network-device> describes the device to attach, using the same format as the
+B<vif> string in the domain config file. See L<xl.cfg(5)> and
+L<xl-network-configuration(5)>
+for more information.
+
+Note that only attaching PV network interfaces is supported.
+
+=item B<network-detach> I<domain-id> I<devid|mac>
+
+Removes the network device from the domain specified by I<domain-id>.
+I<devid> is the virtual interface device number within the domain
+(i.e. the 3 in vif22.3). Alternatively, the I<mac> address can be used to
+select the virtual interface to detach.
+
+=item B<network-list> I<domain-id>
+
+List virtual network interfaces for a domain.
+
+=back
+
+=head2 CHANNEL DEVICES
+
+=over 4
+
+=item B<channel-list> I<domain-id>
+
+List virtual channel interfaces for a domain.
+
+=back
+
+=head2 VIRTUAL TRUSTED PLATFORM MODULE (vTPM) DEVICES
+
+=over 4
+
+=item B<vtpm-attach> I<domain-id> I<vtpm-device>
+
+Creates a new vtpm (virtual Trusted Platform Module) device in the domain
+specified by I<domain-id>. I<vtpm-device> describes the device to attach,
+using the same format as the B<vtpm> string in the domain config file.
+See L<xl.cfg(5)> for more information.
+
+=item B<vtpm-detach> I<domain-id> I<devid|uuid>
+
+Removes the vtpm device from the domain specified by I<domain-id>.
+I<devid> is the numeric device id given to the virtual Trusted
+Platform Module device. You will need to run B<xl vtpm-list> to determine that
+number. Alternatively, the I<uuid> of the vtpm can be used to
+select the virtual device to detach.
+
+=item B<vtpm-list> I<domain-id>
+
+List virtual Trusted Platform Modules for a domain.
+
+=back
+
+=head2 VDISPL DEVICES
+
+=over 4
+
+=item B<vdispl-attach> I<domain-id> I<vdispl-device>
+
+Creates a new vdispl device in the domain specified by I<domain-id>.
+I<vdispl-device> describes the device to attach, using the same format as the
+B<vdispl> string in the domain config file. See L<xl.cfg> for
+more information.
+
+B<NOTES>
+
+=over 4
+
+As in I<vdispl-device> string semicolon is used then put quotes or escaping
+when using from the shell.
+
+B<EXAMPLE>
+
+=over 4
+
+xl vdispl-attach DomU connectors='id0:1920x1080;id1:800x600;id2:640x480'
+
+or
+
+xl vdispl-attach DomU connectors=id0:1920x1080\;id1:800x600\;id2:640x480
+
+=back
+
+=back
+
+=item B<vdispl-detach> I<domain-id> I<dev-id>
+
+Removes the vdispl device specified by I<dev-id> from the domain specified by I<domain-id>.
+
+=item B<vdispl-list> I<domain-id>
+
+List virtual displays for a domain.
+
+=back
+
+=head2 VSND DEVICES
+
+=over 4
+
+=item B<vsnd-attach> I<domain-id> I<vsnd-item> I<vsnd-item> ...
+
+Creates a new vsnd device in the domain specified by I<domain-id>.
+I<vsnd-item>'s describe the vsnd device to attach, using the same format as the
+B<VSND_ITEM_SPEC> string in the domain config file. See L<xl.cfg> for
+more information.
+
+B<EXAMPLE>
+
+=over 4
+
+xl vsnd-attach DomU 'CARD, short-name=Main, sample-formats=s16_le;s8;u32_be'
+'PCM, name=Main' 'STREAM, id=0, type=p' 'STREAM, id=1, type=c, channels-max=2'
+
+=back
+
+=item B<vsnd-detach> I<domain-id> I<dev-id>
+
+Removes the vsnd device specified by I<dev-id> from the domain specified by I<domain-id>.
+
+=item B<vsnd-list> I<domain-id>
+
+List vsnd devices for a domain.
+
+=back
+
+=head2 KEYBOARD DEVICES
+
+=over 4
+
+=item B<vkb-attach> I<domain-id> I<vkb-device>
+
+Creates a new keyboard device in the domain specified by I<domain-id>.
+I<vkb-device> describes the device to attach, using the same format as the
+B<VKB_SPEC_STRING> string in the domain config file. See L<xl.cfg(5)>
+for more informations.
+
+=item B<vkb-detach> I<domain-id> I<devid>
+
+Removes the keyboard device from the domain specified by I<domain-id>.
+I<devid> is the virtual interface device number within the domain
+
+=item B<vkb-list> I<domain-id>
+
+List virtual network interfaces for a domain.
+
+=back
+
+=head1 PCI PASS-THROUGH
+
+=over 4
+
+=item B<pci-assignable-list>
+
+List all the assignable PCI devices.
+These are devices in the system which are configured to be
+available for passthrough and are bound to a suitable PCI
+backend driver in domain 0 rather than a real driver.
+
+=item B<pci-assignable-add> I<BDF>
+
+Make the device at PCI Bus/Device/Function BDF assignable to guests.
+This will bind the device to the pciback driver.  If it is already
+bound to a driver, it will first be unbound, and the original driver
+stored so that it can be re-bound to the same driver later if desired.
+If the device is already bound, it will return success.
+
+CAUTION: This will make the device unusable by Domain 0 until it is
+returned with pci-assignable-remove.  Care should therefore be taken
+not to do this on a device critical to domain 0's operation, such as
+storage controllers, network interfaces, or GPUs that are currently
+being used.
+
+=item B<pci-assignable-remove> [I<-r>] I<BDF>
+
+Make the device at PCI Bus/Device/Function BDF not assignable to guests.  This
+will at least unbind the device from pciback.  If the -r option is specified,
+it will also attempt to re-bind the device to its original driver, making it
+usable by Domain 0 again.  If the device is not bound to pciback, it will
+return success.
+
+=item B<pci-attach> I<domain-id> I<BDF>
+
+Hot-plug a new pass-through pci device to the specified domain.
+B<BDF> is the PCI Bus/Device/Function of the physical device to pass-through.
+
+=item B<pci-detach> [I<OPTIONS>] I<domain-id> I<BDF>
+
+Hot-unplug a previously assigned pci device from a domain. B<BDF> is the PCI
+Bus/Device/Function of the physical device to be removed from the guest domain.
+
+B<OPTIONS>
+
+=over 4
+
+=item B<-f>
+
+If this parameter is specified, B<xl> is going to forcefully remove the device
+even without guest domain's collaboration.
+
+=back
+
+=item B<pci-list> I<domain-id>
+
+List pass-through pci devices for a domain.
+
+=back
+
+=head1 USB PASS-THROUGH
+
+=over 4
+
+=item B<usbctrl-attach> I<domain-id> I<usbctrl-device>
+
+Create a new USB controller in the domain specified by I<domain-id>,
+I<usbctrl-device> describes the device to attach, using form
+C<KEY=VALUE KEY=VALUE ...> where B<KEY=VALUE> has the same
+meaning as the B<usbctrl> description in the domain config file.
+See L<xl.cfg(5)> for more information.
+
+=item B<usbctrl-detach> I<domain-id> I<devid>
+
+Destroy a USB controller from the specified domain.
+B<devid> is devid of the USB controller.
+
+=item B<usbdev-attach> I<domain-id> I<usbdev-device>
+
+Hot-plug a new pass-through USB device to the domain specified by
+I<domain-id>, I<usbdev-device> describes the device to attach, using
+form C<KEY=VALUE KEY=VALUE ...> where B<KEY=VALUE> has the same
+meaning as the B<usbdev> description in the domain config file.
+See L<xl.cfg(5)> for more information.
+
+=item B<usbdev-detach> I<domain-id> I<controller=devid> I<port=number>
+
+Hot-unplug a previously assigned USB device from a domain.
+B<controller=devid> and B<port=number> is USB controller:port in the guest
+domain the USB device is attached to.
+
+=item B<usb-list> I<domain-id>
+
+List pass-through usb devices for a domain.
+
+=back
+
+=head1 DEVICE-MODEL CONTROL
+
+=over 4
+
+=item B<qemu-monitor-command> I<domain-id> I<command>
+
+Issue a monitor command to the device model of the domain specified by
+I<domain-id>. I<command> can be any valid command qemu understands. This
+can be e.g. used to add non-standard devices or devices with non-standard
+parameters to a domain. The output of the command is printed to stdout.
+
+B<Warning:> This qemu monitor access is provided for convenience when
+debugging, troubleshooting, and experimenting.  Its use is not
+supported by the Xen Project.
+
+Specifically, not all information displayed by the qemu monitor will
+necessarily be accurate or complete, because in a Xen system qemu
+does not have a complete view of the guest.
+
+Furthermore, modifying the guest's setup via the qemu monitor may
+conflict with the Xen toolstack's assumptions.  Resulting problems
+may include, but are not limited to: guest crashes; toolstack error
+messages; inability to migrate the guest; and security
+vulnerabilities which are not covered by the Xen Project security
+response policy.
+
+B<EXAMPLE>
+
+Obtain information of USB devices connected as such via the device model
+(only!) to a domain:
+
+ xl qemu-monitor-command vm1 'info usb'
+  Device 0.2, Port 5, Speed 480 Mb/s, Product Mass Storage
+
+=back
+
+=head1 TRANSCENDENT MEMORY (TMEM)
+
+=over 4
+
+=item B<tmem-list> I<[OPTIONS]> I<domain-id>
+
+List tmem pools.
+
+B<OPTIONS>
+
+=over 4
+
+=item B<-l>
+
+If this parameter is specified, also list tmem stats.
+
+=back
+
+=item B<tmem-freeze> I<domain-id>
+
+Freeze tmem pools.
+
+=item B<tmem-thaw> I<domain-id>
+
+Thaw tmem pools.
+
+=item B<tmem-set> I<domain-id> [I<OPTIONS>]
+
+Change tmem settings.
+
+B<OPTIONS>
+
+=over 4
+
+=item B<-w> I<WEIGHT>
+
+Weight (int)
+
+=item B<-p> I<COMPRESS>
+
+Compress (int)
+
+=back
+
+=item B<tmem-shared-auth> I<domain-id> [I<OPTIONS>]
+
+De/authenticate shared tmem pool.
+
+B<OPTIONS>
+
+=over 4
+
+=item B<-u> I<UUID>
+
+Specify uuid (abcdef01-2345-6789-1234-567890abcdef)
+
+=item B<-a> I<AUTH>
+
+0=auth,1=deauth
+
+=back
+
+=item B<tmem-freeable>
+
+Get information about how much freeable memory (MB) is in-use by tmem.
+
+=back
+
+=head1 FLASK
+
+B<FLASK> is a security framework that defines a mandatory access control policy
+providing fine-grained controls over Xen domains, allowing the policy writer
+to define what interactions between domains, devices, and the hypervisor are
+permitted. Some example of what you can do using XSM/FLASK:
+ - Prevent two domains from communicating via event channels or grants
+ - Control which domains can use device passthrough (and which devices)
+ - Restrict or audit operations performed by privileged domains
+ - Prevent a privileged domain from arbitrarily mapping pages from other
+   domains.
+
+You can find more details on how to use FLASK and an example security
+policy here: L<http://xenbits.xen.org/docs/unstable/misc/xsm-flask.txt>
+
+=over 4
+
+=item B<getenforce>
+
+Determine if the FLASK security module is loaded and enforcing its policy.
+
+=item B<setenforce> I<1|0|Enforcing|Permissive>
+
+Enable or disable enforcing of the FLASK access controls. The default is
+permissive, but this can be changed to enforcing by specifying "flask=enforcing"
+or "flask=late" on the hypervisor's command line.
+
+=item B<loadpolicy> I<policy-file>
+
+Load FLASK policy from the given policy file. The initial policy is provided to
+the hypervisor as a multiboot module; this command allows runtime updates to the
+policy. Loading new security policy will reset runtime changes to device labels.
+
+=back
+
+=head1 PLATFORM SHARED RESOURCE MONITORING/CONTROL
+
+Intel Haswell and later server platforms offer shared resource monitoring
+and control technologies. The availability of these technologies and the
+hardware capabilities can be shown with B<psr-hwinfo>.
+
+See L<http://xenbits.xen.org/docs/unstable/misc/xl-psr.html> for more
+information.
+
+=over 4
+
+=item B<psr-hwinfo> [I<OPTIONS>]
+
+Show Platform Shared Resource (PSR) hardware information.
+
+B<OPTIONS>
+
+=over 4
+
+=item B<-m>, B<--cmt>
+
+Show Cache Monitoring Technology (CMT) hardware information.
+
+=item B<-a>, B<--cat>
+
+Show Cache Allocation Technology (CAT) hardware information.
+
+=back
+
+=back
+
+=head2 CACHE MONITORING TECHNOLOGY
+
+Intel Haswell and later server platforms offer monitoring capability in each
+logical processor to measure specific platform shared resource metric, for
+example, L3 cache occupancy. In the Xen implementation, the monitoring
+granularity is domain level. To monitor a specific domain, just attach the
+domain id with the monitoring service. When the domain doesn't need to be
+monitored any more, detach the domain id from the monitoring service.
+
+Intel Broadwell and later server platforms also offer total/local memory
+bandwidth monitoring. Xen supports per-domain monitoring for these two
+additional monitoring types. Both memory bandwidth monitoring and L3 cache
+occupancy monitoring share the same set of underlying monitoring service. Once
+a domain is attached to the monitoring service, monitoring data can be shown
+for any of these monitoring types.
+
+There is no cache monitoring and memory bandwidth monitoring on L2 cache so
+far.
+
+=over 4
+
+=item B<psr-cmt-attach> I<domain-id>
+
+attach: Attach the platform shared resource monitoring service to a domain.
+
+=item B<psr-cmt-detach> I<domain-id>
+
+detach: Detach the platform shared resource monitoring service from a domain.
+
+=item B<psr-cmt-show> I<psr-monitor-type> [I<domain-id>]
+
+Show monitoring data for a certain domain or all domains. Current supported
+monitor types are:
+ - "cache-occupancy": showing the L3 cache occupancy(KB).
+ - "total-mem-bandwidth": showing the total memory bandwidth(KB/s).
+ - "local-mem-bandwidth": showing the local memory bandwidth(KB/s).
+
+=back
+
+=head2 CACHE ALLOCATION TECHNOLOGY
+
+Intel Broadwell and later server platforms offer capabilities to configure and
+make use of the Cache Allocation Technology (CAT) mechanisms, which enable more
+cache resources (i.e. L3/L2 cache) to be made available for high priority
+applications. In the Xen implementation, CAT is used to control cache allocation
+on VM basis. To enforce cache on a specific domain, just set capacity bitmasks
+(CBM) for the domain.
+
+Intel Broadwell and later server platforms also offer Code/Data Prioritization
+(CDP) for cache allocations, which support specifying code or data cache for
+applications. CDP is used on a per VM basis in the Xen implementation. To
+specify code or data CBM for the domain, CDP feature must be enabled and CBM
+type options need to be specified when setting CBM, and the type options (code
+and data) are mutually exclusive. There is no CDP support on L2 so far.
+
+=over 4
+
+=item B<psr-cat-set> [I<OPTIONS>] I<domain-id> I<cbm>
+
+Set cache capacity bitmasks(CBM) for a domain. For how to specify I<cbm>
+please refer to L<http://xenbits.xen.org/docs/unstable/misc/xl-psr.html>.
+
+B<OPTIONS>
+
+=over 4
+
+=item B<-s SOCKET>, B<--socket=SOCKET>
+
+Specify the socket to process, otherwise all sockets are processed.
+
+=item B<-l LEVEL>, B<--level=LEVEL>
+
+Specify the cache level to process, otherwise the last level cache (L3) is
+processed.
+
+=item B<-c>, B<--code>
+
+Set code CBM when CDP is enabled.
+
+=item B<-d>, B<--data>
+
+Set data CBM when CDP is enabled.
+
+=back
+
+=item B<psr-cat-show> [I<OPTIONS>] [I<domain-id>]
+
+Show CAT settings for a certain domain or all domains.
+
+B<OPTIONS>
+
+=over 4
+
+=item B<-l LEVEL>, B<--level=LEVEL>
+
+Specify the cache level to process, otherwise the last level cache (L3) is
+processed.
+
+=back
+
+=back
+
+=head2 Memory Bandwidth Allocation
+
+Intel Skylake and later server platforms offer capabilities to configure and
+make use of the Memory Bandwidth Allocation (MBA) mechanisms, which provides
+OS/VMMs the ability to slow misbehaving apps/VMs by using a credit-based
+throttling mechanism. In the Xen implementation, MBA is used to control memory
+bandwidth on VM basis. To enforce bandwidth on a specific domain, just set
+throttling value (THRTL) for the domain.
+
+=over 4
+
+=item B<psr-mba-set> [I<OPTIONS>] I<domain-id> I<thrtl>
+
+Set throttling value (THRTL) for a domain. For how to specify I<thrtl>
+please refer to L<http://xenbits.xen.org/docs/unstable/misc/xl-psr.html>.
+
+B<OPTIONS>
+
+=over 4
+
+=item B<-s SOCKET>, B<--socket=SOCKET>
+
+Specify the socket to process, otherwise all sockets are processed.
+
+=back
+
+=item B<psr-mba-show> [I<domain-id>]
+
+Show MBA settings for a certain domain or all domains. For linear mode, it
+shows the decimal value. For non-linear mode, it shows hexadecimal value.
+
+=back
+
+=head1 IGNORED FOR COMPATIBILITY WITH XM
+
+xl is mostly command-line compatible with the old xm utility used with
+the old Python xend.  For compatibility, the following options are
+ignored:
+
+=over 4
+
+=item B<xl migrate --live>
+
+=back
+
+=head1 TO BE DOCUMENTED
+
+We need better documentation for:
+
+=over 4
+
+=item B<tmem>
+
+Transcendent Memory.
+
+=back
+
+=head1 SEE ALSO
+
+The following man pages:
+
+L<xl.cfg>(5), L<xlcpupool.cfg>(5), L<xentop>(1), L<xl-disk-configuration(5)>
+L<xl-network-configuration(5)>
+
+And the following documents on the xen.org website:
+
+L<http://xenbits.xen.org/docs/unstable/misc/xsm-flask.txt>
+L<http://xenbits.xen.org/docs/unstable/misc/xl-psr.html>
+
+For systems that don't automatically bring the CPU online:
+
+L<http://wiki.xen.org/wiki/Paravirt_Linux_CPU_Hotplug>
+
+=head1 BUGS
+
+Send bugs to xen-devel@lists.xen.org, see
+http://wiki.xen.org/xenwiki/ReportingBugs on how to send bug reports.
diff --git a/docs/man/xl.cfg.5.pod.in b/docs/man/xl.cfg.5.pod.in
new file mode 100644 (file)
index 0000000..3b92f39
--- /dev/null
@@ -0,0 +1,2843 @@
+=head1 NAME
+
+xl.cfg - xl domain configuration file syntax
+
+=head1 SYNOPSIS
+
+ /etc/xen/xldomain
+
+=head1 DESCRIPTION
+
+Creating a VM (a domain in Xen terminology, sometimes called a guest)
+with xl requires the provision of a domain configuration file.  Typically,
+these live in F</etc/xen/DOMAIN.cfg>, where DOMAIN is the name of the
+domain.
+
+=head1 SYNTAX
+
+A domain configuration file consists of a series of options, specified by
+using C<KEY=VALUE> pairs.
+
+Some C<KEY>s are mandatory, some are general options which apply to
+any guest type, while others relate only to specific guest types
+(e.g. PV or HVM guests).
+
+A C<VALUE> can be one of:
+
+=over 4
+
+=item B<"STRING">
+
+A string, surrounded by either single or double quotes. But if the
+STRING is part of a SPEC_STRING, the quotes should be omitted.
+
+=item B<NUMBER>
+
+A number, in either decimal, octal (using a C<0> prefix) or
+hexadecimal (using a C<0x> prefix) format.
+
+=item B<BOOLEAN>
+
+A C<NUMBER> interpreted as C<False> (C<0>) or C<True> (any other
+value).
+
+=item B<[ VALUE, VALUE, ... ]>
+
+A list of C<VALUE>s of the above types. Lists can be heterogeneous and
+nested.
+
+=back
+
+The semantics of each C<KEY> defines which type of C<VALUE> is required.
+
+Pairs may be separated either by a newline or a semicolon.  Both
+of the following are valid:
+
+  name="h0"
+  type="hvm"
+
+  name="h0"; type="hvm"
+
+=head1 OPTIONS
+
+=head2 Mandatory Configuration Items
+
+The following key is mandatory for any guest type.
+
+=over 4
+
+=item B<name="NAME">
+
+Specifies the name of the domain.  Names of domains existing on a
+single host must be unique.
+
+=back
+
+=head2 Selecting Guest Type
+
+=over 4
+
+=item B<type="pv">
+
+Specifies that this is to be a PV domain, suitable for hosting Xen-aware
+guest operating systems. This is the default on x86.
+
+=item B<type="pvh">
+
+Specifies that this is to be an PVH domain. That is a lightweight HVM-like
+guest without a device model and without many of the emulated devices
+available to HVM guests. Note that this mode requires a PVH aware kernel on
+x86. This is the default on Arm.
+
+=item B<type="hvm">
+
+Specifies that this is to be an HVM domain. That is, a fully virtualised
+computer with emulated BIOS, disk and network peripherals, etc.
+
+=back
+
+=head3 Deprecated guest type selection
+
+Note that the builder option is being deprecated in favor of the type
+option.
+
+=over 4
+
+=item B<builder="generic">
+
+Specifies that this is to be a PV domain, suitable for hosting Xen-aware guest
+operating systems. This is the default.
+
+=item B<builder="hvm">
+
+Specifies that this is to be an HVM domain.  That is, a fully
+virtualised computer with emulated BIOS, disk and network peripherals,
+etc.
+
+=back
+
+=head2 General Options
+
+The following options apply to guests of any type.
+
+=head3 CPU Allocation
+
+=over 4
+
+=item B<pool="CPUPOOLNAME">
+
+Put the guest's vCPUs into the named CPU pool.
+
+=item B<vcpus=N>
+
+Start the guest with N vCPUs initially online.
+
+=item B<maxvcpus=M>
+
+Allow the guest to bring up a maximum of M vCPUs. When starting the guest, if
+B<vcpus=N> is less than B<maxvcpus=M> then the first B<N> vCPUs will be
+created online and the remainder will be created offline.
+
+=item B<cpus="CPULIST">
+
+List of host CPUs the guest is allowed to use. Default is no pinning at
+all (more on this below). A C<CPULIST> may be specified as follows:
+
+=over 4
+
+=item "all"
+
+To allow all the vCPUs of the guest to run on all the CPUs on the host.
+
+=item "0-3,5,^1"
+
+To allow all the vCPUs of the guest to run on CPUs 0,2,3,5. It is possible to
+combine this with "all", meaning "all,^7" results in all the vCPUs
+of the guest being allowed to run on all the CPUs of the host except CPU 7.
+
+=item "nodes:0-3,^node:2"
+
+To allow all the vCPUs of the guest to run on the CPUs from NUMA nodes
+0,1,3 of the host. So, if CPUs 0-3 belong to node 0, CPUs 4-7 belong
+to node 1, CPUs 8-11 to node 2 and CPUs 12-15 to node 3, the above would mean
+all the vCPUs of the guest would be allowed to run on CPUs 0-7,12-15.
+
+Combining this notation with the one above is possible. For instance,
+"1,node:1,^6", means all the vCPUs of the guest will run on CPU 1 and
+on all the CPUs of NUMA node 1, but not on CPU 6. Following the same
+example as above, that would be CPUs 1,4,5,7.
+
+Combining this with "all" is also possible, meaning "all,^node:1"
+results in all the vCPUs of the guest running on all the CPUs on the
+host, except for the CPUs belonging to the host NUMA node 1.
+
+=item ["2", "3-8,^5"]
+
+To ask for specific vCPU mapping. That means (in this example), vCPU 0
+of the guest will run on CPU 2 of the host and vCPU 1 of the guest will
+run on CPUs 3,4,6,7,8 of the host (excluding CPU 5).
+
+More complex notation can be also used, exactly as described above. So
+"all,^5-8", or just "all", or "node:0,node:2,^9-11,18-20" are all legal,
+for each element of the list.
+
+=back
+
+If this option is not specified, no vCPU to CPU pinning is established,
+and the vCPUs of the guest can run on all the CPUs of the host. If this
+option is specified, the intersection of the vCPU pinning mask, provided
+here, and the soft affinity mask, if provided via B<cpus_soft=>,
+is utilized to compute the domain node-affinity for driving memory
+allocations.
+
+=item B<cpus_soft="CPULIST">
+
+Exactly as B<cpus=>, but specifies soft affinity, rather than pinning
+(hard affinity). When using the credit scheduler, this means what CPUs
+the vCPUs of the domain prefer.
+
+A C<CPULIST> is specified exactly as for B<cpus=>, detailed earlier in the
+manual.
+
+If this option is not specified, the vCPUs of the guest will not have
+any preference regarding host CPUs. If this option is specified,
+the intersection of the soft affinity mask, provided here, and the vCPU
+pinning, if provided via B<cpus=>, is utilized to compute the
+domain node-affinity for driving memory allocations.
+
+If this option is not specified (and B<cpus=> is not specified either),
+libxl automatically tries to place the guest on the least possible
+number of nodes. A heuristic approach is used for choosing the best
+node (or set of nodes), with the goal of maximizing performance for
+the guest and, at the same time, achieving efficient utilization of
+host CPUs and memory. In that case, the soft affinity of all the vCPUs
+of the domain will be set to host CPUs belonging to NUMA nodes
+chosen during placement.
+
+For more details, see L<xl-numa-placement(7)>.
+
+=back
+
+=head3 CPU Scheduling
+
+=over 4
+
+=item B<cpu_weight=WEIGHT>
+
+A domain with a weight of 512 will get twice as much CPU as a domain
+with a weight of 256 on a contended host.
+Legal weights range from 1 to 65535 and the default is 256.
+Honoured by the credit and credit2 schedulers.
+
+=item B<cap=N>
+
+The cap optionally fixes the maximum amount of CPU a domain will be
+able to consume, even if the host system has idle CPU cycles.
+The cap is expressed as a percentage of one physical CPU:
+100 is 1 physical CPU, 50 is half a CPU, 400 is 4 CPUs, etc.
+The default, 0, means there is no cap.
+Honoured by the credit and credit2 schedulers.
+
+B<NOTE>: Many systems have features that will scale down the computing
+power of a CPU that is not 100% utilized.  This can be done in the
+operating system, but can also sometimes be done below the operating system,
+in the BIOS.  If you set a cap such that individual cores are running
+at less than 100%, this may have an impact on the performance of your
+workload over and above the impact of the cap. For example, if your
+processor runs at 2GHz, and you cap a VM at 50%, the power management
+system may also reduce the clock speed to 1GHz; the effect will be
+that your VM gets 25% of the available power (50% of 1GHz) rather than
+50% (50% of 2GHz).  If you are not getting the performance you expect,
+look at performance and CPU frequency options in your operating system and
+your BIOS.
+
+=back
+
+=head3 Memory Allocation
+
+=over 4
+
+=item B<memory=MBYTES>
+
+Start the guest with MBYTES megabytes of RAM.
+
+=item B<maxmem=MBYTES>
+
+Specifies the maximum amount of memory a guest can ever see.
+The value of B<maxmem=> must be equal to or greater than that of B<memory=>.
+
+In combination with B<memory=> it will start the guest "pre-ballooned",
+if the values of B<memory=> and B<maxmem=> differ.
+A "pre-ballooned" HVM guest needs a balloon driver, without a balloon driver
+it will crash.
+
+B<NOTE>: Because of the way ballooning works, the guest has to allocate
+memory to keep track of maxmem pages, regardless of how much memory it
+actually has available to it.  A guest with maxmem=262144 and
+memory=8096 will report significantly less memory available for use
+than a system with maxmem=8096 memory=8096 due to the memory overhead
+of having to track the unused pages.
+
+=back
+
+=head3 Guest Virtual NUMA Configuration
+
+=over 4
+
+=item B<vnuma=[ VNODE_SPEC, VNODE_SPEC, ... ]>
+
+Specify virtual NUMA configuration with positional arguments. The
+nth B<VNODE_SPEC> in the list specifies the configuration of the nth
+virtual node.
+
+Note that virtual NUMA is not supported for PV guests yet, because
+there is an issue with the CPUID instruction handling that affects PV virtual
+NUMA. Furthermore, guests with virtual NUMA cannot be saved or migrated
+because the migration stream does not preserve node information.
+
+Each B<VNODE_SPEC> is a list, which has a form of
+"[VNODE_CONFIG_OPTION, VNODE_CONFIG_OPTION, ... ]"  (without the quotes).
+
+For example, vnuma = [ ["pnode=0","size=512","vcpus=0-4","vdistances=10,20"] ]
+means vnode 0 is mapped to pnode 0, has 512MB ram, has vcpus 0 to 4, the
+distance to itself is 10 and the distance to vnode 1 is 20.
+
+Each B<VNODE_CONFIG_OPTION> is a quoted C<KEY=VALUE> pair. Supported
+B<VNODE_CONFIG_OPTION>s are (they are all mandatory at the moment):
+
+=over 4
+
+=item B<pnode=NUMBER>
+
+Specifies which physical node this virtual node maps to.
+
+=item B<size=MBYTES>
+
+Specifies the size of this virtual node. The sum of memory sizes of all
+vnodes will become B<maxmem=>. If B<maxmem=> is specified separately,
+a check is performed to make sure the sum of all vnode memory matches
+B<maxmem=>.
+
+=item B<vcpus="CPUSTRING">
+
+Specifies which vCPUs belong to this node. B<"CPUSTRING"> is a string of numerical
+values separated by a comma. You can specify a range and/or a single CPU.
+An example would be "vcpus=0-5,8", which means you specified vCPU 0 to vCPU 5,
+and vCPU 8.
+
+=item B<vdistances=NUMBER, NUMBER, ... >
+
+Specifies the virtual distance from this node to all nodes (including
+itself) with positional arguments. For example, "vdistance=10,20"
+for vnode 0 means the distance from vnode 0 to vnode 0 is 10, from
+vnode 0 to vnode 1 is 20. The number of arguments supplied must match
+the total number of vnodes.
+
+Normally you can use the values from B<xl info -n> or B<numactl
+--hardware> to fill the vdistances list.
+
+=back
+
+=back
+
+=head3 Event Actions
+
+=over 4
+
+=item B<on_poweroff="ACTION">
+
+Specifies what should be done with the domain if it shuts itself down.
+The B<ACTION>s are:
+
+=over 4
+
+=item B<destroy>
+
+destroy the domain
+
+=item B<restart>
+
+destroy the domain and immediately create a new domain with the same
+configuration
+
+=item B<rename-restart>
+
+rename the domain which terminated, and then immediately create a new
+domain with the same configuration as the original
+
+=item B<preserve>
+
+keep the domain.  It can be examined, and later destroyed with B<xl destroy>.
+
+=item B<coredump-destroy>
+
+write a "coredump" of the domain to F<@XEN_DUMP_DIR@/NAME> and then
+destroy the domain.
+
+=item B<coredump-restart>
+
+write a "coredump" of the domain to F<@XEN_DUMP_DIR@/NAME> and then
+restart the domain.
+
+=item B<soft-reset>
+
+Reset all Xen specific interfaces for the Xen-aware HVM domain allowing
+it to reestablish these interfaces and continue executing the domain. PV
+and non-Xen-aware HVM guests are not supported.
+
+=back
+
+The default for B<on_poweroff> is B<destroy>.
+
+=item B<on_reboot="ACTION">
+
+Action to take if the domain shuts down with a reason code requesting
+a reboot.  Default is B<restart>.
+
+=item B<on_watchdog="ACTION">
+
+Action to take if the domain shuts down due to a Xen watchdog timeout.
+Default is B<destroy>.
+
+=item B<on_crash="ACTION">
+
+Action to take if the domain crashes.  Default is B<destroy>.
+
+=item B<on_soft_reset="ACTION">
+
+Action to take if the domain performs a 'soft reset' (e.g. does B<kexec>).
+Default is B<soft-reset>.
+
+=back
+
+=head3 Direct Kernel Boot
+
+Direct kernel boot allows booting guests with a kernel and an initrd
+stored on a filesystem available to the host physical machine, allowing
+command line arguments to be passed directly. PV guest direct kernel boot is
+supported. HVM guest direct kernel boot is supported with some limitations
+(it's supported when using B<qemu-xen> and the default BIOS 'seabios',
+but not supported in case of using B<stubdom-dm> and the old 'rombios'.)
+
+=over 4
+
+=item B<kernel="PATHNAME">
+
+Load the specified file as the kernel image.
+
+=item B<ramdisk="PATHNAME">
+
+Load the specified file as the ramdisk.
+
+=item B<cmdline="STRING">
+
+Append B<STRING> to the kernel command line. (Note: the meaning of
+this is guest specific). It can replace B<root="STRING">
+along with B<extra="STRING"> and is preferred. When B<cmdline="STRING"> is set,
+B<root="STRING"> and B<extra="STRING"> will be ignored.
+
+=item B<root="STRING">
+
+Append B<root=STRING> to the kernel command line (Note: the meaning of this
+is guest specific).
+
+=item B<extra="STRING">
+
+Append B<STRING> to the kernel command line. (Note: the meaning of this
+is guest specific).
+
+=back
+
+=head3 Non direct Kernel Boot
+
+Non direct kernel boot allows booting guests with a firmware. This can be
+used by all types of guests, although the selection of options is different
+depending on the guest type.
+
+This option provides the flexibly of letting the guest decide which kernel
+they want to boot, while preventing having to poke at the guest file
+system form the toolstack domain.
+
+=head4 PV guest options
+
+=over 4
+
+=item B<firmware="pvgrub32|pvgrub64">
+
+Boots a guest using a para-virtualized version of grub that runs inside
+of the guest. The bitness of the guest needs to be know, so that the right
+version of pvgrub can be selected.
+
+Note that xl expects to find the pvgrub32.bin and pvgrub64.bin binaries in
+F<@XENFIRMWAREDIR@>.
+
+=back
+
+=head4 HVM guest options
+
+=over 4
+
+=item B<firmware="bios">
+
+Boot the guest using the default BIOS firmware, which depends on the
+chosen device model.
+
+=item B<firmware="uefi">
+
+Boot the guest using the default UEFI firmware, currently OVMF.
+
+=item B<firmware="seabios">
+
+Boot the guest using the SeaBIOS BIOS firmware.
+
+=item B<firmware="rombios">
+
+Boot the guest using the ROMBIOS BIOS firmware.
+
+=item B<firmware="ovmf">
+
+Boot the guest using the OVMF UEFI firmware.
+
+=item B<firmware="PATH">
+
+Load the specified file as firmware for the guest.
+
+=back
+
+=head4 PVH guest options
+
+Currently there's no firmware available for PVH guests, they should be
+booted using the B<Direct Kernel Boot> method or the B<bootloader> option.
+
+=over 4
+
+=item B<pvshim=BOOLEAN>
+
+Whether to boot this guest as a PV guest within a PVH container.
+Ie, the guest will experience a PV environment,
+but
+processor hardware extensions are used to
+separate its address space
+to mitigate the Meltdown attack (CVE-2017-5754).
+
+Default is false.
+
+=item B<pvshim_path="PATH">
+
+The PV shim is a specially-built firmware-like executable
+constructed from the hypervisor source tree.
+This option specifies to use a non-default shim.
+Ignored if pvhsim is false.
+
+=item B<pvshim_cmdline="STRING">
+
+Command line for the shim.
+Default is "pv-shim console=xen,pv".
+Ignored if pvhsim is false.
+
+=item B<pvshim_extra="STRING">
+
+Extra command line arguments for the shim.
+If supplied, appended to the value for pvshim_cmdline.
+Default is empty.
+Ignored if pvhsim is false.
+
+=back
+
+=head3 Other Options
+
+=over 4
+
+=item B<uuid="UUID">
+
+Specifies the UUID of the domain.  If not specified, a fresh unique
+UUID will be generated.
+
+=item B<seclabel="LABEL">
+
+Assign an XSM security label to this domain.
+
+=item B<init_seclabel="LABEL">
+
+Specify an XSM security label used for this domain temporarily during
+its build. The domain's XSM label will be changed to the execution
+seclabel (specified by B<seclabel>) once the build is complete, prior to
+unpausing the domain. With a properly constructed security policy (such
+as nomigrate_t in the example policy), this can be used to build a
+domain whose memory is not accessible to the toolstack domain.
+
+=item B<max_grant_frames=NUMBER>
+
+Specify the maximum number of grant frames the domain is allowed to have.
+This value controls how many pages the domain is able to grant access to for
+other domains, needed e.g. for the operation of paravirtualized devices.
+The default is settable via L<xl.conf(5)>.
+
+=item B<max_maptrack_frames=NUMBER>
+
+Specify the maximum number of grant maptrack frames the domain is allowed
+to have. This value controls how many pages of foreign domains can be accessed
+via the grant mechanism by this domain. The default value is settable via
+L<xl.conf(5)>.
+
+=item B<nomigrate=BOOLEAN>
+
+Disable migration of this domain.  This enables certain other features
+which are incompatible with migration. Currently this is limited to
+enabling the invariant TSC feature flag in CPUID results when TSC is
+not emulated.
+
+=item B<driver_domain=BOOLEAN>
+
+Specify that this domain is a driver domain. This enables certain
+features needed in order to run a driver domain.
+
+=item B<device_tree=PATH>
+
+Specify a partial device tree (compiled via the Device Tree Compiler).
+Everything under the node "/passthrough" will be copied into the guest
+device tree. For convenience, the node "/aliases" is also copied to allow
+the user to define aliases which can be used by the guest kernel.
+
+Given the complexity of verifying the validity of a device tree, this
+option should only be used with a trusted device tree.
+
+Note that the partial device tree should avoid using the phandle 65000
+which is reserved by the toolstack.
+
+=back
+
+=head2 Devices
+
+The following options define the paravirtual, emulated and physical
+devices which the guest will contain.
+
+=over 4
+
+=item B<disk=[ "DISK_SPEC_STRING", "DISK_SPEC_STRING", ...]>
+
+Specifies the disks (both emulated disks and Xen virtual block
+devices) which are to be provided to the guest, and what objects on
+the host they should map to.  See L<xl-disk-configuration(5)> for more
+details.
+
+=item B<vif=[ "NET_SPEC_STRING", "NET_SPEC_STRING", ...]>
+
+Specifies the network interfaces (both emulated network adapters,
+and Xen virtual interfaces) which are to be provided to the guest.  See
+L<xl-network-configuration(5)> for more details.
+
+=item B<vtpm=[ "VTPM_SPEC_STRING", "VTPM_SPEC_STRING", ...]>
+
+Specifies the Virtual Trusted Platform module to be
+provided to the guest. See L<xen-vtpm(7)> for more details.
+
+Each B<VTPM_SPEC_STRING> is a comma-separated list of C<KEY=VALUE>
+settings from the following list:
+
+=over 4
+
+=item B<backend=domain-id>
+
+Specifies the backend domain name or id. B<This value is required!>
+If this domain is a guest, the backend should be set to the
+vTPM domain name. If this domain is a vTPM, the
+backend should be set to the vTPM manager domain name.
+
+=item B<uuid=UUID>
+
+Specifies the UUID of this vTPM device. The UUID is used to uniquely
+identify the vTPM device. You can create one using the B<uuidgen(1)>
+program on unix systems. If left unspecified, a new UUID
+will be randomly generated every time the domain boots.
+If this is a vTPM domain, you should specify a value. The
+value is optional if this is a guest domain.
+
+=back
+
+=item B<p9=[ "9PFS_SPEC_STRING", "9PFS_SPEC_STRING", ...]>
+
+Creates a Xen 9pfs connection to share a filesystem from the backend to the
+frontend.
+
+Each B<9PFS_SPEC_STRING> is a comma-separated list of C<KEY=VALUE>
+settings, from the following list:
+
+=over 4
+
+=item B<tag=STRING>
+
+9pfs tag to identify the filesystem share. The tag is needed on the
+guest side to mount it.
+
+=item B<security_model="none">
+
+Only "none" is supported today, which means that the files are stored using
+the same credentials as those they have in the guest (no user ownership
+squash or remap).
+
+=item B<path=STRING>
+
+Filesystem path on the backend to export.
+
+=item B<backend=domain-id>
+
+Specify the backend domain name or id, defaults to dom0.
+
+=back
+
+=item B<pvcalls=[ "backend=domain-id", ... ]>
+
+Creates a Xen pvcalls connection to handle pvcalls requests from
+frontend to backend. It can be used as an alternative networking model.
+For more information about the protocol, see
+https://xenbits.xen.org/docs/unstable/misc/pvcalls.html.
+
+=item B<vfb=[ "VFB_SPEC_STRING", "VFB_SPEC_STRING", ...]>
+
+Specifies the paravirtual framebuffer devices which should be supplied
+to the domain.
+
+This option does not control the emulated graphics card presented to
+an HVM guest. See B<Emulated VGA Graphics Device> below for how to
+configure the emulated device. If B<Emulated VGA Graphics Device> options
+are used in a PV guest configuration, B<xl> will pick up B<vnc>, B<vnclisten>,
+B<vncpasswd>, B<vncdisplay>, B<vncunused>, B<sdl>, B<opengl> and
+B<keymap> to construct the paravirtual framebuffer device for the guest.
+
+Each B<VFB_SPEC_STRING> is a comma-separated list of C<KEY=VALUE>
+settings, from the following list:
+
+=over 4
+
+=item B<vnc=BOOLEAN>
+
+Allow access to the display via the VNC protocol.  This enables the
+other VNC-related settings.  Default is 1 (enabled).
+
+=item B<vnclisten=ADDRESS[:DISPLAYNUM]>
+
+Specifies the IP address, and optionally the VNC display number, to use.
+
+Note: if you specify the display number here, you should not use
+the B<vncdisplay> option.
+
+=item B<vncdisplay=DISPLAYNUM>
+
+Specifies the VNC display number to use.  The actual TCP port number
+will be DISPLAYNUM+5900.
+
+Note: you should not use this option if you set the DISPLAYNUM in the
+B<vnclisten> option.
+
+=item B<vncunused=BOOLEAN>
+
+Requests that the VNC display setup searches for a free TCP port to use.
+The actual display used can be accessed with B<xl vncviewer>.
+
+=item B<vncpasswd=PASSWORD>
+
+Specifies the password for the VNC server. If the password is set to an
+empty string, authentication on the VNC server will be disabled,
+allowing any user to connect.
+
+=item B<sdl=BOOLEAN>
+
+Specifies that the display should be presented via an X window (using
+Simple DirectMedia Layer). The default is 0 (not enabled).
+
+=item B<display=DISPLAY>
+
+Specifies the X Window display that should be used when the B<sdl> option
+is used.
+
+=item B<xauthority=XAUTHORITY>
+
+Specifies the path to the X authority file that should be used to
+connect to the X server when the B<sdl> option is used.
+
+=item B<opengl=BOOLEAN>
+
+Enable OpenGL acceleration of the SDL display. Only effects machines
+using B<device_model_version="qemu-xen-traditional"> and only if the
+device-model was compiled with OpenGL support. The default is 0 (disabled).
+
+=item B<keymap=LANG>
+
+Configure the keymap to use for the keyboard associated with this
+display. If the input method does not easily support raw keycodes
+(e.g. this is often the case when using VNC) then this allows us to
+correctly map the input keys into keycodes seen by the guest. The
+specific values which are accepted are defined by the version of the
+device-model which you are using. See B<Keymaps> below or consult the
+B<qemu(1)> manpage. The default is B<en-us>.
+
+=back
+
+=item B<channel=[ "CHANNEL_SPEC_STRING", "CHANNEL_SPEC_STRING", ...]>
+
+Specifies the virtual channels to be provided to the guest. A
+channel is a low-bandwidth, bidirectional byte stream, which resembles
+a serial link. Typical uses for channels include transmitting VM
+configuration after boot and signalling to in-guest agents. Please see
+L<xen-pv-channel(7)> for more details.
+
+Each B<CHANNEL_SPEC_STRING> is a comma-separated list of C<KEY=VALUE>
+settings. Leading and trailing whitespace is ignored in both KEY and
+VALUE. Neither KEY nor VALUE may contain ',', '=' or '"'. Defined values
+are:
+
+=over 4
+
+=item B<backend=domain-id>
+
+Specifies the backend domain name or id. This parameter is optional. If
+this parameter is omitted then the toolstack domain will be assumed.
+
+=item B<name=NAME>
+
+Specifies the name for this device. B<This parameter is mandatory!>
+This should be a well-known name for a specific application (e.g.
+guest agent) and should be used by the frontend to connect the
+application to the right channel device. There is no formal registry
+of channel names, so application authors are encouraged to make their
+names unique by including the domain name and a version number in the string
+(e.g. org.mydomain.guestagent.1).
+
+=item B<connection=CONNECTION>
+
+Specifies how the backend will be implemented. The following options are
+available:
+
+=over 4
+
+=item B<SOCKET>
+
+The backend will bind a Unix domain socket (at the path given by
+B<path=PATH>), listen for and accept connections. The backend will proxy
+data between the channel and the connected socket.
+
+=item B<PTY>
+
+The backend will create a pty and proxy data between the channel and the
+master device. The command B<xl channel-list> can be used to discover the
+assigned slave device.
+
+=back
+
+=back
+
+=item B<rdm="RDM_RESERVATION_STRING">
+
+B<HVM/x86 only!> Specifies information about Reserved Device Memory (RDM),
+which is necessary to enable robust device passthrough. One example of RDM
+is reporting through the ACPI Reserved Memory Region Reporting (RMRR) structure
+on the x86 platform.
+
+B<RDM_RESERVATION_STRING> is a comma separated list of C<KEY=VALUE> settings,
+from the following list:
+
+=over 4
+
+=item B<strategy=STRING>
+
+Currently there is only one valid type, and that is "host".
+
+=over 4
+
+=item B<host>
+
+If set to "host" it means all reserved device memory on this platform should
+be checked to reserve regions in this VM's address space. This global RDM
+parameter allows the user to specify reserved regions explicitly, and using
+"host" includes all reserved regions reported on this platform, which is
+useful when doing hotplug.
+
+By default this isn't set so we don't check all RDMs. Instead, we just check
+the RDM specific to a given device if we're assigning this kind of a device.
+
+Note: this option is not recommended unless you can make sure that no
+conflicts exist.
+
+For example, you're trying to set "memory = 2800" to allocate memory to one
+given VM but the platform owns two RDM regions like:
+
+Device A [sbdf_A]: RMRR region_A: base_addr ac6d3000 end_address ac6e6fff
+
+Device B [sbdf_B]: RMRR region_B: base_addr ad800000 end_address afffffff
+
+In this conflict case,
+
+#1. If B<strategy> is set to "host", for example:
+
+rdm = "strategy=host,policy=strict" or rdm = "strategy=host,policy=relaxed"
+
+it means all conflicts will be handled according to the policy
+introduced by B<policy> as described below.
+
+#2. If B<strategy> is not set at all, but
+
+pci = [ 'sbdf_A, rdm_policy=xxxxx' ]
+
+it means only one conflict of region_A will be handled according to the policy
+introduced by B<rdm_policy=STRING> as described inside B<pci> options.
+
+=back
+
+=item B<policy=STRING>
+
+Specifies how to deal with conflicts when reserving already reserved device
+memory in the guest address space.
+
+=over 4
+
+=item B<strict>
+
+Specifies that in case of an unresolved conflict the VM can't be created,
+or the associated device can't be attached in the case of hotplug.
+
+=item B<relaxed>
+
+Specifies that in case of an unresolved conflict the VM is allowed to be
+created but may cause the VM to crash if a pass-through device accesses RDM.
+For example, the Windows IGD GFX driver always accesses RDM regions so it
+leads to a VM crash.
+
+Note: this may be overridden by the B<rdm_policy> option in the B<pci>
+device configuration.
+
+=back
+
+=back
+
+=item B<usbctrl=[ "USBCTRL_SPEC_STRING", "USBCTRL_SPEC_STRING", ...]>
+
+Specifies the USB controllers created for this guest.
+
+Each B<USBCTRL_SPEC_STRING> is a comma-separated list of C<KEY=VALUE>
+settings, from the following list:
+
+=over 4
+
+=item B<type=TYPE>
+
+Specifies the usb controller type.
+
+=over 4
+
+=item B<pv>
+
+Specifies a kernel based PVUSB backend.
+
+=item B<qusb>
+
+Specifies a QEMU based PVUSB backend.
+
+=item B<devicemodel>
+
+Specifies a USB controller emulated by QEMU.
+It will show up as a PCI-device in the guest.
+
+=item B<auto>
+
+Determines whether a kernel based backend is installed.
+If this is the case, B<pv> is used, otherwise B<qusb> will be used.
+For HVM domains B<devicemodel> will be selected.
+
+This option is the default.
+
+=back
+
+=item B<version=VERSION>
+
+Specifies the usb controller version.  Possible values include
+1 (USB1.1), 2 (USB2.0) and 3 (USB3.0).
+Default is 2 (USB2.0).
+Value 3 (USB3.0) is available for the B<devicemodel> type only.
+
+=item B<ports=PORTS>
+
+Specifies the total number of ports of the usb controller. The maximum
+number is 31. The default is 8.
+With the type B<devicemodel> the number of ports is more limited:
+a USB1.1 controller always has 2 ports,
+a USB2.0 controller always has 6 ports
+and a USB3.0 controller can have up to 15 ports.
+
+USB controller ids start from 0.  In line with the USB specification, however,
+ports on a controller start from 1.
+
+B<EXAMPLE>
+
+=over 2
+
+usbctrl=["version=1,ports=4", "version=2,ports=8"]
+
+The first controller is USB1.1 and has:
+
+controller id = 0, and ports 1,2,3,4.
+
+The second controller is USB2.0 and has:
+
+controller id = 1, and ports 1,2,3,4,5,6,7,8.
+
+=back
+
+=back
+
+=item B<usbdev=[ "USBDEV_SPEC_STRING", "USBDEV_SPEC_STRING", ...]>
+
+Specifies the USB devices to be attached to the guest at boot.
+
+Each B<USBDEV_SPEC_STRING> is a comma-separated list of C<KEY=VALUE>
+settings, from the following list:
+
+=over 4
+
+=item B<type=hostdev>
+
+Specifies USB device type. Currently only "hostdev" is supported.
+
+=item B<hostbus=busnum>
+
+Specifies busnum of the USB device from the host perspective.
+
+=item B<hostaddr=devnum>
+
+Specifies devnum of the USB device from the host perspective.
+
+=item B<controller=CONTROLLER>
+
+Specifies the USB controller id, to which controller the USB device is
+attached.
+
+If no controller is specified, an available controller:port combination
+will be used.  If there are no available controller:port combinations,
+a new controller will be created.
+
+=item B<port=PORT>
+
+Specifies the USB port to which the USB device is attached. The B<port>
+option is valid only when the B<controller> option is specified.
+
+=back
+
+=item B<pci=[ "PCI_SPEC_STRING", "PCI_SPEC_STRING", ...]>
+
+Specifies the host PCI devices to passthrough to this guest.
+Each B<PCI_SPEC_STRING> has the form of
+B<[DDDD:]BB:DD.F[@VSLOT],KEY=VALUE,KEY=VALUE,...> where:
+
+=over 4
+
+=item B<[DDDD:]BB:DD.F>
+
+Identifies the PCI device from the host perspective in the domain
+(B<DDDD>), Bus (B<BB>), Device (B<DD>) and Function (B<F>) syntax. This is
+the same scheme as used in the output of B<lspci(1)> for the device in
+question.
+
+Note: by default B<lspci(1)> will omit the domain (B<DDDD>) if it
+is zero and it is optional here also. You may specify the function
+(B<F>) as B<*> to indicate all functions.
+
+=item B<@VSLOT>
+
+Specifies the virtual slot where the guest will see this
+device. This is equivalent to the B<DD> which the guest sees. In a
+guest B<DDDD> and B<BB> are C<0000:00>.
+
+=item B<permissive=BOOLEAN>
+
+By default pciback only allows PV guests to write "known safe" values
+into PCI configuration space, likewise QEMU (both qemu-xen and
+qemu-xen-traditional) imposes the same constraint on HVM guests.
+However, many devices require writes to other areas of the configuration space
+in order to operate properly.  This option tells the backend (pciback or QEMU)
+to allow all writes to the PCI configuration space of this device by this
+domain.
+
+B<This option should be enabled with caution:> it gives the guest much
+more control over the device, which may have security or stability
+implications.  It is recommended to only enable this option for
+trusted VMs under administrator's control.
+
+=item B<msitranslate=BOOLEAN>
+
+Specifies that MSI-INTx translation should be turned on for the PCI
+device. When enabled, MSI-INTx translation will always enable MSI on
+the PCI device regardless of whether the guest uses INTx or MSI. Some
+device drivers, such as NVIDIA's, detect an inconsistency and do not
+function when this option is enabled. Therefore the default is false (0).
+
+=item B<seize=BOOLEAN>
+
+Tells B<xl> to automatically attempt to re-assign a device to
+pciback if it is not already assigned.
+
+B<WARNING:> If you set this option, B<xl> will gladly re-assign a critical
+system device, such as a network or a disk controller being used by
+dom0 without confirmation.  Please use with care.
+
+=item B<power_mgmt=BOOLEAN>
+
+B<(HVM only)> Specifies that the VM should be able to program the
+D0-D3hot power management states for the PCI device. The default is false (0).
+
+=item B<rdm_policy=STRING>
+
+B<(HVM/x86 only)> This is the same as the policy setting inside the B<rdm>
+option but just specific to a given device. The default is "relaxed".
+
+Note: this would override global B<rdm> option.
+
+=back
+
+=item B<pci_permissive=BOOLEAN>
+
+Changes the default value of B<permissive> for all PCI devices passed
+through to this VM. See B<permissive> above.
+
+=item B<pci_msitranslate=BOOLEAN>
+
+Changes the default value of B<msitranslate> for all PCI devices passed
+through to this VM. See B<msitranslate> above.
+
+=item B<pci_seize=BOOLEAN>
+
+Changes the default value of B<seize> for all PCI devices passed
+through to this VM. See B<seize> above.
+
+=item B<pci_power_mgmt=BOOLEAN>
+
+B<(HVM only)> Changes the default value of B<power_mgmt> for all PCI
+devices passed through to this VM. See B<power_mgmt>
+above.
+
+=item B<gfx_passthru=BOOLEAN|"STRING">
+
+Enable graphics device PCI passthrough. This option makes an assigned
+PCI graphics card become the primary graphics card in the VM. The QEMU
+emulated graphics adapter is disabled and the VNC console for the VM
+will not have any graphics output. All graphics output, including boot
+time QEMU BIOS messages from the VM, will go to the physical outputs
+of the passed through physical graphics card.
+
+The graphics card PCI device to pass through is chosen with the B<pci>
+option, in exactly the same way a normal Xen PCI device
+passthrough/assignment is done.  Note that B<gfx_passthru> does not do
+any kind of sharing of the GPU, so you can assign the GPU to only one
+single VM at a time.
+
+B<gfx_passthru> also enables various legacy VGA memory ranges, BARs, MMIOs,
+and ioports to be passed through to the VM, since those are required
+for correct operation of things like VGA BIOS, text mode, VBE, etc.
+
+Enabling the B<gfx_passthru> option also copies the physical graphics card
+video BIOS to the guest memory, and executes the VBIOS in the guest
+to initialize the graphics card.
+
+Most graphics adapters require vendor specific tweaks for properly
+working graphics passthrough. See the XenVGAPassthroughTestedAdapters
+L<http://wiki.xen.org/wiki/XenVGAPassthroughTestedAdapters> wiki page
+for graphics cards currently supported by B<gfx_passthru>.
+
+B<gfx_passthru> is currently supported both with the qemu-xen-traditional
+device-model and upstream qemu-xen device-model.
+
+When given as a boolean the B<gfx_passthru> option either disables graphics
+card passthrough or enables autodetection.
+
+When given as a string the B<gfx_passthru> option describes the type
+of device to enable. Note that this behavior is only supported with the
+upstream qemu-xen device-model. With qemu-xen-traditional IGD (Intel Graphics
+Device) is always assumed and options other than autodetect or explicit IGD
+will result in an error.
+
+Currently, valid values for the option are:
+
+=over 4
+
+=item B<0>
+
+Disables graphics device PCI passthrough.
+
+=item B<1>, B<"default">
+
+Enables graphics device PCI passthrough and autodetects the type of device
+which is being used.
+
+=item B<"igd">
+
+Enables graphics device PCI passthrough but forcing the type of device to
+Intel Graphics Device.
+
+=back
+
+Note that some graphics cards (AMD/ATI cards, for example) do not
+necessarily require the B<gfx_passthru> option, so you can use the normal Xen
+PCI passthrough to assign the graphics card as a secondary graphics
+card to the VM. The QEMU-emulated graphics card remains the primary
+graphics card, and VNC output is available from the QEMU-emulated
+primary adapter.
+
+More information about the Xen B<gfx_passthru> feature is available
+on the XenVGAPassthrough L<http://wiki.xen.org/wiki/XenVGAPassthrough>
+wiki page.
+
+=item B<rdm_mem_boundary=MBYTES>
+
+Number of megabytes to set for a boundary when checking for RDM conflicts.
+
+When RDM conflicts with RAM, RDM is probably scattered over the whole RAM
+space. Having multiple RDM entries would worsen this and lead to a complicated
+memory layout. Here we're trying to figure out a simple solution to
+avoid breaking the existing layout. When a conflict occurs,
+
+    #1. Above a predefined boundary
+        - move lowmem_end below the reserved region to solve the conflict;
+
+    #2. Below a predefined boundary
+        - Check if the policy is strict or relaxed.
+        A "strict" policy leads to a fail in libxl.
+        Note that when both policies are specified on a given region,
+        "strict" is always preferred.
+        The "relaxed" policy issues a warning message and also masks this
+        entry INVALID to indicate we shouldn't expose this entry to
+        hvmloader.
+
+The default value is 2048.
+
+=item B<dtdev=[ "DTDEV_PATH", "DTDEV_PATH", ...]>
+
+Specifies the host device tree nodes to passt hrough to this guest. Each
+DTDEV_PATH is an absolute path in the device tree.
+
+=item B<ioports=[ "IOPORT_RANGE", "IOPORT_RANGE", ...]>
+
+Allow the guest to access specific legacy I/O ports. Each B<IOPORT_RANGE>
+is given in hexadecimal format and may either be a range, e.g. C<2f8-2ff>
+(inclusive), or a single I/O port, e.g. C<2f8>.
+
+It is recommended to only use this option for trusted VMs under
+administrator's control.
+
+=item B<iomem=[ "IOMEM_START,NUM_PAGES[@GFN]", "IOMEM_START,NUM_PAGES[@GFN]", ...]>
+
+Allow auto-translated domains to access specific hardware I/O memory pages.
+
+B<IOMEM_START> is a physical page number. B<NUM_PAGES> is the number of pages,
+beginning with B<START_PAGE>, to allow access to. B<GFN> specifies the guest
+frame number where the mapping will start in the guest's address space. If
+B<GFN> is not specified, the mapping will be performed using B<IOMEM_START>
+as a start in the guest's address space, therefore performing a 1:1 mapping
+by default.
+All of these values must be given in hexadecimal format.
+
+Note that the IOMMU won't be updated with the mappings specified with this
+option. This option therefore should not be used to pass through any
+IOMMU-protected devices.
+
+It is recommended to only use this option for trusted VMs under
+administrator's control.
+
+=item B<irqs=[ NUMBER, NUMBER, ...]>
+
+Allow a guest to access specific physical IRQs.
+
+It is recommended to only use this option for trusted VMs under
+administrator's control.
+
+If vuart console is enabled then irq 32 is reserved for it. See
+L</vuart="uart"> to know how to enable vuart console.
+
+=item B<max_event_channels=N>
+
+Limit the guest to using at most N event channels (PV interrupts).
+Guests use hypervisor resources for each event channel they use.
+
+The default of 1023 should be sufficient for typical guests.  The
+maximum value depends on what the guest supports.  Guests supporting the
+FIFO-based event channel ABI support up to 131,071 event channels.
+Other guests are limited to 4095 (64-bit x86 and ARM) or 1023 (32-bit
+x86).
+
+=item B<vdispl=[ "VDISPL_SPEC_STRING", "VDISPL_SPEC_STRING", ...]>
+
+Specifies the virtual display devices to be provided to the guest.
+
+Each B<VDISPL_SPEC_STRING> is a comma-separated list of C<KEY=VALUE>
+settings, from the following list:
+
+=over 4
+
+=item C<backend=DOMAIN>
+
+Specifies the backend domain name or id. If not specified Domain-0 is used.
+
+=item C<be-alloc=BOOLEAN>
+
+Indicates if backend can be a buffer provider/allocator for this domain. See
+display protocol for details.
+
+=item C<connectors=CONNECTORS>
+
+Specifies virtual connectors for the device in following format
+<id>:<W>x<H>;<id>:<W>x<H>... where:
+
+=over 4
+
+=item C<id>
+
+String connector unique id. Space, comma symbols are not allowed.
+
+=item C<W>
+
+Connector width in pixels.
+
+=item C<H>
+
+Connector height in pixels.
+
+=back
+
+B<EXAMPLE>
+
+=over 4
+
+connectors=id0:1920x1080;id1:800x600;id2:640x480
+
+=back
+
+=back
+
+=item B<dm_restrict=BOOLEAN>
+
+Restrict the device model after startup,
+to limit the consequencese of security vulnerabilities in qemu.
+
+With this feature enabled,
+a compromise of the device model,
+via such a vulnerability,
+will not provide a privilege escalation attack on the whole system.
+
+This feature is a B<technology preview>.
+There are some significant limitations:
+
+=over 4
+
+=item
+
+This is not likely to work at all for PV guests
+nor guests using qdisk backends for their block devices.
+
+=item
+
+You must have a new enough qemu.
+In particular,
+if your qemu does not have the commit
+B<xen: restrict: use xentoolcore_restrict_all>
+the restriction request will be silently ineffective!
+
+=item
+
+The mechanisms used are not effective against
+denial of service problems.
+A compromised qemu can probably still impair
+or perhaps even prevent
+the proper functioning of the whole system,
+(at the very least, but not limited to,
+through resource exhaustion).
+
+=item
+
+It is not known whether the protection is
+effective when a domain is migrated.
+
+=item
+
+Some domain management functions do not work.
+For example, cdrom insert will fail.
+
+=item
+
+You should say C<vga="none">.
+Domains with stdvga graphics cards to not work.
+Domains with cirrus vga may seem to work.
+
+=item
+
+You must create user(s) for qemu to run as.
+
+Ideally, set aside a range of 32752 uids
+(from N to N+32751)
+and create a user
+whose name is B<xen-qemuuser-range-base>
+and whose uid is N
+and whose gid is a plain unprivileged gid.
+libxl will use one such user for each domid.
+
+Alternatively, either create
+B<xen-qemuuser-domid$domid>
+for every $domid from 1 to 32751 inclusive,
+or
+B<xen-qemuuser-shared>
+(in which case different guests will not
+be protected against each other).
+
+=item
+
+There are no countermeasures taken against reuse
+of the same unix user (uid)
+for subsequent domains,
+even if the B<xen-qemuuser-domid$domid> users are created.
+So a past domain with the same domid may be able to
+interferer with future domains.
+Possibly, even after a reboot.
+
+=item
+
+A compromised qemu will be able to read world-readable
+files in the dom0 operating system.
+
+=item
+
+Because of these limitations, this functionality,
+while it may enhance your security,
+should not be relied on.
+Any further limitations discovered in the current version
+will B<not> be handled via the Xen Project Security Process.
+
+=item
+
+In the future as we enhance this feature to improve the security,
+we may break backward compatibility.
+
+=back
+
+=item B<vsnd=[ VCARD_SPEC, VCARD_SPEC, ... ]>
+
+Specifies the virtual sound cards to be provided to the guest.
+Each B<VCARD_SPEC> is a list, which has a form of
+"[VSND_ITEM_SPEC, VSND_ITEM_SPEC, ... ]" (without the quotes).
+The virtual sound card has hierarchical structure.
+Every card has a set of PCM devices and streams, each could be individually
+configured.
+
+B<VSND_ITEM_SPEC> describes individual item parameters.
+B<VSND_ITEM_SPEC> is a string of comma separated item parameters
+headed by item identifier. Each item parameter is C<KEY=VALUE> pair:
+
+=over 4
+
+"identifier, param = value, ...".
+
+=back
+
+Identifier shall be one of following values: "CARD", "PCM", "STREAM".
+The child item treated as belonging to the previously defined parent item.
+
+All parameters are optional.
+
+There are group of parameters which are common for all items.
+This group can be defined at higher level of the hierarchy and be fully or
+partially re-used by the underlying layers. These parameters are:
+
+=over 4
+
+* number of channels (min/max)
+
+* supported sample rates
+
+* supported sample formats
+
+=back
+
+E.g. one can define these values for the whole card, device or stream.
+Every underlying layer in turn can re-define some or all of them to better
+fit its needs. For example, card may define number of channels to be
+in [1; 8] range, and some particular stream may be limited to [1; 2] only.
+The rule is that the underlying layer must be a subset of the upper layer
+range.
+
+I<COMMON parameters:>
+
+=over 4
+
+=over 4
+
+=item B<sample-rates=RATES>
+
+List of integer values separated by semicolon: sample-rates=8000;22050;44100
+
+=item B<sample-formats=FORMATS>
+
+List of string values separated by semicolon: sample-formats=s16_le;s8;u32_be
+
+Supported formats: s8, u8, s16_le, s16_be, u16_le, u16_be, s24_le, s24_be,
+u24_le, u24_be, s32_le, s32_be, u32_le, u32_be, float_le, float_be,
+float64_le, float64_be, iec958_subframe_le, iec958_subframe_be,
+mu_law, a_law, ima_adpcm, mpeg, gsm
+
+=item B<channels-min=NUMBER>
+
+The minimum amount of channels.
+
+=item B<channels-max=NUMBER>
+
+The maximum amount of channels.
+
+=item B<buffer-size=NUMBER>
+
+The maximum size in octets of the buffer to allocate per stream.
+
+=back
+
+=back
+
+I<CARD specification:>
+
+=over 4
+
+=over 4
+
+=item B<backend=domain-id>
+
+Specify the backend domain name or id, defaults to dom0.
+
+=item B<short-name=STRING>
+
+Short name of the virtual sound card.
+
+=item B<long-name=STRING>
+
+Long name of the virtual sound card.
+
+=back
+
+=back
+
+I<PCM specification:>
+
+=over 4
+
+=over 4
+
+=item B<name=STRING>
+
+Name of the PCM sound device within the virtual sound card.
+
+=back
+
+=back
+
+I<STREAM specification:>
+
+=over 4
+
+=over 4
+
+=item B<unique-id=STRING>
+
+Unique stream identifier.
+
+=item B<type=TYPE>
+
+Stream type: "p" - playback stream, "c" - capture stream.
+
+=back
+
+=back
+
+I<EXAMPLE:>
+
+    vsnd = [
+        ['CARD, short-name=Main, sample-formats=s16_le;s8;u32_be',
+            'PCM, name=Main',
+                'STREAM, id=0, type=p',
+                'STREAM, id=1, type=c, channels-max=2'
+        ],
+        ['CARD, short-name=Second',
+            'PCM, name=Second, buffer-size=1024',
+                'STREAM, id=2, type=p',
+                'STREAM, id=3, type=c'
+        ]
+    ]
+
+=item B<vkb=[ "VKB_SPEC_STRING", "VKB_SPEC_STRING", ...]>
+
+Specifies the virtual keyboard device to be provided to the guest.
+
+Each B<VKB_SPEC_STRING> is a comma-separated list of C<KEY=VALUE>
+settings from the following list:
+
+=over 4
+
+=item B<unique-id=STRING>
+
+Specifies the unique input device id.
+
+=item B<backend=domain-id>
+
+Specifies the backend domain name or id.
+
+=item B<backend-type=type>
+
+Specifies the backend type: qemu - for QEMU backend or linux - for Linux PV
+domain.
+
+=item B<feature-disable-keyboard=BOOLEAN>
+
+Indicates if keyboard device is disabled.
+
+=item B<feature-disable-pointer=BOOLEAN>
+
+Indicates if pointer device is disabled.
+
+=item B<feature-abs-pointer=BOOLEAN>
+
+Indicates if pointer device can return absolute coordinates.
+
+=item B<feature-raw-pointer=BOOLEAN>
+
+Indicates if pointer device can return raw (unscaled) absolute coordinates.
+
+=item B<feature-multi-touch=BOOLEAN>
+
+Indicates if input device supports multi touch.
+
+=item B<multi-touch-width=MULTI_TOUCH_WIDTH>
+
+Set maximum width for multi touch device.
+
+=item B<multi-touch-height=MULTI_TOUCH_HEIGHT>
+
+Set maximum height for multi touch device.
+
+=item B<multi-touch-num-contacts=MULTI_TOUCH_NUM_CONTACTS>
+
+Set maximum contacts number for multi touch device.
+
+=item B<width=WIDTH>
+
+Set maximum width for pointer device.
+
+=item B<height=HEIGHT>
+
+Set maximum height for pointer device.
+
+=back
+
+=back
+
+=head2 Paravirtualised (PV) Guest Specific Options
+
+The following options apply only to Paravirtual (PV) guests.
+
+=over 4
+
+=item B<bootloader="PROGRAM">
+
+Run C<PROGRAM> to find the kernel image and ramdisk to use.  Normally
+C<PROGRAM> would be C<pygrub>, which is an emulation of
+grub/grub2/syslinux. Either B<kernel> or B<bootloader> must be specified
+for PV guests.
+
+=item B<bootloader_args=[ "ARG", "ARG", ...]>
+
+Append B<ARG>s to the arguments to the B<bootloader>
+program. Alternatively if the argument is a simple string then it will
+be split into words at whitespace B<(this second option is deprecated)>.
+
+=item B<e820_host=BOOLEAN>
+
+Selects whether to expose the host e820 (memory map) to the guest via
+the virtual e820. When this option is false (0) the guest pseudo-physical
+address space consists of a single contiguous RAM region. When this
+option is specified the virtual e820 instead reflects the host e820
+and contains the same PCI holes. The total amount of RAM represented
+by the memory map is always the same, this option configures only how
+it is laid out.
+
+Exposing the host e820 to the guest gives the guest kernel the
+opportunity to set aside the required part of its pseudo-physical
+address space in order to provide address space to map passedthrough
+PCI devices. It is guest Operating System dependent whether this
+option is required, specifically it is required when using a mainline
+Linux ("pvops") kernel. This option defaults to true (1) if any PCI
+passthrough devices are configured and false (0) otherwise. If you do not
+configure any passthrough devices at domain creation time but expect
+to hotplug devices later then you should set this option. Conversely
+if your particular guest kernel does not require this behaviour then
+it is safe to allow this to be enabled but you may wish to disable it
+anyway.
+
+=back
+
+=head2 Fully-virtualised (HVM) Guest Specific Options
+
+The following options apply only to Fully-virtualised (HVM) guests.
+
+=head3 Boot Device
+
+=over 4
+
+=item B<boot="STRING">
+
+Specifies the emulated virtual device to boot from.
+
+Possible values are:
+
+=over 4
+
+=item B<c>
+
+Hard disk.
+
+=item B<d>
+
+CD-ROM.
+
+=item B<n>
+
+Network / PXE.
+
+=back
+
+B<Note:> multiple options can be given and will be attempted in the order they
+are given, e.g. to boot from CD-ROM but fall back to the hard disk you can
+specify it as B<dc>.
+
+The default is B<cd>, meaning try booting from the hard disk first, but fall
+back to the CD-ROM.
+
+
+=back
+
+=head3 Emulated disk controller type
+
+=over 4
+
+=item B<hdtype=STRING>
+
+Specifies the hard disk type.
+
+Possible values are:
+
+=over 4
+
+=item B<ide>
+
+If thise mode is specified B<xl> adds an emulated IDE controller, which is
+suitable even for older operation systems.
+
+=item B<ahci>
+
+If this mode is specified, B<xl> adds an ich9 disk controller in AHCI mode and
+uses it with upstream QEMU to emulate disks instead of IDE. It decreases boot
+time but may not be supported by default in older operating systems, e.g.
+Windows XP.
+
+=back
+
+The default is B<ide>.
+
+=back
+
+=head3 Paging
+
+The following options control the mechanisms used to virtualise guest
+memory.  The defaults are selected to give the best results for the
+common cases so you should normally leave these options
+unspecified.
+
+=over 4
+
+=item B<hap=BOOLEAN>
+
+Turns "hardware assisted paging" (the use of the hardware nested page
+table feature) on or off.  This feature is called EPT (Extended Page
+Tables) by Intel and NPT (Nested Page Tables) or RVI (Rapid
+Virtualisation Indexing) by AMD. If turned
+off, Xen will run the guest in "shadow page table" mode where the
+guest's page table updates and/or TLB flushes etc. will be emulated.
+Use of HAP is the default when available.
+
+=item B<oos=BOOLEAN>
+
+Turns "out of sync pagetables" on or off.  When running in shadow page
+table mode, the guest's page table updates may be deferred as
+specified in the Intel/AMD architecture manuals.  However, this may
+expose unexpected bugs in the guest, or find bugs in Xen, so it is
+possible to disable this feature.  Use of out of sync page tables,
+when Xen thinks it appropriate, is the default.
+
+=item B<shadow_memory=MBYTES>
+
+Number of megabytes to set aside for shadowing guest pagetable pages
+(effectively acting as a cache of translated pages) or to use for HAP
+state. By default this is 1MB per guest vCPU plus 8KB per MB of guest
+RAM. You should not normally need to adjust this value. However, if you
+are not using hardware assisted paging (i.e. you are using shadow
+mode) and your guest workload consists of a very large number of
+similar processes then increasing this value may improve performance.
+
+=back
+
+=head3 Processor and Platform Features
+
+The following options allow various processor and platform level
+features to be hidden or exposed from the guest's point of view. This
+can be useful when running older guest Operating Systems which may
+misbehave when faced with more modern features. In general, you should
+accept the defaults for these options wherever possible.
+
+=over 4
+
+=item B<bios="STRING">
+
+Select the virtual firmware that is exposed to the guest.
+By default, a guess is made based on the device model, but sometimes
+it may be useful to request a different one, like UEFI.
+
+=over 4
+
+=item B<rombios>
+
+Loads ROMBIOS, a 16-bit x86 compatible BIOS. This is used by default
+when B<device_model_version=qemu-xen-traditional>. This is the only BIOS
+option supported when B<device_model_version=qemu-xen-traditional>. This is
+the BIOS used by all previous Xen versions.
+
+=item B<seabios>
+
+Loads SeaBIOS, a 16-bit x86 compatible BIOS. This is used by default
+with device_model_version=qemu-xen.
+
+=item B<ovmf>
+
+Loads OVMF, a standard UEFI firmware by Tianocore project.
+Requires device_model_version=qemu-xen.
+
+=back
+
+=item B<bios_path_override="PATH">
+
+Override the path to the blob to be used as BIOS. The blob provided here MUST
+be consistent with the B<bios=> which you have specified. You should not
+normally need to specify this option.
+
+This option does not have any effect if using B<bios="rombios"> or
+B<device_model_version="qemu-xen-traditional">.
+
+=item B<pae=BOOLEAN>
+
+Hide or expose the IA32 Physical Address Extensions. These extensions
+make it possible for a 32 bit guest Operating System to access more
+than 4GB of RAM. Enabling PAE also enabled other features such as
+NX. PAE is required if you wish to run a 64-bit guest Operating
+System. In general, you should leave this enabled and allow the guest
+Operating System to choose whether or not to use PAE. (X86 only)
+
+=item B<acpi=BOOLEAN>
+
+Expose ACPI (Advanced Configuration and Power Interface) tables from
+the virtual firmware to the guest Operating System. ACPI is required
+by most modern guest Operating Systems. This option is enabled by
+default and usually you should omit it. However, it may be necessary to
+disable ACPI for compatibility with some guest Operating Systems.
+This option is true for x86 while it's false for ARM by default.
+
+=item B<acpi_s3=BOOLEAN>
+
+Include the S3 (suspend-to-ram) power state in the virtual firmware
+ACPI table. True (1) by default.
+
+=item B<acpi_s4=BOOLEAN>
+
+Include S4 (suspend-to-disk) power state in the virtual firmware ACPI
+table. True (1) by default.
+
+=item B<acpi_laptop_slate=BOOLEAN>
+
+Include the Windows laptop/slate mode switch device in the virtual
+firmware ACPI table. False (0) by default.
+
+=item B<apic=BOOLEAN>
+
+B<(x86 only)> Include information regarding APIC (Advanced Programmable Interrupt
+Controller) in the firmware/BIOS tables on a single processor
+guest. This causes the MP (multiprocessor) and PIR (PCI Interrupt
+Routing) tables to be exported by the virtual firmware. This option
+has no effect on a guest with multiple virtual CPUs as they must
+always include these tables. This option is enabled by default and you
+should usually omit it but it may be necessary to disable these
+firmware tables when using certain older guest Operating
+Systems. These tables have been superseded by newer constructs within
+the ACPI tables.
+
+=item B<nx=BOOLEAN>
+
+B<(x86 only)> Hides or exposes the No-eXecute capability. This allows a guest
+Operating System to map pages in such a way that they cannot be executed which
+can enhance security. This options requires that PAE also be
+enabled.
+
+=item B<hpet=BOOLEAN>
+
+B<(x86 only)> Enables or disables HPET (High Precision Event Timer). This
+option is enabled by default and you should usually omit it.
+It may be necessary to disable the HPET in order to improve compatibility with
+guest Operating Systems.
+
+=item B<altp2m="MODE">
+
+B<(x86 only)> Specifies the access mode to the alternate-p2m capability.
+Alternate-p2m allows a guest to manage multiple p2m guest physical "memory
+views" (as opposed to a single p2m).
+You may want this option if you want to access-control/isolate
+access to specific guest physical memory pages accessed by the guest, e.g. for
+domain memory introspection or for isolation/access-control of memory between
+components within a single guest domain. This option is disabled by default.
+
+The valid values are as follows:
+
+=over 4
+
+=item B<disabled>
+
+Altp2m is disabled for the domain (default).
+
+=item B<mixed>
+
+The mixed mode allows access to the altp2m interface for both in-guest
+and external tools as well.
+
+=item B<external>
+
+Enables access to the alternate-p2m capability by external privileged tools.
+
+=item B<limited>
+
+Enables limited access to the alternate-p2m capability,
+ie. giving the guest access only to enable/disable the VMFUNC and #VE features.
+
+=back
+
+=item B<altp2mhvm=BOOLEAN>
+
+Enables or disables HVM guest access to alternate-p2m capability.
+Alternate-p2m allows a guest to manage multiple p2m guest physical
+"memory views" (as opposed to a single p2m). This option is
+disabled by default and is available only to HVM domains.
+You may want this option if you want to access-control/isolate
+access to specific guest physical memory pages accessed by
+the guest, e.g. for HVM domain memory introspection or
+for isolation/access-control of memory between components within
+a single guest HVM domain. B<This option is deprecated, use the option
+"altp2m" instead.>
+
+B<Note>: While the option "altp2mhvm" is deprecated, legacy applications for
+x86 systems will continue to work using it.
+
+=item B<nestedhvm=BOOLEAN>
+
+Enable or disables guest access to hardware virtualisation features,
+e.g. it allows a guest Operating System to also function as a
+hypervisor. You may want this
+option if you want to run another hypervisor (including another copy
+of Xen) within a Xen guest or to support a guest Operating System
+which uses hardware virtualisation extensions (e.g. Windows XP
+compatibility mode on more modern Windows OS).
+This option is disabled by default.
+
+=item B<cpuid="LIBXL_STRING"> or B<cpuid=[ "XEND_STRING", "XEND_STRING" ]>
+
+Configure the value returned when a guest executes the CPUID instruction.
+Two versions of config syntax are recognized: libxl and xend.
+
+The libxl syntax is a comma separated list of key=value pairs, preceded by the
+word "host". A few keys take a numerical value, all others take a single
+character which describes what to do with the feature bit.
+
+Possible values for a single feature bit:
+  '1' -> force the corresponding bit to 1
+  '0' -> force to 0
+  'x' -> Get a safe value (pass through and mask with the default policy)
+  'k' -> pass through the host bit value
+  's' -> as 'k' but preserve across save/restore and migration (not implemented)
+
+Note: when specifying B<cpuid> for hypervisor leaves (0x4000xxxx major group)
+only the lowest 8 bits of leaf's 0x4000xx00 EAX register are processed, the
+rest are ignored (these 8 bits signify maximum number of hypervisor leaves).
+
+List of keys taking a value:
+apicidsize brandid clflush family localapicid maxleaf maxhvleaf model nc
+proccount procpkg stepping
+
+List of keys taking a character:
+3dnow 3dnowext 3dnowprefetch abm acpi adx aes altmovcr8 apic arat avx avx2
+avx512-4fmaps avx512-4vnniw avx512bw avx512cd avx512dq avx512er avx512f
+avx512ifma avx512pf avx512vbmi avx512vl bmi1 bmi2 clflushopt clfsh clwb cmov
+cmplegacy cmpxchg16 cmpxchg8 cmt cntxid dca de ds dscpl dtes64 erms est extapic
+f16c ffxsr fma fma4 fpu fsgsbase fxsr hle htt hypervisor ia64 ibs invpcid
+invtsc lahfsahf lm lwp mca mce misalignsse mmx mmxext monitor movbe mpx msr
+mtrr nodeid nx ospke osvw osxsave pae page1gb pat pbe pcid pclmulqdq pdcm
+perfctr_core perfctr_nb pge pku popcnt pse pse36 psn rdrand rdseed rdtscp rtm
+sha skinit smap smep smx ss sse sse2 sse3 sse4.1 sse4.2 sse4_1 sse4_2 sse4a
+ssse3 svm svm_decode svm_lbrv svm_npt svm_nrips svm_pausefilt svm_tscrate
+svm_vmcbclean syscall sysenter tbm tm tm2 topoext tsc tsc-deadline tsc_adjust
+umip vme vmx wdt x2apic xop xsave xtpr
+
+
+The xend syntax is a list of values in the form of
+'leafnum:register=bitstring,register=bitstring'
+  "leafnum" is the requested function,
+  "register" is the response register to modify
+  "bitstring" represents all bits in the register, its length must be 32 chars.
+  Each successive character represent a lesser-significant bit, possible values
+  are listed above in the libxl section.
+
+Example to hide two features from the guest: 'tm', which is bit #29 in EDX, and
+'pni' (SSE3), which is bit #0 in ECX:
+
+xend: [ "1:ecx=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0,edx=xx0xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ]
+
+libxl: "host,tm=0,sse3=0"
+
+More info about the CPUID instruction can be found in the processor manuals,
+and on Wikipedia: L<http://en.wikipedia.org/wiki/CPUID>
+
+=item B<acpi_firmware="STRING">
+
+Specifies a path to a file that contains extra ACPI firmware tables to pass into
+a guest. The file can contain several tables in their binary AML form
+concatenated together. Each table self describes its length so no additional
+information is needed. These tables will be added to the ACPI table set in the
+guest. Note that existing tables cannot be overridden by this feature. For
+example, this cannot be used to override tables like DSDT, FADT, etc.
+
+=item B<smbios_firmware="STRING">
+
+Specifies a path to a file that contains extra SMBIOS firmware structures to
+pass into a guest. The file can contain a set of DMTF predefined structures
+which will override the internal defaults. Not all predefined structures can be
+overridden,
+only the following types: 0, 1, 2, 3, 11, 22, 39. The file can also contain any
+number of vendor defined SMBIOS structures (type 128 - 255). Since SMBIOS
+structures do not present their overall size, each entry in the file must be
+preceded by a 32b integer indicating the size of the following structure.
+
+=item B<ms_vm_genid="OPTION">
+
+Provide a VM generation ID to the guest.
+
+The VM generation ID is a 128-bit random number that a guest may use
+to determine if the guest has been restored from an earlier snapshot
+or cloned.
+
+This is required for Microsoft Windows Server 2012 (and later) domain
+controllers.
+
+Valid options are:
+
+=over 4
+
+=item B<generate>
+
+Generate a random VM generation ID every time the domain is created or
+restored.
+
+=item B<none>
+
+Do not provide a VM generation ID.
+
+=back
+
+See also "Virtual Machine Generation ID" by Microsoft:
+L<http://www.microsoft.com/en-us/download/details.aspx?id=30707>
+
+=back 
+
+=head3 Guest Virtual Time Controls
+
+=over 4
+
+=item B<tsc_mode="MODE">
+
+B<(x86 only)> Specifies how the TSC (Time Stamp Counter) should be provided to
+the guest. B<Specifying this option as a number is deprecated.>
+
+Options are:
+
+=over 4
+
+=item B<default>
+
+Guest rdtsc/p is executed natively when monotonicity can be guaranteed
+and emulated otherwise (with frequency scaled if necessary).
+
+If a HVM container in B<default> TSC mode is created on a host that
+provides constant host TSC, its guest TSC frequency will be the same
+as the host. If it is later migrated to another host that provide
+constant host TSC and supports Intel VMX TSC scaling/AMD SVM TSC
+ratio, its guest TSC frequency will be the same before and after
+migration, and guest rdtsc/p will be executed natively after migration as well
+
+=item B<always_emulate>
+
+Guest rdtsc/p is always emulated and the virtual TSC will appear to increment
+(kernel and user) at a fixed 1GHz rate, regardless of the pCPU HZ rate or
+power state. Although there is an overhead associated with emulation,
+this will NOT affect underlying CPU performance.
+
+=item B<native>
+
+Guest rdtsc/p is always executed natively (no monotonicity/frequency
+guarantees). Guest rdtsc/p is emulated at native frequency if unsupported
+by h/w, else executed natively.
+
+=item B<native_paravirt>
+
+This mode has been removed.
+
+=back
+
+Please see B<xen-tscmode(7)> for more information on this option.
+
+=item B<localtime=BOOLEAN>
+
+Set the real time clock to local time or to UTC. False (0) by default,
+i.e. set to UTC.
+
+=item B<rtc_timeoffset=SECONDS>
+
+Set the real time clock offset in seconds. No offset (0) by default.
+
+=item B<vpt_align=BOOLEAN>
+
+Specifies that periodic Virtual Platform Timers should be aligned to
+reduce guest interrupts. Enabling this option can reduce power
+consumption, especially when a guest uses a high timer interrupt
+frequency (HZ) values. The default is true (1).
+
+=item B<timer_mode="MODE">
+
+Specifies the mode for Virtual Timers. The valid values are as follows:
+
+=over 4
+
+=item B<delay_for_missed_ticks>
+
+Delay for missed ticks. Do not advance a vCPU's time beyond the
+correct delivery time for interrupts that have been missed due to
+preemption. Deliver missed interrupts when the vCPU is rescheduled and
+advance the vCPU's virtual time stepwise for each one.
+
+=item B<no_delay_for_missed_ticks>
+
+No delay for missed ticks. As above, missed interrupts are delivered,
+but guest time always tracks wallclock (i.e., real) time while doing
+so. This is the default.
+
+=item B<no_missed_ticks_pending>
+
+No missed interrupts are held pending. Instead, to ensure ticks are
+delivered at some non-zero rate, if we detect missed ticks then the
+internal tick alarm is not disabled if the vCPU is preempted during
+the next tick period.
+
+=item B<one_missed_tick_pending>
+
+One missed tick pending. Missed interrupts are collapsed
+together and delivered as one 'late tick'.  Guest time always tracks
+wallclock (i.e., real) time.
+
+=back
+
+=back
+
+=head3 Memory layout
+
+=over 4
+
+=item B<mmio_hole=MBYTES>
+
+Specifies the size the MMIO hole below 4GiB will be.  Only valid for
+B<device_model_version="qemu-xen">.
+
+Cannot be smaller than 256. Cannot be larger than 3840.
+
+Known good large value is 3072.
+
+=back
+
+=head3 Support for Paravirtualisation of HVM Guests
+
+The following options allow Paravirtualised features (such as devices)
+to be exposed to the guest Operating System in an HVM guest.
+Utilising these features requires specific guest support but when
+available they will result in improved performance.
+
+=over 4
+
+=item B<xen_platform_pci=BOOLEAN>
+
+Enable or disable the Xen platform PCI device.  The presence of this
+virtual device enables a guest Operating System (subject to the
+availability of suitable drivers) to make use of paravirtualisation
+features such as disk and network devices etc. Enabling these drivers
+improves performance and is strongly recommended when available. PV
+drivers are available for various Operating Systems including HVM
+Linux L<http://wiki.xen.org/wiki/XenLinuxPVonHVMdrivers> and Microsoft
+Windows L<http://wiki.xen.org/wiki/XenWindowsGplPv>.
+
+Setting B<xen_platform_pci=0> with the default device_model "qemu-xen"
+requires at least QEMU 1.6.
+
+=item B<viridian=[ "GROUP", "GROUP", ...]> or B<viridian=BOOLEAN>
+
+The groups of Microsoft Hyper-V (AKA viridian) compatible enlightenments
+exposed to the guest. The following groups of enlightenments may be
+specified:
+
+=over 4
+
+=item B<base>
+
+This group incorporates the Hypercall MSRs, Virtual processor index MSR,
+and APIC access MSRs. These enlightenments can improve performance of
+Windows Vista and Windows Server 2008 onwards and setting this option
+for such guests is strongly recommended.
+This group is also a pre-requisite for all others. If it is disabled
+then it is an error to attempt to enable any other group.
+
+=item B<freq>
+
+This group incorporates the TSC and APIC frequency MSRs. These
+enlightenments can improve performance of Windows 7 and Windows
+Server 2008 R2 onwards.
+
+=item B<time_ref_count>
+
+This group incorporates Partition Time Reference Counter MSR. This
+enlightenment can improve performance of Windows 8 and Windows
+Server 2012 onwards.
+
+=item B<reference_tsc>
+
+This set incorporates the Partition Reference TSC MSR. This
+enlightenment can improve performance of Windows 7 and Windows
+Server 2008 R2 onwards.
+
+=item B<hcall_remote_tlb_flush>
+
+This set incorporates use of hypercalls for remote TLB flushing.
+This enlightenment may improve performance of Windows guests running
+on hosts with higher levels of (physical) CPU contention.
+
+=item B<apic_assist>
+
+This set incorporates use of the APIC assist page to avoid EOI of
+the local APIC.
+This enlightenment may improve performance of guests that make use of
+per-vCPU event channel upcall vectors.
+Note that this enlightenment will have no effect if the guest is
+using APICv posted interrupts.
+
+=item B<crash_ctl>
+
+This group incorporates the crash control MSRs. These enlightenments
+allow Windows to write crash information such that it can be logged
+by Xen.
+
+=item B<defaults>
+
+This is a special value that enables the default set of groups, which
+is currently the B<base>, B<freq>, B<time_ref_count>, B<apic_assist>
+and B<crash_ctl> groups.
+
+=item B<all>
+
+This is a special value that enables all available groups.
+
+=back
+
+Groups can be disabled by prefixing the name with '!'. So, for example,
+to enable all groups except B<freq>, specify:
+
+=over 4
+
+B<viridian=[ "all", "!freq" ]>
+
+=back
+
+For details of the enlightenments see the latest version of Microsoft's
+Hypervisor Top-Level Functional Specification.
+
+The enlightenments should be harmless for other versions of Windows
+(although they will not give any benefit) and the majority of other
+non-Windows OSes.
+However it is known that they are incompatible with some other Operating
+Systems and in some circumstance can prevent Xen's own paravirtualisation
+interfaces for HVM guests from being used.
+
+The viridian option can be specified as a boolean. A value of true (1)
+is equivalent to the list [ "defaults" ], and a value of false (0) is
+equivalent to an empty list.
+
+=back
+
+=head3 Emulated VGA Graphics Device
+
+The following options control the features of the emulated graphics
+device.  Many of these options behave similarly to the equivalent key
+in the B<VFB_SPEC_STRING> for configuring virtual frame buffer devices
+(see above).
+
+=over 4
+
+=item B<videoram=MBYTES>
+
+Sets the amount of RAM which the emulated video card will contain,
+which in turn limits the resolutions and bit depths which will be
+available.
+
+When using the qemu-xen-traditional device-model, the default as well as
+minimum amount of video RAM for stdvga is 8 MB, which is sufficient for e.g.
+1600x1200 at 32bpp. For the upstream qemu-xen device-model, the default and
+minimum is 16 MB.
+
+When using the emulated Cirrus graphics card (B<vga="cirrus">) and the
+qemu-xen-traditional device-model, the amount of video RAM is fixed at 4 MB,
+which is sufficient for 1024x768 at 32 bpp. For the upstream qemu-xen
+device-model, the default and minimum is 8 MB.
+
+For QXL vga, both the default and minimal are 128MB.
+If B<videoram> is set less than 128MB, an error will be triggered.
+
+=item B<stdvga=BOOLEAN>
+
+Speficies a standard VGA card with VBE (VESA BIOS Extensions) as the
+emulated graphics device. If your guest supports VBE 2.0 or
+later (e.g. Windows XP onwards) then you should enable this.
+stdvga supports more video ram and bigger resolutions than Cirrus.
+The default is false (0) which means to emulate
+a Cirrus Logic GD5446 VGA card.
+B<This option is deprecated, use vga="stdvga" instead>.
+
+=item B<vga="STRING">
+
+Selects the emulated video card.
+Options are: B<none>, B<stdvga>, B<cirrus> and B<qxl>.
+The default is B<cirrus>.
+
+In general, QXL should work with the Spice remote display protocol
+for acceleration, and a QXL driver is necessary in the guest in that case.
+QXL can also work with the VNC protocol, but it will be like a standard
+VGA card without acceleration.
+
+=item B<vnc=BOOLEAN>
+
+Allow access to the display via the VNC protocol.  This enables the
+other VNC-related settings.  The default is (1) enabled.
+
+=item B<vnclisten="ADDRESS[:DISPLAYNUM]">
+
+Specifies the IP address and, optionally, the VNC display number to use.
+
+=item B<vncdisplay=DISPLAYNUM>
+
+Specifies the VNC display number to use. The actual TCP port number
+will be DISPLAYNUM+5900.
+
+=item B<vncunused=BOOLEAN>
+
+Requests that the VNC display setup searches for a free TCP port to use.
+The actual display used can be accessed with B<xl vncviewer>.
+
+=item B<vncpasswd="PASSWORD">
+
+Specifies the password for the VNC server. If the password is set to an
+empty string, authentication on the VNC server will be disabled
+allowing any user to connect.
+
+=item B<keymap="LANG">
+
+Configure the keymap to use for the keyboard associated with this
+display. If the input method does not easily support raw keycodes
+(e.g. this is often the case when using VNC) then this allows us to
+correctly map the input keys into keycodes seen by the guest. The
+specific values which are accepted are defined by the version of the
+device-model which you are using. See B<Keymaps> below or consult the
+B<qemu(1)> manpage. The default is B<en-us>.
+
+=item B<sdl=BOOLEAN>
+
+Specifies that the display should be presented via an X window (using
+Simple DirectMedia Layer). The default is (0) not enabled.
+
+=item B<opengl=BOOLEAN>
+
+Enable OpenGL acceleration of the SDL display. Only effects machines
+using B<device_model_version="qemu-xen-traditional"> and only if the
+device-model was compiled with OpenGL support. Default is (0) false.
+
+=item B<nographic=BOOLEAN>
+
+Enable or disable the virtual graphics device.  The default is to
+provide a VGA graphics device but this option can be used to disable
+it.
+
+=back
+
+=head3 Spice Graphics Support
+
+The following options control the features of SPICE.
+
+=over 4
+
+=item B<spice=BOOLEAN>
+
+Allow access to the display via the SPICE protocol.  This enables the
+other SPICE-related settings.
+
+=item B<spicehost="ADDRESS">
+
+Specifies the interface address to listen on if given, otherwise any
+interface.
+
+=item B<spiceport=NUMBER>
+
+Specifies the port to listen on by the SPICE server if SPICE is
+enabled.
+
+=item B<spicetls_port=NUMBER>
+
+Specifies the secure port to listen on by the SPICE server if SPICE
+is enabled. At least one of B<spiceport> or B<spicetls_port> must be
+given if SPICE is enabled.
+
+B<Note:> the options depending on B<spicetls_port>
+have not been supported.
+
+=item B<spicedisable_ticketing=BOOLEAN>
+
+Enable clients to connect without specifying a password. When disabled,
+B<spicepasswd> must be set. The default is (0) false.
+
+=item B<spicepasswd="PASSWORD">
+
+Specify the password which is used by clients for establishing a connection.
+
+=item B<spiceagent_mouse=BOOLEAN>
+
+Whether SPICE agent is used for client mouse mode. The default is (1) true.
+
+=item B<spicevdagent=BOOLEAN>
+
+Enables the SPICE vdagent. The SPICE vdagent is an optional component for
+enhancing user experience and performing guest-oriented management
+tasks. Its features include: client mouse mode (no need to grab the mouse
+by the client, no mouse lag), automatic adjustment of screen resolution,
+copy and paste (text and image) between the client and the guest. It also
+requires the vdagent service installed on the guest OS to work.
+The default is (0) disabled.
+
+=item B<spice_clipboard_sharing=BOOLEAN>
+
+Enables SPICE clipboard sharing (copy/paste). It requires that
+B<spicevdagent> is enabled. The default is (0) false.
+
+=item B<spiceusbredirection=NUMBER>
+
+Enables SPICE USB redirection. Creates a NUMBER of USB redirection channels
+for redirecting up to 4 USB devices from the SPICE client to the guest's QEMU.
+It requires an USB controller and, if not defined, it will automatically add
+an USB2.0 controller. The default is (0) disabled.
+
+=item B<spice_image_compression="COMPRESSION">
+
+Specifies what image compression is to be used by SPICE (if given), otherwise
+the QEMU default will be used. Please see the documentation of your QEMU
+version for more details.
+
+Available options are: B<auto_glz, auto_lz, quic, glz, lz, off>.
+
+=item B<spice_streaming_video="VIDEO">
+
+Specifies what streaming video setting is to be used by SPICE (if given),
+otherwise the QEMU default will be used.
+
+Available options are: B<filter, all, off>.
+
+=back
+
+=head3 Miscellaneous Emulated Hardware
+
+=over 4
+
+=item B<serial=[ "DEVICE", "DEVICE", ...]>
+
+Redirect virtual serial ports to B<DEVICE>s. Please see the
+B<-serial> option in the B<qemu(1)> manpage for details of the valid
+B<DEVICE> options. Default is B<vc> when in graphical mode and
+B<stdio> if B<nographics=1> is used.
+
+The form serial=DEVICE is also accepted for backwards compatibility.
+
+=item B<soundhw="DEVICE">
+
+Select the virtual sound card to expose to the guest. The valid
+devices are defined by the device model configuration, please see the
+B<qemu(1)> manpage for details. The default is not to export any sound
+device.
+
+=item B<usb=BOOLEAN>
+
+Enables or disables an emulated USB bus in the guest.
+
+=item B<usbversion=NUMBER>
+
+Specifies the type of an emulated USB bus in the guest, values 1 for USB1.1,
+2 for USB2.0 and 3 for USB3.0. It is available only with an upstream QEMU.
+Due to implementation limitations this is not compatible with the B<usb>
+and B<usbdevice> parameters.
+Default is (0) no USB controller defined.
+
+=item B<usbdevice=[ "DEVICE", "DEVICE", ...]>
+
+Adds B<DEVICE>s to the emulated USB bus. The USB bus must also be
+enabled using B<usb=1>. The most common use for this option is
+B<usbdevice=['tablet']> which adds a pointer device using absolute
+coordinates. Such devices function better than relative coordinate
+devices (such as a standard mouse) since many methods of exporting
+guest graphics (such as VNC) work better in this mode. Note that this
+is independent of the actual pointer device you are using on the
+host/client side.
+
+Host devices can also be passed through in this way, by specifying
+host:USBID, where USBID is of the form xxxx:yyyy.  The USBID can
+typically be found by using B<lsusb(1)> or B<usb-devices(1)>.
+
+If you wish to use the "host:bus.addr" format, remove any leading '0' from the
+bus and addr. For example, for the USB device on bus 008 dev 002, you should
+write "host:8.2".
+
+The form usbdevice=DEVICE is also accepted for backwards compatibility.
+
+More valid options can be found in the "usbdevice" section of the QEMU
+documentation.
+
+=item B<vendor_device="VENDOR_DEVICE">
+
+Selects which variant of the QEMU xen-pvdevice should be used for this
+guest. Valid values are:
+
+=over 4
+
+=item B<none>
+
+The xen-pvdevice should be omitted. This is the default.
+
+=item B<xenserver>
+
+The xenserver variant of the xen-pvdevice (device-id=C000) will be
+specified, enabling the use of XenServer PV drivers in the guest.
+
+=back
+
+This parameter only takes effect when device_model_version=qemu-xen.
+See B<xen-pci-device-reservations(7)> for more information.
+
+=back
+
+=head2 PVH Guest Specific Options
+
+=over 4
+
+=item B<nestedhvm=BOOLEAN>
+
+Enable or disables guest access to hardware virtualisation features,
+e.g. it allows a guest Operating System to also function as a hypervisor.
+You may want this option if you want to run another hypervisor (including
+another copy of Xen) within a Xen guest or to support a guest Operating
+System which uses hardware virtualisation extensions (e.g. Windows XP
+compatibility mode on more modern Windows OS).
+
+This option is disabled by default.
+
+=item B<bootloader="PROGRAM">
+
+Run C<PROGRAM> to find the kernel image and ramdisk to use.  Normally
+C<PROGRAM> would be C<pygrub>, which is an emulation of
+grub/grub2/syslinux. Either B<kernel> or B<bootloader> must be specified
+for PV guests.
+
+=item B<bootloader_args=[ "ARG", "ARG", ...]>
+
+Append B<ARG>s to the arguments to the B<bootloader>
+program. Alternatively if the argument is a simple string then it will
+be split into words at whitespace B<(this second option is deprecated)>.
+
+=item B<timer_mode="MODE">
+
+Specifies the mode for Virtual Timers. The valid values are as follows:
+
+=over 4
+
+=item B<delay_for_missed_ticks>
+
+Delay for missed ticks. Do not advance a vCPU's time beyond the
+correct delivery time for interrupts that have been missed due to
+preemption. Deliver missed interrupts when the vCPU is rescheduled and
+advance the vCPU's virtual time stepwise for each one.
+
+=item B<no_delay_for_missed_ticks>
+
+No delay for missed ticks. As above, missed interrupts are delivered,
+but guest time always tracks wallclock (i.e., real) time while doing
+so. This is the default.
+
+=item B<no_missed_ticks_pending>
+
+No missed interrupts are held pending. Instead, to ensure ticks are
+delivered at some non-zero rate, if we detect missed ticks then the
+internal tick alarm is not disabled if the vCPU is preempted during
+the next tick period.
+
+=item B<one_missed_tick_pending>
+
+One missed tick pending. Missed interrupts are collapsed
+together and delivered as one 'late tick'.  Guest time always tracks
+wallclock (i.e., real) time.
+
+=back
+
+=back
+
+=head3 Paging
+
+The following options control the mechanisms used to virtualise guest
+memory.  The defaults are selected to give the best results for the
+common cases so you should normally leave these options
+unspecified.
+
+=over 4
+
+=item B<hap=BOOLEAN>
+
+Turns "hardware assisted paging" (the use of the hardware nested page
+table feature) on or off.  This feature is called EPT (Extended Page
+Tables) by Intel and NPT (Nested Page Tables) or RVI (Rapid
+Virtualisation Indexing) by AMD. If turned
+off, Xen will run the guest in "shadow page table" mode where the
+guest's page table updates and/or TLB flushes etc. will be emulated.
+Use of HAP is the default when available.
+
+=item B<oos=BOOLEAN>
+
+Turns "out of sync pagetables" on or off.  When running in shadow page
+table mode, the guest's page table updates may be deferred as
+specified in the Intel/AMD architecture manuals.  However, this may
+expose unexpected bugs in the guest, or find bugs in Xen, so it is
+possible to disable this feature.  Use of out of sync page tables,
+when Xen thinks it appropriate, is the default.
+
+=item B<shadow_memory=MBYTES>
+
+Number of megabytes to set aside for shadowing guest pagetable pages
+(effectively acting as a cache of translated pages) or to use for HAP
+state. By default this is 1MB per guest vCPU plus 8KB per MB of guest
+RAM. You should not normally need to adjust this value. However, if you
+are not using hardware assisted paging (i.e. you are using shadow
+mode) and your guest workload consists of a very large number of
+similar processes then increasing this value may improve performance.
+
+=back
+
+=head2 Device-Model Options
+
+The following options control the selection of the device-model.  This
+is the component which provides emulation of the virtual devices to an
+HVM guest.  For a PV guest a device-model is sometimes used to provide
+backends for certain PV devices (most usually a virtual framebuffer
+device).
+
+=over 4
+
+=item B<device_model_version="DEVICE-MODEL">
+
+Selects which variant of the device-model should be used for this
+guest.
+
+Valid values are:
+
+=over 4
+
+=item B<qemu-xen>
+
+Use the device-model merged into the upstream QEMU project.
+This device-model is the default for Linux dom0.
+
+=item B<qemu-xen-traditional>
+
+Use the device-model based upon the historical Xen fork of QEMU.
+This device-model is still the default for NetBSD dom0.
+
+=back
+
+It is recommended to accept the default value for new guests.  If
+you have existing guests then, depending on the nature of the guest
+Operating System, you may wish to force them to use the device
+model which they were installed with.
+
+=item B<device_model_override="PATH">
+
+Override the path to the binary to be used as the device-model. The
+binary provided here MUST be consistent with the
+B<device_model_version> which you have specified. You should not
+normally need to specify this option.
+
+=item B<device_model_stubdomain_override=BOOLEAN>
+
+Override the use of stubdomain based device-model.  Normally this will
+be automatically selected based upon the other features and options
+you have selected.
+
+=item B<device_model_stubdomain_seclabel="LABEL">
+
+Assign an XSM security label to the device-model stubdomain.
+
+=item B<device_model_args=[ "ARG", "ARG", ...]>
+
+Pass additional arbitrary options on the device-model command
+line. Each element in the list is passed as an option to the
+device-model.
+
+=item B<device_model_args_pv=[ "ARG", "ARG", ...]>
+
+Pass additional arbitrary options on the device-model command line for
+a PV device model only. Each element in the list is passed as an
+option to the device-model.
+
+=item B<device_model_args_hvm=[ "ARG", "ARG", ...]>
+
+Pass additional arbitrary options on the device-model command line for
+an HVM device model only. Each element in the list is passed as an
+option to the device-model.
+
+=back
+
+=head2 Keymaps
+
+The keymaps available are defined by the device-model which you are
+using. Commonly this includes:
+
+        ar  de-ch  es  fo     fr-ca  hu  ja  mk     no  pt-br  sv
+        da  en-gb  et  fr     fr-ch  is  lt  nl     pl  ru     th
+        de  en-us  fi  fr-be  hr     it  lv  nl-be  pt  sl     tr
+
+The default is B<en-us>.
+
+See B<qemu(1)> for more information.
+
+=head2 Architecture Specific options
+
+=head3 ARM
+
+=over 4
+
+=item B<gic_version="vN">
+
+Version of the GIC emulated for the guest.
+
+Currently, the following versions are supported:
+
+=over 4
+
+=item B<v2>
+
+Emulate a GICv2
+
+=item B<v3>
+
+Emulate a GICv3. Note that the emulated GIC does not support the
+GICv2 compatibility mode.
+
+=item B<default>
+
+Emulate the same version as the native GIC hardware used by the host where
+the domain was created.
+
+=back
+
+This requires hardware compatibility with the requested version, either
+natively or via hardware backwards compatibility support.
+
+=item B<vuart="uart">
+
+To enable vuart console, user must specify the following option in the
+VM config file:
+
+vuart = "sbsa_uart"
+
+Currently, only the "sbsa_uart" model is supported for ARM.
+
+=back
+
+=head3 x86
+
+=over 4
+
+=item B<mca_caps=[ "CAP", "CAP", ... ]>
+
+(HVM only) Enable MCA capabilities besides default ones enabled
+by Xen hypervisor for the HVM domain. "CAP" can be one in the
+following list:
+
+=over 4
+
+=item B<"lmce">
+
+Intel local MCE
+
+=item B<default>
+
+No MCA capabilities in above list are enabled.
+
+=back
+
+=back
+
+=head1 SEE ALSO
+
+=over 4
+
+=item L<xl(1)>
+
+=item L<xl.conf(5)>
+
+=item L<xlcpupool.cfg(5)>
+
+=item L<xl-disk-configuration(5)>
+
+=item L<xl-network-configuration(5)>
+
+=item L<xen-tscmode(7)>
+
+=back
+
+=head1 FILES
+
+F</etc/xen/NAME.cfg>
+F<@XEN_DUMP_DIR@/NAME>
+
+=head1 BUGS
+
+This document may contain items which require further
+documentation. Patches to improve incomplete items (or any other item)
+are gratefully received on the xen-devel@lists.xen.org mailing
+list. Please see L<http://wiki.xen.org/wiki/SubmittingXenPatches> for
+information on how to submit a patch to Xen.
+
diff --git a/docs/man/xl.cfg.pod.5.in b/docs/man/xl.cfg.pod.5.in
deleted file mode 100644 (file)
index 3b92f39..0000000
+++ /dev/null
@@ -1,2843 +0,0 @@
-=head1 NAME
-
-xl.cfg - xl domain configuration file syntax
-
-=head1 SYNOPSIS
-
- /etc/xen/xldomain
-
-=head1 DESCRIPTION
-
-Creating a VM (a domain in Xen terminology, sometimes called a guest)
-with xl requires the provision of a domain configuration file.  Typically,
-these live in F</etc/xen/DOMAIN.cfg>, where DOMAIN is the name of the
-domain.
-
-=head1 SYNTAX
-
-A domain configuration file consists of a series of options, specified by
-using C<KEY=VALUE> pairs.
-
-Some C<KEY>s are mandatory, some are general options which apply to
-any guest type, while others relate only to specific guest types
-(e.g. PV or HVM guests).
-
-A C<VALUE> can be one of:
-
-=over 4
-
-=item B<"STRING">
-
-A string, surrounded by either single or double quotes. But if the
-STRING is part of a SPEC_STRING, the quotes should be omitted.
-
-=item B<NUMBER>
-
-A number, in either decimal, octal (using a C<0> prefix) or
-hexadecimal (using a C<0x> prefix) format.
-
-=item B<BOOLEAN>
-
-A C<NUMBER> interpreted as C<False> (C<0>) or C<True> (any other
-value).
-
-=item B<[ VALUE, VALUE, ... ]>
-
-A list of C<VALUE>s of the above types. Lists can be heterogeneous and
-nested.
-
-=back
-
-The semantics of each C<KEY> defines which type of C<VALUE> is required.
-
-Pairs may be separated either by a newline or a semicolon.  Both
-of the following are valid:
-
-  name="h0"
-  type="hvm"
-
-  name="h0"; type="hvm"
-
-=head1 OPTIONS
-
-=head2 Mandatory Configuration Items
-
-The following key is mandatory for any guest type.
-
-=over 4
-
-=item B<name="NAME">
-
-Specifies the name of the domain.  Names of domains existing on a
-single host must be unique.
-
-=back
-
-=head2 Selecting Guest Type
-
-=over 4
-
-=item B<type="pv">
-
-Specifies that this is to be a PV domain, suitable for hosting Xen-aware
-guest operating systems. This is the default on x86.
-
-=item B<type="pvh">
-
-Specifies that this is to be an PVH domain. That is a lightweight HVM-like
-guest without a device model and without many of the emulated devices
-available to HVM guests. Note that this mode requires a PVH aware kernel on
-x86. This is the default on Arm.
-
-=item B<type="hvm">
-
-Specifies that this is to be an HVM domain. That is, a fully virtualised
-computer with emulated BIOS, disk and network peripherals, etc.
-
-=back
-
-=head3 Deprecated guest type selection
-
-Note that the builder option is being deprecated in favor of the type
-option.
-
-=over 4
-
-=item B<builder="generic">
-
-Specifies that this is to be a PV domain, suitable for hosting Xen-aware guest
-operating systems. This is the default.
-
-=item B<builder="hvm">
-
-Specifies that this is to be an HVM domain.  That is, a fully
-virtualised computer with emulated BIOS, disk and network peripherals,
-etc.
-
-=back
-
-=head2 General Options
-
-The following options apply to guests of any type.
-
-=head3 CPU Allocation
-
-=over 4
-
-=item B<pool="CPUPOOLNAME">
-
-Put the guest's vCPUs into the named CPU pool.
-
-=item B<vcpus=N>
-
-Start the guest with N vCPUs initially online.
-
-=item B<maxvcpus=M>
-
-Allow the guest to bring up a maximum of M vCPUs. When starting the guest, if
-B<vcpus=N> is less than B<maxvcpus=M> then the first B<N> vCPUs will be
-created online and the remainder will be created offline.
-
-=item B<cpus="CPULIST">
-
-List of host CPUs the guest is allowed to use. Default is no pinning at
-all (more on this below). A C<CPULIST> may be specified as follows:
-
-=over 4
-
-=item "all"
-
-To allow all the vCPUs of the guest to run on all the CPUs on the host.
-
-=item "0-3,5,^1"
-
-To allow all the vCPUs of the guest to run on CPUs 0,2,3,5. It is possible to
-combine this with "all", meaning "all,^7" results in all the vCPUs
-of the guest being allowed to run on all the CPUs of the host except CPU 7.
-
-=item "nodes:0-3,^node:2"
-
-To allow all the vCPUs of the guest to run on the CPUs from NUMA nodes
-0,1,3 of the host. So, if CPUs 0-3 belong to node 0, CPUs 4-7 belong
-to node 1, CPUs 8-11 to node 2 and CPUs 12-15 to node 3, the above would mean
-all the vCPUs of the guest would be allowed to run on CPUs 0-7,12-15.
-
-Combining this notation with the one above is possible. For instance,
-"1,node:1,^6", means all the vCPUs of the guest will run on CPU 1 and
-on all the CPUs of NUMA node 1, but not on CPU 6. Following the same
-example as above, that would be CPUs 1,4,5,7.
-
-Combining this with "all" is also possible, meaning "all,^node:1"
-results in all the vCPUs of the guest running on all the CPUs on the
-host, except for the CPUs belonging to the host NUMA node 1.
-
-=item ["2", "3-8,^5"]
-
-To ask for specific vCPU mapping. That means (in this example), vCPU 0
-of the guest will run on CPU 2 of the host and vCPU 1 of the guest will
-run on CPUs 3,4,6,7,8 of the host (excluding CPU 5).
-
-More complex notation can be also used, exactly as described above. So
-"all,^5-8", or just "all", or "node:0,node:2,^9-11,18-20" are all legal,
-for each element of the list.
-
-=back
-
-If this option is not specified, no vCPU to CPU pinning is established,
-and the vCPUs of the guest can run on all the CPUs of the host. If this
-option is specified, the intersection of the vCPU pinning mask, provided
-here, and the soft affinity mask, if provided via B<cpus_soft=>,
-is utilized to compute the domain node-affinity for driving memory
-allocations.
-
-=item B<cpus_soft="CPULIST">
-
-Exactly as B<cpus=>, but specifies soft affinity, rather than pinning
-(hard affinity). When using the credit scheduler, this means what CPUs
-the vCPUs of the domain prefer.
-
-A C<CPULIST> is specified exactly as for B<cpus=>, detailed earlier in the
-manual.
-
-If this option is not specified, the vCPUs of the guest will not have
-any preference regarding host CPUs. If this option is specified,
-the intersection of the soft affinity mask, provided here, and the vCPU
-pinning, if provided via B<cpus=>, is utilized to compute the
-domain node-affinity for driving memory allocations.
-
-If this option is not specified (and B<cpus=> is not specified either),
-libxl automatically tries to place the guest on the least possible
-number of nodes. A heuristic approach is used for choosing the best
-node (or set of nodes), with the goal of maximizing performance for
-the guest and, at the same time, achieving efficient utilization of
-host CPUs and memory. In that case, the soft affinity of all the vCPUs
-of the domain will be set to host CPUs belonging to NUMA nodes
-chosen during placement.
-
-For more details, see L<xl-numa-placement(7)>.
-
-=back
-
-=head3 CPU Scheduling
-
-=over 4
-
-=item B<cpu_weight=WEIGHT>
-
-A domain with a weight of 512 will get twice as much CPU as a domain
-with a weight of 256 on a contended host.
-Legal weights range from 1 to 65535 and the default is 256.
-Honoured by the credit and credit2 schedulers.
-
-=item B<cap=N>
-
-The cap optionally fixes the maximum amount of CPU a domain will be
-able to consume, even if the host system has idle CPU cycles.
-The cap is expressed as a percentage of one physical CPU:
-100 is 1 physical CPU, 50 is half a CPU, 400 is 4 CPUs, etc.
-The default, 0, means there is no cap.
-Honoured by the credit and credit2 schedulers.
-
-B<NOTE>: Many systems have features that will scale down the computing
-power of a CPU that is not 100% utilized.  This can be done in the
-operating system, but can also sometimes be done below the operating system,
-in the BIOS.  If you set a cap such that individual cores are running
-at less than 100%, this may have an impact on the performance of your
-workload over and above the impact of the cap. For example, if your
-processor runs at 2GHz, and you cap a VM at 50%, the power management
-system may also reduce the clock speed to 1GHz; the effect will be
-that your VM gets 25% of the available power (50% of 1GHz) rather than
-50% (50% of 2GHz).  If you are not getting the performance you expect,
-look at performance and CPU frequency options in your operating system and
-your BIOS.
-
-=back
-
-=head3 Memory Allocation
-
-=over 4
-
-=item B<memory=MBYTES>
-
-Start the guest with MBYTES megabytes of RAM.
-
-=item B<maxmem=MBYTES>
-
-Specifies the maximum amount of memory a guest can ever see.
-The value of B<maxmem=> must be equal to or greater than that of B<memory=>.
-
-In combination with B<memory=> it will start the guest "pre-ballooned",
-if the values of B<memory=> and B<maxmem=> differ.
-A "pre-ballooned" HVM guest needs a balloon driver, without a balloon driver
-it will crash.
-
-B<NOTE>: Because of the way ballooning works, the guest has to allocate
-memory to keep track of maxmem pages, regardless of how much memory it
-actually has available to it.  A guest with maxmem=262144 and
-memory=8096 will report significantly less memory available for use
-than a system with maxmem=8096 memory=8096 due to the memory overhead
-of having to track the unused pages.
-
-=back
-
-=head3 Guest Virtual NUMA Configuration
-
-=over 4
-
-=item B<vnuma=[ VNODE_SPEC, VNODE_SPEC, ... ]>
-
-Specify virtual NUMA configuration with positional arguments. The
-nth B<VNODE_SPEC> in the list specifies the configuration of the nth
-virtual node.
-
-Note that virtual NUMA is not supported for PV guests yet, because
-there is an issue with the CPUID instruction handling that affects PV virtual
-NUMA. Furthermore, guests with virtual NUMA cannot be saved or migrated
-because the migration stream does not preserve node information.
-
-Each B<VNODE_SPEC> is a list, which has a form of
-"[VNODE_CONFIG_OPTION, VNODE_CONFIG_OPTION, ... ]"  (without the quotes).
-
-For example, vnuma = [ ["pnode=0","size=512","vcpus=0-4","vdistances=10,20"] ]
-means vnode 0 is mapped to pnode 0, has 512MB ram, has vcpus 0 to 4, the
-distance to itself is 10 and the distance to vnode 1 is 20.
-
-Each B<VNODE_CONFIG_OPTION> is a quoted C<KEY=VALUE> pair. Supported
-B<VNODE_CONFIG_OPTION>s are (they are all mandatory at the moment):
-
-=over 4
-
-=item B<pnode=NUMBER>
-
-Specifies which physical node this virtual node maps to.
-
-=item B<size=MBYTES>
-
-Specifies the size of this virtual node. The sum of memory sizes of all
-vnodes will become B<maxmem=>. If B<maxmem=> is specified separately,
-a check is performed to make sure the sum of all vnode memory matches
-B<maxmem=>.
-
-=item B<vcpus="CPUSTRING">
-
-Specifies which vCPUs belong to this node. B<"CPUSTRING"> is a string of numerical
-values separated by a comma. You can specify a range and/or a single CPU.
-An example would be "vcpus=0-5,8", which means you specified vCPU 0 to vCPU 5,
-and vCPU 8.
-
-=item B<vdistances=NUMBER, NUMBER, ... >
-
-Specifies the virtual distance from this node to all nodes (including
-itself) with positional arguments. For example, "vdistance=10,20"
-for vnode 0 means the distance from vnode 0 to vnode 0 is 10, from
-vnode 0 to vnode 1 is 20. The number of arguments supplied must match
-the total number of vnodes.
-
-Normally you can use the values from B<xl info -n> or B<numactl
---hardware> to fill the vdistances list.
-
-=back
-
-=back
-
-=head3 Event Actions
-
-=over 4
-
-=item B<on_poweroff="ACTION">
-
-Specifies what should be done with the domain if it shuts itself down.
-The B<ACTION>s are:
-
-=over 4
-
-=item B<destroy>
-
-destroy the domain
-
-=item B<restart>
-
-destroy the domain and immediately create a new domain with the same
-configuration
-
-=item B<rename-restart>
-
-rename the domain which terminated, and then immediately create a new
-domain with the same configuration as the original
-
-=item B<preserve>
-
-keep the domain.  It can be examined, and later destroyed with B<xl destroy>.
-
-=item B<coredump-destroy>
-
-write a "coredump" of the domain to F<@XEN_DUMP_DIR@/NAME> and then
-destroy the domain.
-
-=item B<coredump-restart>
-
-write a "coredump" of the domain to F<@XEN_DUMP_DIR@/NAME> and then
-restart the domain.
-
-=item B<soft-reset>
-
-Reset all Xen specific interfaces for the Xen-aware HVM domain allowing
-it to reestablish these interfaces and continue executing the domain. PV
-and non-Xen-aware HVM guests are not supported.
-
-=back
-
-The default for B<on_poweroff> is B<destroy>.
-
-=item B<on_reboot="ACTION">
-
-Action to take if the domain shuts down with a reason code requesting
-a reboot.  Default is B<restart>.
-
-=item B<on_watchdog="ACTION">
-
-Action to take if the domain shuts down due to a Xen watchdog timeout.
-Default is B<destroy>.
-
-=item B<on_crash="ACTION">
-
-Action to take if the domain crashes.  Default is B<destroy>.
-
-=item B<on_soft_reset="ACTION">
-
-Action to take if the domain performs a 'soft reset' (e.g. does B<kexec>).
-Default is B<soft-reset>.
-
-=back
-
-=head3 Direct Kernel Boot
-
-Direct kernel boot allows booting guests with a kernel and an initrd
-stored on a filesystem available to the host physical machine, allowing
-command line arguments to be passed directly. PV guest direct kernel boot is
-supported. HVM guest direct kernel boot is supported with some limitations
-(it's supported when using B<qemu-xen> and the default BIOS 'seabios',
-but not supported in case of using B<stubdom-dm> and the old 'rombios'.)
-
-=over 4
-
-=item B<kernel="PATHNAME">
-
-Load the specified file as the kernel image.
-
-=item B<ramdisk="PATHNAME">
-
-Load the specified file as the ramdisk.
-
-=item B<cmdline="STRING">
-
-Append B<STRING> to the kernel command line. (Note: the meaning of
-this is guest specific). It can replace B<root="STRING">
-along with B<extra="STRING"> and is preferred. When B<cmdline="STRING"> is set,
-B<root="STRING"> and B<extra="STRING"> will be ignored.
-
-=item B<root="STRING">
-
-Append B<root=STRING> to the kernel command line (Note: the meaning of this
-is guest specific).
-
-=item B<extra="STRING">
-
-Append B<STRING> to the kernel command line. (Note: the meaning of this
-is guest specific).
-
-=back
-
-=head3 Non direct Kernel Boot
-
-Non direct kernel boot allows booting guests with a firmware. This can be
-used by all types of guests, although the selection of options is different
-depending on the guest type.
-
-This option provides the flexibly of letting the guest decide which kernel
-they want to boot, while preventing having to poke at the guest file
-system form the toolstack domain.
-
-=head4 PV guest options
-
-=over 4
-
-=item B<firmware="pvgrub32|pvgrub64">
-
-Boots a guest using a para-virtualized version of grub that runs inside
-of the guest. The bitness of the guest needs to be know, so that the right
-version of pvgrub can be selected.
-
-Note that xl expects to find the pvgrub32.bin and pvgrub64.bin binaries in
-F<@XENFIRMWAREDIR@>.
-
-=back
-
-=head4 HVM guest options
-
-=over 4
-
-=item B<firmware="bios">
-
-Boot the guest using the default BIOS firmware, which depends on the
-chosen device model.
-
-=item B<firmware="uefi">
-
-Boot the guest using the default UEFI firmware, currently OVMF.
-
-=item B<firmware="seabios">
-
-Boot the guest using the SeaBIOS BIOS firmware.
-
-=item B<firmware="rombios">
-
-Boot the guest using the ROMBIOS BIOS firmware.
-
-=item B<firmware="ovmf">
-
-Boot the guest using the OVMF UEFI firmware.
-
-=item B<firmware="PATH">
-
-Load the specified file as firmware for the guest.
-
-=back
-
-=head4 PVH guest options
-
-Currently there's no firmware available for PVH guests, they should be
-booted using the B<Direct Kernel Boot> method or the B<bootloader> option.
-
-=over 4
-
-=item B<pvshim=BOOLEAN>
-
-Whether to boot this guest as a PV guest within a PVH container.
-Ie, the guest will experience a PV environment,
-but
-processor hardware extensions are used to
-separate its address space
-to mitigate the Meltdown attack (CVE-2017-5754).
-
-Default is false.
-
-=item B<pvshim_path="PATH">
-
-The PV shim is a specially-built firmware-like executable
-constructed from the hypervisor source tree.
-This option specifies to use a non-default shim.
-Ignored if pvhsim is false.
-
-=item B<pvshim_cmdline="STRING">
-
-Command line for the shim.
-Default is "pv-shim console=xen,pv".
-Ignored if pvhsim is false.
-
-=item B<pvshim_extra="STRING">
-
-Extra command line arguments for the shim.
-If supplied, appended to the value for pvshim_cmdline.
-Default is empty.
-Ignored if pvhsim is false.
-
-=back
-
-=head3 Other Options
-
-=over 4
-
-=item B<uuid="UUID">
-
-Specifies the UUID of the domain.  If not specified, a fresh unique
-UUID will be generated.
-
-=item B<seclabel="LABEL">
-
-Assign an XSM security label to this domain.
-
-=item B<init_seclabel="LABEL">
-
-Specify an XSM security label used for this domain temporarily during
-its build. The domain's XSM label will be changed to the execution
-seclabel (specified by B<seclabel>) once the build is complete, prior to
-unpausing the domain. With a properly constructed security policy (such
-as nomigrate_t in the example policy), this can be used to build a
-domain whose memory is not accessible to the toolstack domain.
-
-=item B<max_grant_frames=NUMBER>
-
-Specify the maximum number of grant frames the domain is allowed to have.
-This value controls how many pages the domain is able to grant access to for
-other domains, needed e.g. for the operation of paravirtualized devices.
-The default is settable via L<xl.conf(5)>.
-
-=item B<max_maptrack_frames=NUMBER>
-
-Specify the maximum number of grant maptrack frames the domain is allowed
-to have. This value controls how many pages of foreign domains can be accessed
-via the grant mechanism by this domain. The default value is settable via
-L<xl.conf(5)>.
-
-=item B<nomigrate=BOOLEAN>
-
-Disable migration of this domain.  This enables certain other features
-which are incompatible with migration. Currently this is limited to
-enabling the invariant TSC feature flag in CPUID results when TSC is
-not emulated.
-
-=item B<driver_domain=BOOLEAN>
-
-Specify that this domain is a driver domain. This enables certain
-features needed in order to run a driver domain.
-
-=item B<device_tree=PATH>
-
-Specify a partial device tree (compiled via the Device Tree Compiler).
-Everything under the node "/passthrough" will be copied into the guest
-device tree. For convenience, the node "/aliases" is also copied to allow
-the user to define aliases which can be used by the guest kernel.
-
-Given the complexity of verifying the validity of a device tree, this
-option should only be used with a trusted device tree.
-
-Note that the partial device tree should avoid using the phandle 65000
-which is reserved by the toolstack.
-
-=back
-
-=head2 Devices
-
-The following options define the paravirtual, emulated and physical
-devices which the guest will contain.
-
-=over 4
-
-=item B<disk=[ "DISK_SPEC_STRING", "DISK_SPEC_STRING", ...]>
-
-Specifies the disks (both emulated disks and Xen virtual block
-devices) which are to be provided to the guest, and what objects on
-the host they should map to.  See L<xl-disk-configuration(5)> for more
-details.
-
-=item B<vif=[ "NET_SPEC_STRING", "NET_SPEC_STRING", ...]>
-
-Specifies the network interfaces (both emulated network adapters,
-and Xen virtual interfaces) which are to be provided to the guest.  See
-L<xl-network-configuration(5)> for more details.
-
-=item B<vtpm=[ "VTPM_SPEC_STRING", "VTPM_SPEC_STRING", ...]>
-
-Specifies the Virtual Trusted Platform module to be
-provided to the guest. See L<xen-vtpm(7)> for more details.
-
-Each B<VTPM_SPEC_STRING> is a comma-separated list of C<KEY=VALUE>
-settings from the following list:
-
-=over 4
-
-=item B<backend=domain-id>
-
-Specifies the backend domain name or id. B<This value is required!>
-If this domain is a guest, the backend should be set to the
-vTPM domain name. If this domain is a vTPM, the
-backend should be set to the vTPM manager domain name.
-
-=item B<uuid=UUID>
-
-Specifies the UUID of this vTPM device. The UUID is used to uniquely
-identify the vTPM device. You can create one using the B<uuidgen(1)>
-program on unix systems. If left unspecified, a new UUID
-will be randomly generated every time the domain boots.
-If this is a vTPM domain, you should specify a value. The
-value is optional if this is a guest domain.
-
-=back
-
-=item B<p9=[ "9PFS_SPEC_STRING", "9PFS_SPEC_STRING", ...]>
-
-Creates a Xen 9pfs connection to share a filesystem from the backend to the
-frontend.
-
-Each B<9PFS_SPEC_STRING> is a comma-separated list of C<KEY=VALUE>
-settings, from the following list:
-
-=over 4
-
-=item B<tag=STRING>
-
-9pfs tag to identify the filesystem share. The tag is needed on the
-guest side to mount it.
-
-=item B<security_model="none">
-
-Only "none" is supported today, which means that the files are stored using
-the same credentials as those they have in the guest (no user ownership
-squash or remap).
-
-=item B<path=STRING>
-
-Filesystem path on the backend to export.
-
-=item B<backend=domain-id>
-
-Specify the backend domain name or id, defaults to dom0.
-
-=back
-
-=item B<pvcalls=[ "backend=domain-id", ... ]>
-
-Creates a Xen pvcalls connection to handle pvcalls requests from
-frontend to backend. It can be used as an alternative networking model.
-For more information about the protocol, see
-https://xenbits.xen.org/docs/unstable/misc/pvcalls.html.
-
-=item B<vfb=[ "VFB_SPEC_STRING", "VFB_SPEC_STRING", ...]>
-
-Specifies the paravirtual framebuffer devices which should be supplied
-to the domain.
-
-This option does not control the emulated graphics card presented to
-an HVM guest. See B<Emulated VGA Graphics Device> below for how to
-configure the emulated device. If B<Emulated VGA Graphics Device> options
-are used in a PV guest configuration, B<xl> will pick up B<vnc>, B<vnclisten>,
-B<vncpasswd>, B<vncdisplay>, B<vncunused>, B<sdl>, B<opengl> and
-B<keymap> to construct the paravirtual framebuffer device for the guest.
-
-Each B<VFB_SPEC_STRING> is a comma-separated list of C<KEY=VALUE>
-settings, from the following list:
-
-=over 4
-
-=item B<vnc=BOOLEAN>
-
-Allow access to the display via the VNC protocol.  This enables the
-other VNC-related settings.  Default is 1 (enabled).
-
-=item B<vnclisten=ADDRESS[:DISPLAYNUM]>
-
-Specifies the IP address, and optionally the VNC display number, to use.
-
-Note: if you specify the display number here, you should not use
-the B<vncdisplay> option.
-
-=item B<vncdisplay=DISPLAYNUM>
-
-Specifies the VNC display number to use.  The actual TCP port number
-will be DISPLAYNUM+5900.
-
-Note: you should not use this option if you set the DISPLAYNUM in the
-B<vnclisten> option.
-
-=item B<vncunused=BOOLEAN>
-
-Requests that the VNC display setup searches for a free TCP port to use.
-The actual display used can be accessed with B<xl vncviewer>.
-
-=item B<vncpasswd=PASSWORD>
-
-Specifies the password for the VNC server. If the password is set to an
-empty string, authentication on the VNC server will be disabled,
-allowing any user to connect.
-
-=item B<sdl=BOOLEAN>
-
-Specifies that the display should be presented via an X window (using
-Simple DirectMedia Layer). The default is 0 (not enabled).
-
-=item B<display=DISPLAY>
-
-Specifies the X Window display that should be used when the B<sdl> option
-is used.
-
-=item B<xauthority=XAUTHORITY>
-
-Specifies the path to the X authority file that should be used to
-connect to the X server when the B<sdl> option is used.
-
-=item B<opengl=BOOLEAN>
-
-Enable OpenGL acceleration of the SDL display. Only effects machines
-using B<device_model_version="qemu-xen-traditional"> and only if the
-device-model was compiled with OpenGL support. The default is 0 (disabled).
-
-=item B<keymap=LANG>
-
-Configure the keymap to use for the keyboard associated with this
-display. If the input method does not easily support raw keycodes
-(e.g. this is often the case when using VNC) then this allows us to
-correctly map the input keys into keycodes seen by the guest. The
-specific values which are accepted are defined by the version of the
-device-model which you are using. See B<Keymaps> below or consult the
-B<qemu(1)> manpage. The default is B<en-us>.
-
-=back
-
-=item B<channel=[ "CHANNEL_SPEC_STRING", "CHANNEL_SPEC_STRING", ...]>
-
-Specifies the virtual channels to be provided to the guest. A
-channel is a low-bandwidth, bidirectional byte stream, which resembles
-a serial link. Typical uses for channels include transmitting VM
-configuration after boot and signalling to in-guest agents. Please see
-L<xen-pv-channel(7)> for more details.
-
-Each B<CHANNEL_SPEC_STRING> is a comma-separated list of C<KEY=VALUE>
-settings. Leading and trailing whitespace is ignored in both KEY and
-VALUE. Neither KEY nor VALUE may contain ',', '=' or '"'. Defined values
-are:
-
-=over 4
-
-=item B<backend=domain-id>
-
-Specifies the backend domain name or id. This parameter is optional. If
-this parameter is omitted then the toolstack domain will be assumed.
-
-=item B<name=NAME>
-
-Specifies the name for this device. B<This parameter is mandatory!>
-This should be a well-known name for a specific application (e.g.
-guest agent) and should be used by the frontend to connect the
-application to the right channel device. There is no formal registry
-of channel names, so application authors are encouraged to make their
-names unique by including the domain name and a version number in the string
-(e.g. org.mydomain.guestagent.1).
-
-=item B<connection=CONNECTION>
-
-Specifies how the backend will be implemented. The following options are
-available:
-
-=over 4
-
-=item B<SOCKET>
-
-The backend will bind a Unix domain socket (at the path given by
-B<path=PATH>), listen for and accept connections. The backend will proxy
-data between the channel and the connected socket.
-
-=item B<PTY>
-
-The backend will create a pty and proxy data between the channel and the
-master device. The command B<xl channel-list> can be used to discover the
-assigned slave device.
-
-=back
-
-=back
-
-=item B<rdm="RDM_RESERVATION_STRING">
-
-B<HVM/x86 only!> Specifies information about Reserved Device Memory (RDM),
-which is necessary to enable robust device passthrough. One example of RDM
-is reporting through the ACPI Reserved Memory Region Reporting (RMRR) structure
-on the x86 platform.
-
-B<RDM_RESERVATION_STRING> is a comma separated list of C<KEY=VALUE> settings,
-from the following list:
-
-=over 4
-
-=item B<strategy=STRING>
-
-Currently there is only one valid type, and that is "host".
-
-=over 4
-
-=item B<host>
-
-If set to "host" it means all reserved device memory on this platform should
-be checked to reserve regions in this VM's address space. This global RDM
-parameter allows the user to specify reserved regions explicitly, and using
-"host" includes all reserved regions reported on this platform, which is
-useful when doing hotplug.
-
-By default this isn't set so we don't check all RDMs. Instead, we just check
-the RDM specific to a given device if we're assigning this kind of a device.
-
-Note: this option is not recommended unless you can make sure that no
-conflicts exist.
-
-For example, you're trying to set "memory = 2800" to allocate memory to one
-given VM but the platform owns two RDM regions like:
-
-Device A [sbdf_A]: RMRR region_A: base_addr ac6d3000 end_address ac6e6fff
-
-Device B [sbdf_B]: RMRR region_B: base_addr ad800000 end_address afffffff
-
-In this conflict case,
-
-#1. If B<strategy> is set to "host", for example:
-
-rdm = "strategy=host,policy=strict" or rdm = "strategy=host,policy=relaxed"
-
-it means all conflicts will be handled according to the policy
-introduced by B<policy> as described below.
-
-#2. If B<strategy> is not set at all, but
-
-pci = [ 'sbdf_A, rdm_policy=xxxxx' ]
-
-it means only one conflict of region_A will be handled according to the policy
-introduced by B<rdm_policy=STRING> as described inside B<pci> options.
-
-=back
-
-=item B<policy=STRING>
-
-Specifies how to deal with conflicts when reserving already reserved device
-memory in the guest address space.
-
-=over 4
-
-=item B<strict>
-
-Specifies that in case of an unresolved conflict the VM can't be created,
-or the associated device can't be attached in the case of hotplug.
-
-=item B<relaxed>
-
-Specifies that in case of an unresolved conflict the VM is allowed to be
-created but may cause the VM to crash if a pass-through device accesses RDM.
-For example, the Windows IGD GFX driver always accesses RDM regions so it
-leads to a VM crash.
-
-Note: this may be overridden by the B<rdm_policy> option in the B<pci>
-device configuration.
-
-=back
-
-=back
-
-=item B<usbctrl=[ "USBCTRL_SPEC_STRING", "USBCTRL_SPEC_STRING", ...]>
-
-Specifies the USB controllers created for this guest.
-
-Each B<USBCTRL_SPEC_STRING> is a comma-separated list of C<KEY=VALUE>
-settings, from the following list:
-
-=over 4
-
-=item B<type=TYPE>
-
-Specifies the usb controller type.
-
-=over 4
-
-=item B<pv>
-
-Specifies a kernel based PVUSB backend.
-
-=item B<qusb>
-
-Specifies a QEMU based PVUSB backend.
-
-=item B<devicemodel>
-
-Specifies a USB controller emulated by QEMU.
-It will show up as a PCI-device in the guest.
-
-=item B<auto>
-
-Determines whether a kernel based backend is installed.
-If this is the case, B<pv> is used, otherwise B<qusb> will be used.
-For HVM domains B<devicemodel> will be selected.
-
-This option is the default.
-
-=back
-
-=item B<version=VERSION>
-
-Specifies the usb controller version.  Possible values include
-1 (USB1.1), 2 (USB2.0) and 3 (USB3.0).
-Default is 2 (USB2.0).
-Value 3 (USB3.0) is available for the B<devicemodel> type only.
-
-=item B<ports=PORTS>
-
-Specifies the total number of ports of the usb controller. The maximum
-number is 31. The default is 8.
-With the type B<devicemodel> the number of ports is more limited:
-a USB1.1 controller always has 2 ports,
-a USB2.0 controller always has 6 ports
-and a USB3.0 controller can have up to 15 ports.
-
-USB controller ids start from 0.  In line with the USB specification, however,
-ports on a controller start from 1.
-
-B<EXAMPLE>
-
-=over 2
-
-usbctrl=["version=1,ports=4", "version=2,ports=8"]
-
-The first controller is USB1.1 and has:
-
-controller id = 0, and ports 1,2,3,4.
-
-The second controller is USB2.0 and has:
-
-controller id = 1, and ports 1,2,3,4,5,6,7,8.
-
-=back
-
-=back
-
-=item B<usbdev=[ "USBDEV_SPEC_STRING", "USBDEV_SPEC_STRING", ...]>
-
-Specifies the USB devices to be attached to the guest at boot.
-
-Each B<USBDEV_SPEC_STRING> is a comma-separated list of C<KEY=VALUE>
-settings, from the following list:
-
-=over 4
-
-=item B<type=hostdev>
-
-Specifies USB device type. Currently only "hostdev" is supported.
-
-=item B<hostbus=busnum>
-
-Specifies busnum of the USB device from the host perspective.
-
-=item B<hostaddr=devnum>
-
-Specifies devnum of the USB device from the host perspective.
-
-=item B<controller=CONTROLLER>
-
-Specifies the USB controller id, to which controller the USB device is
-attached.
-
-If no controller is specified, an available controller:port combination
-will be used.  If there are no available controller:port combinations,
-a new controller will be created.
-
-=item B<port=PORT>
-
-Specifies the USB port to which the USB device is attached. The B<port>
-option is valid only when the B<controller> option is specified.
-
-=back
-
-=item B<pci=[ "PCI_SPEC_STRING", "PCI_SPEC_STRING", ...]>
-
-Specifies the host PCI devices to passthrough to this guest.
-Each B<PCI_SPEC_STRING> has the form of
-B<[DDDD:]BB:DD.F[@VSLOT],KEY=VALUE,KEY=VALUE,...> where:
-
-=over 4
-
-=item B<[DDDD:]BB:DD.F>
-
-Identifies the PCI device from the host perspective in the domain
-(B<DDDD>), Bus (B<BB>), Device (B<DD>) and Function (B<F>) syntax. This is
-the same scheme as used in the output of B<lspci(1)> for the device in
-question.
-
-Note: by default B<lspci(1)> will omit the domain (B<DDDD>) if it
-is zero and it is optional here also. You may specify the function
-(B<F>) as B<*> to indicate all functions.
-
-=item B<@VSLOT>
-
-Specifies the virtual slot where the guest will see this
-device. This is equivalent to the B<DD> which the guest sees. In a
-guest B<DDDD> and B<BB> are C<0000:00>.
-
-=item B<permissive=BOOLEAN>
-
-By default pciback only allows PV guests to write "known safe" values
-into PCI configuration space, likewise QEMU (both qemu-xen and
-qemu-xen-traditional) imposes the same constraint on HVM guests.
-However, many devices require writes to other areas of the configuration space
-in order to operate properly.  This option tells the backend (pciback or QEMU)
-to allow all writes to the PCI configuration space of this device by this
-domain.
-
-B<This option should be enabled with caution:> it gives the guest much
-more control over the device, which may have security or stability
-implications.  It is recommended to only enable this option for
-trusted VMs under administrator's control.
-
-=item B<msitranslate=BOOLEAN>
-
-Specifies that MSI-INTx translation should be turned on for the PCI
-device. When enabled, MSI-INTx translation will always enable MSI on
-the PCI device regardless of whether the guest uses INTx or MSI. Some
-device drivers, such as NVIDIA's, detect an inconsistency and do not
-function when this option is enabled. Therefore the default is false (0).
-
-=item B<seize=BOOLEAN>
-
-Tells B<xl> to automatically attempt to re-assign a device to
-pciback if it is not already assigned.
-
-B<WARNING:> If you set this option, B<xl> will gladly re-assign a critical
-system device, such as a network or a disk controller being used by
-dom0 without confirmation.  Please use with care.
-
-=item B<power_mgmt=BOOLEAN>
-
-B<(HVM only)> Specifies that the VM should be able to program the
-D0-D3hot power management states for the PCI device. The default is false (0).
-
-=item B<rdm_policy=STRING>
-
-B<(HVM/x86 only)> This is the same as the policy setting inside the B<rdm>
-option but just specific to a given device. The default is "relaxed".
-
-Note: this would override global B<rdm> option.
-
-=back
-
-=item B<pci_permissive=BOOLEAN>
-
-Changes the default value of B<permissive> for all PCI devices passed
-through to this VM. See B<permissive> above.
-
-=item B<pci_msitranslate=BOOLEAN>
-
-Changes the default value of B<msitranslate> for all PCI devices passed
-through to this VM. See B<msitranslate> above.
-
-=item B<pci_seize=BOOLEAN>
-
-Changes the default value of B<seize> for all PCI devices passed
-through to this VM. See B<seize> above.
-
-=item B<pci_power_mgmt=BOOLEAN>
-
-B<(HVM only)> Changes the default value of B<power_mgmt> for all PCI
-devices passed through to this VM. See B<power_mgmt>
-above.
-
-=item B<gfx_passthru=BOOLEAN|"STRING">
-
-Enable graphics device PCI passthrough. This option makes an assigned
-PCI graphics card become the primary graphics card in the VM. The QEMU
-emulated graphics adapter is disabled and the VNC console for the VM
-will not have any graphics output. All graphics output, including boot
-time QEMU BIOS messages from the VM, will go to the physical outputs
-of the passed through physical graphics card.
-
-The graphics card PCI device to pass through is chosen with the B<pci>
-option, in exactly the same way a normal Xen PCI device
-passthrough/assignment is done.  Note that B<gfx_passthru> does not do
-any kind of sharing of the GPU, so you can assign the GPU to only one
-single VM at a time.
-
-B<gfx_passthru> also enables various legacy VGA memory ranges, BARs, MMIOs,
-and ioports to be passed through to the VM, since those are required
-for correct operation of things like VGA BIOS, text mode, VBE, etc.
-
-Enabling the B<gfx_passthru> option also copies the physical graphics card
-video BIOS to the guest memory, and executes the VBIOS in the guest
-to initialize the graphics card.
-
-Most graphics adapters require vendor specific tweaks for properly
-working graphics passthrough. See the XenVGAPassthroughTestedAdapters
-L<http://wiki.xen.org/wiki/XenVGAPassthroughTestedAdapters> wiki page
-for graphics cards currently supported by B<gfx_passthru>.
-
-B<gfx_passthru> is currently supported both with the qemu-xen-traditional
-device-model and upstream qemu-xen device-model.
-
-When given as a boolean the B<gfx_passthru> option either disables graphics
-card passthrough or enables autodetection.
-
-When given as a string the B<gfx_passthru> option describes the type
-of device to enable. Note that this behavior is only supported with the
-upstream qemu-xen device-model. With qemu-xen-traditional IGD (Intel Graphics
-Device) is always assumed and options other than autodetect or explicit IGD
-will result in an error.
-
-Currently, valid values for the option are:
-
-=over 4
-
-=item B<0>
-
-Disables graphics device PCI passthrough.
-
-=item B<1>, B<"default">
-
-Enables graphics device PCI passthrough and autodetects the type of device
-which is being used.
-
-=item B<"igd">
-
-Enables graphics device PCI passthrough but forcing the type of device to
-Intel Graphics Device.
-
-=back
-
-Note that some graphics cards (AMD/ATI cards, for example) do not
-necessarily require the B<gfx_passthru> option, so you can use the normal Xen
-PCI passthrough to assign the graphics card as a secondary graphics
-card to the VM. The QEMU-emulated graphics card remains the primary
-graphics card, and VNC output is available from the QEMU-emulated
-primary adapter.
-
-More information about the Xen B<gfx_passthru> feature is available
-on the XenVGAPassthrough L<http://wiki.xen.org/wiki/XenVGAPassthrough>
-wiki page.
-
-=item B<rdm_mem_boundary=MBYTES>
-
-Number of megabytes to set for a boundary when checking for RDM conflicts.
-
-When RDM conflicts with RAM, RDM is probably scattered over the whole RAM
-space. Having multiple RDM entries would worsen this and lead to a complicated
-memory layout. Here we're trying to figure out a simple solution to
-avoid breaking the existing layout. When a conflict occurs,
-
-    #1. Above a predefined boundary
-        - move lowmem_end below the reserved region to solve the conflict;
-
-    #2. Below a predefined boundary
-        - Check if the policy is strict or relaxed.
-        A "strict" policy leads to a fail in libxl.
-        Note that when both policies are specified on a given region,
-        "strict" is always preferred.
-        The "relaxed" policy issues a warning message and also masks this
-        entry INVALID to indicate we shouldn't expose this entry to
-        hvmloader.
-
-The default value is 2048.
-
-=item B<dtdev=[ "DTDEV_PATH", "DTDEV_PATH", ...]>
-
-Specifies the host device tree nodes to passt hrough to this guest. Each
-DTDEV_PATH is an absolute path in the device tree.
-
-=item B<ioports=[ "IOPORT_RANGE", "IOPORT_RANGE", ...]>
-
-Allow the guest to access specific legacy I/O ports. Each B<IOPORT_RANGE>
-is given in hexadecimal format and may either be a range, e.g. C<2f8-2ff>
-(inclusive), or a single I/O port, e.g. C<2f8>.
-
-It is recommended to only use this option for trusted VMs under
-administrator's control.
-
-=item B<iomem=[ "IOMEM_START,NUM_PAGES[@GFN]", "IOMEM_START,NUM_PAGES[@GFN]", ...]>
-
-Allow auto-translated domains to access specific hardware I/O memory pages.
-
-B<IOMEM_START> is a physical page number. B<NUM_PAGES> is the number of pages,
-beginning with B<START_PAGE>, to allow access to. B<GFN> specifies the guest
-frame number where the mapping will start in the guest's address space. If
-B<GFN> is not specified, the mapping will be performed using B<IOMEM_START>
-as a start in the guest's address space, therefore performing a 1:1 mapping
-by default.
-All of these values must be given in hexadecimal format.
-
-Note that the IOMMU won't be updated with the mappings specified with this
-option. This option therefore should not be used to pass through any
-IOMMU-protected devices.
-
-It is recommended to only use this option for trusted VMs under
-administrator's control.
-
-=item B<irqs=[ NUMBER, NUMBER, ...]>
-
-Allow a guest to access specific physical IRQs.
-
-It is recommended to only use this option for trusted VMs under
-administrator's control.
-
-If vuart console is enabled then irq 32 is reserved for it. See
-L</vuart="uart"> to know how to enable vuart console.
-
-=item B<max_event_channels=N>
-
-Limit the guest to using at most N event channels (PV interrupts).
-Guests use hypervisor resources for each event channel they use.
-
-The default of 1023 should be sufficient for typical guests.  The
-maximum value depends on what the guest supports.  Guests supporting the
-FIFO-based event channel ABI support up to 131,071 event channels.
-Other guests are limited to 4095 (64-bit x86 and ARM) or 1023 (32-bit
-x86).
-
-=item B<vdispl=[ "VDISPL_SPEC_STRING", "VDISPL_SPEC_STRING", ...]>
-
-Specifies the virtual display devices to be provided to the guest.
-
-Each B<VDISPL_SPEC_STRING> is a comma-separated list of C<KEY=VALUE>
-settings, from the following list:
-
-=over 4
-
-=item C<backend=DOMAIN>
-
-Specifies the backend domain name or id. If not specified Domain-0 is used.
-
-=item C<be-alloc=BOOLEAN>
-
-Indicates if backend can be a buffer provider/allocator for this domain. See
-display protocol for details.
-
-=item C<connectors=CONNECTORS>
-
-Specifies virtual connectors for the device in following format
-<id>:<W>x<H>;<id>:<W>x<H>... where:
-
-=over 4
-
-=item C<id>
-
-String connector unique id. Space, comma symbols are not allowed.
-
-=item C<W>
-
-Connector width in pixels.
-
-=item C<H>
-
-Connector height in pixels.
-
-=back
-
-B<EXAMPLE>
-
-=over 4
-
-connectors=id0:1920x1080;id1:800x600;id2:640x480
-
-=back
-
-=back
-
-=item B<dm_restrict=BOOLEAN>
-
-Restrict the device model after startup,
-to limit the consequencese of security vulnerabilities in qemu.
-
-With this feature enabled,
-a compromise of the device model,
-via such a vulnerability,
-will not provide a privilege escalation attack on the whole system.
-
-This feature is a B<technology preview>.
-There are some significant limitations:
-
-=over 4
-
-=item
-
-This is not likely to work at all for PV guests
-nor guests using qdisk backends for their block devices.
-
-=item
-
-You must have a new enough qemu.
-In particular,
-if your qemu does not have the commit
-B<xen: restrict: use xentoolcore_restrict_all>
-the restriction request will be silently ineffective!
-
-=item
-
-The mechanisms used are not effective against
-denial of service problems.
-A compromised qemu can probably still impair
-or perhaps even prevent
-the proper functioning of the whole system,
-(at the very least, but not limited to,
-through resource exhaustion).
-
-=item
-
-It is not known whether the protection is
-effective when a domain is migrated.
-
-=item
-
-Some domain management functions do not work.
-For example, cdrom insert will fail.
-
-=item
-
-You should say C<vga="none">.
-Domains with stdvga graphics cards to not work.
-Domains with cirrus vga may seem to work.
-
-=item
-
-You must create user(s) for qemu to run as.
-
-Ideally, set aside a range of 32752 uids
-(from N to N+32751)
-and create a user
-whose name is B<xen-qemuuser-range-base>
-and whose uid is N
-and whose gid is a plain unprivileged gid.
-libxl will use one such user for each domid.
-
-Alternatively, either create
-B<xen-qemuuser-domid$domid>
-for every $domid from 1 to 32751 inclusive,
-or
-B<xen-qemuuser-shared>
-(in which case different guests will not
-be protected against each other).
-
-=item
-
-There are no countermeasures taken against reuse
-of the same unix user (uid)
-for subsequent domains,
-even if the B<xen-qemuuser-domid$domid> users are created.
-So a past domain with the same domid may be able to
-interferer with future domains.
-Possibly, even after a reboot.
-
-=item
-
-A compromised qemu will be able to read world-readable
-files in the dom0 operating system.
-
-=item
-
-Because of these limitations, this functionality,
-while it may enhance your security,
-should not be relied on.
-Any further limitations discovered in the current version
-will B<not> be handled via the Xen Project Security Process.
-
-=item
-
-In the future as we enhance this feature to improve the security,
-we may break backward compatibility.
-
-=back
-
-=item B<vsnd=[ VCARD_SPEC, VCARD_SPEC, ... ]>
-
-Specifies the virtual sound cards to be provided to the guest.
-Each B<VCARD_SPEC> is a list, which has a form of
-"[VSND_ITEM_SPEC, VSND_ITEM_SPEC, ... ]" (without the quotes).
-The virtual sound card has hierarchical structure.
-Every card has a set of PCM devices and streams, each could be individually
-configured.
-
-B<VSND_ITEM_SPEC> describes individual item parameters.
-B<VSND_ITEM_SPEC> is a string of comma separated item parameters
-headed by item identifier. Each item parameter is C<KEY=VALUE> pair:
-
-=over 4
-
-"identifier, param = value, ...".
-
-=back
-
-Identifier shall be one of following values: "CARD", "PCM", "STREAM".
-The child item treated as belonging to the previously defined parent item.
-
-All parameters are optional.
-
-There are group of parameters which are common for all items.
-This group can be defined at higher level of the hierarchy and be fully or
-partially re-used by the underlying layers. These parameters are:
-
-=over 4
-
-* number of channels (min/max)
-
-* supported sample rates
-
-* supported sample formats
-
-=back
-
-E.g. one can define these values for the whole card, device or stream.
-Every underlying layer in turn can re-define some or all of them to better
-fit its needs. For example, card may define number of channels to be
-in [1; 8] range, and some particular stream may be limited to [1; 2] only.
-The rule is that the underlying layer must be a subset of the upper layer
-range.
-
-I<COMMON parameters:>
-
-=over 4
-
-=over 4
-
-=item B<sample-rates=RATES>
-
-List of integer values separated by semicolon: sample-rates=8000;22050;44100
-
-=item B<sample-formats=FORMATS>
-
-List of string values separated by semicolon: sample-formats=s16_le;s8;u32_be
-
-Supported formats: s8, u8, s16_le, s16_be, u16_le, u16_be, s24_le, s24_be,
-u24_le, u24_be, s32_le, s32_be, u32_le, u32_be, float_le, float_be,
-float64_le, float64_be, iec958_subframe_le, iec958_subframe_be,
-mu_law, a_law, ima_adpcm, mpeg, gsm
-
-=item B<channels-min=NUMBER>
-
-The minimum amount of channels.
-
-=item B<channels-max=NUMBER>
-
-The maximum amount of channels.
-
-=item B<buffer-size=NUMBER>
-
-The maximum size in octets of the buffer to allocate per stream.
-
-=back
-
-=back
-
-I<CARD specification:>
-
-=over 4
-
-=over 4
-
-=item B<backend=domain-id>
-
-Specify the backend domain name or id, defaults to dom0.
-
-=item B<short-name=STRING>
-
-Short name of the virtual sound card.
-
-=item B<long-name=STRING>
-
-Long name of the virtual sound card.
-
-=back
-
-=back
-
-I<PCM specification:>
-
-=over 4
-
-=over 4
-
-=item B<name=STRING>
-
-Name of the PCM sound device within the virtual sound card.
-
-=back
-
-=back
-
-I<STREAM specification:>
-
-=over 4
-
-=over 4
-
-=item B<unique-id=STRING>
-
-Unique stream identifier.
-
-=item B<type=TYPE>
-
-Stream type: "p" - playback stream, "c" - capture stream.
-
-=back
-
-=back
-
-I<EXAMPLE:>
-
-    vsnd = [
-        ['CARD, short-name=Main, sample-formats=s16_le;s8;u32_be',
-            'PCM, name=Main',
-                'STREAM, id=0, type=p',
-                'STREAM, id=1, type=c, channels-max=2'
-        ],
-        ['CARD, short-name=Second',
-            'PCM, name=Second, buffer-size=1024',
-                'STREAM, id=2, type=p',
-                'STREAM, id=3, type=c'
-        ]
-    ]
-
-=item B<vkb=[ "VKB_SPEC_STRING", "VKB_SPEC_STRING", ...]>
-
-Specifies the virtual keyboard device to be provided to the guest.
-
-Each B<VKB_SPEC_STRING> is a comma-separated list of C<KEY=VALUE>
-settings from the following list:
-
-=over 4
-
-=item B<unique-id=STRING>
-
-Specifies the unique input device id.
-
-=item B<backend=domain-id>
-
-Specifies the backend domain name or id.
-
-=item B<backend-type=type>
-
-Specifies the backend type: qemu - for QEMU backend or linux - for Linux PV
-domain.
-
-=item B<feature-disable-keyboard=BOOLEAN>
-
-Indicates if keyboard device is disabled.
-
-=item B<feature-disable-pointer=BOOLEAN>
-
-Indicates if pointer device is disabled.
-
-=item B<feature-abs-pointer=BOOLEAN>
-
-Indicates if pointer device can return absolute coordinates.
-
-=item B<feature-raw-pointer=BOOLEAN>
-
-Indicates if pointer device can return raw (unscaled) absolute coordinates.
-
-=item B<feature-multi-touch=BOOLEAN>
-
-Indicates if input device supports multi touch.
-
-=item B<multi-touch-width=MULTI_TOUCH_WIDTH>
-
-Set maximum width for multi touch device.
-
-=item B<multi-touch-height=MULTI_TOUCH_HEIGHT>
-
-Set maximum height for multi touch device.
-
-=item B<multi-touch-num-contacts=MULTI_TOUCH_NUM_CONTACTS>
-
-Set maximum contacts number for multi touch device.
-
-=item B<width=WIDTH>
-
-Set maximum width for pointer device.
-
-=item B<height=HEIGHT>
-
-Set maximum height for pointer device.
-
-=back
-
-=back
-
-=head2 Paravirtualised (PV) Guest Specific Options
-
-The following options apply only to Paravirtual (PV) guests.
-
-=over 4
-
-=item B<bootloader="PROGRAM">
-
-Run C<PROGRAM> to find the kernel image and ramdisk to use.  Normally
-C<PROGRAM> would be C<pygrub>, which is an emulation of
-grub/grub2/syslinux. Either B<kernel> or B<bootloader> must be specified
-for PV guests.
-
-=item B<bootloader_args=[ "ARG", "ARG", ...]>
-
-Append B<ARG>s to the arguments to the B<bootloader>
-program. Alternatively if the argument is a simple string then it will
-be split into words at whitespace B<(this second option is deprecated)>.
-
-=item B<e820_host=BOOLEAN>
-
-Selects whether to expose the host e820 (memory map) to the guest via
-the virtual e820. When this option is false (0) the guest pseudo-physical
-address space consists of a single contiguous RAM region. When this
-option is specified the virtual e820 instead reflects the host e820
-and contains the same PCI holes. The total amount of RAM represented
-by the memory map is always the same, this option configures only how
-it is laid out.
-
-Exposing the host e820 to the guest gives the guest kernel the
-opportunity to set aside the required part of its pseudo-physical
-address space in order to provide address space to map passedthrough
-PCI devices. It is guest Operating System dependent whether this
-option is required, specifically it is required when using a mainline
-Linux ("pvops") kernel. This option defaults to true (1) if any PCI
-passthrough devices are configured and false (0) otherwise. If you do not
-configure any passthrough devices at domain creation time but expect
-to hotplug devices later then you should set this option. Conversely
-if your particular guest kernel does not require this behaviour then
-it is safe to allow this to be enabled but you may wish to disable it
-anyway.
-
-=back
-
-=head2 Fully-virtualised (HVM) Guest Specific Options
-
-The following options apply only to Fully-virtualised (HVM) guests.
-
-=head3 Boot Device
-
-=over 4
-
-=item B<boot="STRING">
-
-Specifies the emulated virtual device to boot from.
-
-Possible values are:
-
-=over 4
-
-=item B<c>
-
-Hard disk.
-
-=item B<d>
-
-CD-ROM.
-
-=item B<n>
-
-Network / PXE.
-
-=back
-
-B<Note:> multiple options can be given and will be attempted in the order they
-are given, e.g. to boot from CD-ROM but fall back to the hard disk you can
-specify it as B<dc>.
-
-The default is B<cd>, meaning try booting from the hard disk first, but fall
-back to the CD-ROM.
-
-
-=back
-
-=head3 Emulated disk controller type
-
-=over 4
-
-=item B<hdtype=STRING>
-
-Specifies the hard disk type.
-
-Possible values are:
-
-=over 4
-
-=item B<ide>
-
-If thise mode is specified B<xl> adds an emulated IDE controller, which is
-suitable even for older operation systems.
-
-=item B<ahci>
-
-If this mode is specified, B<xl> adds an ich9 disk controller in AHCI mode and
-uses it with upstream QEMU to emulate disks instead of IDE. It decreases boot
-time but may not be supported by default in older operating systems, e.g.
-Windows XP.
-
-=back
-
-The default is B<ide>.
-
-=back
-
-=head3 Paging
-
-The following options control the mechanisms used to virtualise guest
-memory.  The defaults are selected to give the best results for the
-common cases so you should normally leave these options
-unspecified.
-
-=over 4
-
-=item B<hap=BOOLEAN>
-
-Turns "hardware assisted paging" (the use of the hardware nested page
-table feature) on or off.  This feature is called EPT (Extended Page
-Tables) by Intel and NPT (Nested Page Tables) or RVI (Rapid
-Virtualisation Indexing) by AMD. If turned
-off, Xen will run the guest in "shadow page table" mode where the
-guest's page table updates and/or TLB flushes etc. will be emulated.
-Use of HAP is the default when available.
-
-=item B<oos=BOOLEAN>
-
-Turns "out of sync pagetables" on or off.  When running in shadow page
-table mode, the guest's page table updates may be deferred as
-specified in the Intel/AMD architecture manuals.  However, this may
-expose unexpected bugs in the guest, or find bugs in Xen, so it is
-possible to disable this feature.  Use of out of sync page tables,
-when Xen thinks it appropriate, is the default.
-
-=item B<shadow_memory=MBYTES>
-
-Number of megabytes to set aside for shadowing guest pagetable pages
-(effectively acting as a cache of translated pages) or to use for HAP
-state. By default this is 1MB per guest vCPU plus 8KB per MB of guest
-RAM. You should not normally need to adjust this value. However, if you
-are not using hardware assisted paging (i.e. you are using shadow
-mode) and your guest workload consists of a very large number of
-similar processes then increasing this value may improve performance.
-
-=back
-
-=head3 Processor and Platform Features
-
-The following options allow various processor and platform level
-features to be hidden or exposed from the guest's point of view. This
-can be useful when running older guest Operating Systems which may
-misbehave when faced with more modern features. In general, you should
-accept the defaults for these options wherever possible.
-
-=over 4
-
-=item B<bios="STRING">
-
-Select the virtual firmware that is exposed to the guest.
-By default, a guess is made based on the device model, but sometimes
-it may be useful to request a different one, like UEFI.
-
-=over 4
-
-=item B<rombios>
-
-Loads ROMBIOS, a 16-bit x86 compatible BIOS. This is used by default
-when B<device_model_version=qemu-xen-traditional>. This is the only BIOS
-option supported when B<device_model_version=qemu-xen-traditional>. This is
-the BIOS used by all previous Xen versions.
-
-=item B<seabios>
-
-Loads SeaBIOS, a 16-bit x86 compatible BIOS. This is used by default
-with device_model_version=qemu-xen.
-
-=item B<ovmf>
-
-Loads OVMF, a standard UEFI firmware by Tianocore project.
-Requires device_model_version=qemu-xen.
-
-=back
-
-=item B<bios_path_override="PATH">
-
-Override the path to the blob to be used as BIOS. The blob provided here MUST
-be consistent with the B<bios=> which you have specified. You should not
-normally need to specify this option.
-
-This option does not have any effect if using B<bios="rombios"> or
-B<device_model_version="qemu-xen-traditional">.
-
-=item B<pae=BOOLEAN>
-
-Hide or expose the IA32 Physical Address Extensions. These extensions
-make it possible for a 32 bit guest Operating System to access more
-than 4GB of RAM. Enabling PAE also enabled other features such as
-NX. PAE is required if you wish to run a 64-bit guest Operating
-System. In general, you should leave this enabled and allow the guest
-Operating System to choose whether or not to use PAE. (X86 only)
-
-=item B<acpi=BOOLEAN>
-
-Expose ACPI (Advanced Configuration and Power Interface) tables from
-the virtual firmware to the guest Operating System. ACPI is required
-by most modern guest Operating Systems. This option is enabled by
-default and usually you should omit it. However, it may be necessary to
-disable ACPI for compatibility with some guest Operating Systems.
-This option is true for x86 while it's false for ARM by default.
-
-=item B<acpi_s3=BOOLEAN>
-
-Include the S3 (suspend-to-ram) power state in the virtual firmware
-ACPI table. True (1) by default.
-
-=item B<acpi_s4=BOOLEAN>
-
-Include S4 (suspend-to-disk) power state in the virtual firmware ACPI
-table. True (1) by default.
-
-=item B<acpi_laptop_slate=BOOLEAN>
-
-Include the Windows laptop/slate mode switch device in the virtual
-firmware ACPI table. False (0) by default.
-
-=item B<apic=BOOLEAN>
-
-B<(x86 only)> Include information regarding APIC (Advanced Programmable Interrupt
-Controller) in the firmware/BIOS tables on a single processor
-guest. This causes the MP (multiprocessor) and PIR (PCI Interrupt
-Routing) tables to be exported by the virtual firmware. This option
-has no effect on a guest with multiple virtual CPUs as they must
-always include these tables. This option is enabled by default and you
-should usually omit it but it may be necessary to disable these
-firmware tables when using certain older guest Operating
-Systems. These tables have been superseded by newer constructs within
-the ACPI tables.
-
-=item B<nx=BOOLEAN>
-
-B<(x86 only)> Hides or exposes the No-eXecute capability. This allows a guest
-Operating System to map pages in such a way that they cannot be executed which
-can enhance security. This options requires that PAE also be
-enabled.
-
-=item B<hpet=BOOLEAN>
-
-B<(x86 only)> Enables or disables HPET (High Precision Event Timer). This
-option is enabled by default and you should usually omit it.
-It may be necessary to disable the HPET in order to improve compatibility with
-guest Operating Systems.
-
-=item B<altp2m="MODE">
-
-B<(x86 only)> Specifies the access mode to the alternate-p2m capability.
-Alternate-p2m allows a guest to manage multiple p2m guest physical "memory
-views" (as opposed to a single p2m).
-You may want this option if you want to access-control/isolate
-access to specific guest physical memory pages accessed by the guest, e.g. for
-domain memory introspection or for isolation/access-control of memory between
-components within a single guest domain. This option is disabled by default.
-
-The valid values are as follows:
-
-=over 4
-
-=item B<disabled>
-
-Altp2m is disabled for the domain (default).
-
-=item B<mixed>
-
-The mixed mode allows access to the altp2m interface for both in-guest
-and external tools as well.
-
-=item B<external>
-
-Enables access to the alternate-p2m capability by external privileged tools.
-
-=item B<limited>
-
-Enables limited access to the alternate-p2m capability,
-ie. giving the guest access only to enable/disable the VMFUNC and #VE features.
-
-=back
-
-=item B<altp2mhvm=BOOLEAN>
-
-Enables or disables HVM guest access to alternate-p2m capability.
-Alternate-p2m allows a guest to manage multiple p2m guest physical
-"memory views" (as opposed to a single p2m). This option is
-disabled by default and is available only to HVM domains.
-You may want this option if you want to access-control/isolate
-access to specific guest physical memory pages accessed by
-the guest, e.g. for HVM domain memory introspection or
-for isolation/access-control of memory between components within
-a single guest HVM domain. B<This option is deprecated, use the option
-"altp2m" instead.>
-
-B<Note>: While the option "altp2mhvm" is deprecated, legacy applications for
-x86 systems will continue to work using it.
-
-=item B<nestedhvm=BOOLEAN>
-
-Enable or disables guest access to hardware virtualisation features,
-e.g. it allows a guest Operating System to also function as a
-hypervisor. You may want this
-option if you want to run another hypervisor (including another copy
-of Xen) within a Xen guest or to support a guest Operating System
-which uses hardware virtualisation extensions (e.g. Windows XP
-compatibility mode on more modern Windows OS).
-This option is disabled by default.
-
-=item B<cpuid="LIBXL_STRING"> or B<cpuid=[ "XEND_STRING", "XEND_STRING" ]>
-
-Configure the value returned when a guest executes the CPUID instruction.
-Two versions of config syntax are recognized: libxl and xend.
-
-The libxl syntax is a comma separated list of key=value pairs, preceded by the
-word "host". A few keys take a numerical value, all others take a single
-character which describes what to do with the feature bit.
-
-Possible values for a single feature bit:
-  '1' -> force the corresponding bit to 1
-  '0' -> force to 0
-  'x' -> Get a safe value (pass through and mask with the default policy)
-  'k' -> pass through the host bit value
-  's' -> as 'k' but preserve across save/restore and migration (not implemented)
-
-Note: when specifying B<cpuid> for hypervisor leaves (0x4000xxxx major group)
-only the lowest 8 bits of leaf's 0x4000xx00 EAX register are processed, the
-rest are ignored (these 8 bits signify maximum number of hypervisor leaves).
-
-List of keys taking a value:
-apicidsize brandid clflush family localapicid maxleaf maxhvleaf model nc
-proccount procpkg stepping
-
-List of keys taking a character:
-3dnow 3dnowext 3dnowprefetch abm acpi adx aes altmovcr8 apic arat avx avx2
-avx512-4fmaps avx512-4vnniw avx512bw avx512cd avx512dq avx512er avx512f
-avx512ifma avx512pf avx512vbmi avx512vl bmi1 bmi2 clflushopt clfsh clwb cmov
-cmplegacy cmpxchg16 cmpxchg8 cmt cntxid dca de ds dscpl dtes64 erms est extapic
-f16c ffxsr fma fma4 fpu fsgsbase fxsr hle htt hypervisor ia64 ibs invpcid
-invtsc lahfsahf lm lwp mca mce misalignsse mmx mmxext monitor movbe mpx msr
-mtrr nodeid nx ospke osvw osxsave pae page1gb pat pbe pcid pclmulqdq pdcm
-perfctr_core perfctr_nb pge pku popcnt pse pse36 psn rdrand rdseed rdtscp rtm
-sha skinit smap smep smx ss sse sse2 sse3 sse4.1 sse4.2 sse4_1 sse4_2 sse4a
-ssse3 svm svm_decode svm_lbrv svm_npt svm_nrips svm_pausefilt svm_tscrate
-svm_vmcbclean syscall sysenter tbm tm tm2 topoext tsc tsc-deadline tsc_adjust
-umip vme vmx wdt x2apic xop xsave xtpr
-
-
-The xend syntax is a list of values in the form of
-'leafnum:register=bitstring,register=bitstring'
-  "leafnum" is the requested function,
-  "register" is the response register to modify
-  "bitstring" represents all bits in the register, its length must be 32 chars.
-  Each successive character represent a lesser-significant bit, possible values
-  are listed above in the libxl section.
-
-Example to hide two features from the guest: 'tm', which is bit #29 in EDX, and
-'pni' (SSE3), which is bit #0 in ECX:
-
-xend: [ "1:ecx=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0,edx=xx0xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ]
-
-libxl: "host,tm=0,sse3=0"
-
-More info about the CPUID instruction can be found in the processor manuals,
-and on Wikipedia: L<http://en.wikipedia.org/wiki/CPUID>
-
-=item B<acpi_firmware="STRING">
-
-Specifies a path to a file that contains extra ACPI firmware tables to pass into
-a guest. The file can contain several tables in their binary AML form
-concatenated together. Each table self describes its length so no additional
-information is needed. These tables will be added to the ACPI table set in the
-guest. Note that existing tables cannot be overridden by this feature. For
-example, this cannot be used to override tables like DSDT, FADT, etc.
-
-=item B<smbios_firmware="STRING">
-
-Specifies a path to a file that contains extra SMBIOS firmware structures to
-pass into a guest. The file can contain a set of DMTF predefined structures
-which will override the internal defaults. Not all predefined structures can be
-overridden,
-only the following types: 0, 1, 2, 3, 11, 22, 39. The file can also contain any
-number of vendor defined SMBIOS structures (type 128 - 255). Since SMBIOS
-structures do not present their overall size, each entry in the file must be
-preceded by a 32b integer indicating the size of the following structure.
-
-=item B<ms_vm_genid="OPTION">
-
-Provide a VM generation ID to the guest.
-
-The VM generation ID is a 128-bit random number that a guest may use
-to determine if the guest has been restored from an earlier snapshot
-or cloned.
-
-This is required for Microsoft Windows Server 2012 (and later) domain
-controllers.
-
-Valid options are:
-
-=over 4
-
-=item B<generate>
-
-Generate a random VM generation ID every time the domain is created or
-restored.
-
-=item B<none>
-
-Do not provide a VM generation ID.
-
-=back
-
-See also "Virtual Machine Generation ID" by Microsoft:
-L<http://www.microsoft.com/en-us/download/details.aspx?id=30707>
-
-=back 
-
-=head3 Guest Virtual Time Controls
-
-=over 4
-
-=item B<tsc_mode="MODE">
-
-B<(x86 only)> Specifies how the TSC (Time Stamp Counter) should be provided to
-the guest. B<Specifying this option as a number is deprecated.>
-
-Options are:
-
-=over 4
-
-=item B<default>
-
-Guest rdtsc/p is executed natively when monotonicity can be guaranteed
-and emulated otherwise (with frequency scaled if necessary).
-
-If a HVM container in B<default> TSC mode is created on a host that
-provides constant host TSC, its guest TSC frequency will be the same
-as the host. If it is later migrated to another host that provide
-constant host TSC and supports Intel VMX TSC scaling/AMD SVM TSC
-ratio, its guest TSC frequency will be the same before and after
-migration, and guest rdtsc/p will be executed natively after migration as well
-
-=item B<always_emulate>
-
-Guest rdtsc/p is always emulated and the virtual TSC will appear to increment
-(kernel and user) at a fixed 1GHz rate, regardless of the pCPU HZ rate or
-power state. Although there is an overhead associated with emulation,
-this will NOT affect underlying CPU performance.
-
-=item B<native>
-
-Guest rdtsc/p is always executed natively (no monotonicity/frequency
-guarantees). Guest rdtsc/p is emulated at native frequency if unsupported
-by h/w, else executed natively.
-
-=item B<native_paravirt>
-
-This mode has been removed.
-
-=back
-
-Please see B<xen-tscmode(7)> for more information on this option.
-
-=item B<localtime=BOOLEAN>
-
-Set the real time clock to local time or to UTC. False (0) by default,
-i.e. set to UTC.
-
-=item B<rtc_timeoffset=SECONDS>
-
-Set the real time clock offset in seconds. No offset (0) by default.
-
-=item B<vpt_align=BOOLEAN>
-
-Specifies that periodic Virtual Platform Timers should be aligned to
-reduce guest interrupts. Enabling this option can reduce power
-consumption, especially when a guest uses a high timer interrupt
-frequency (HZ) values. The default is true (1).
-
-=item B<timer_mode="MODE">
-
-Specifies the mode for Virtual Timers. The valid values are as follows:
-
-=over 4
-
-=item B<delay_for_missed_ticks>
-
-Delay for missed ticks. Do not advance a vCPU's time beyond the
-correct delivery time for interrupts that have been missed due to
-preemption. Deliver missed interrupts when the vCPU is rescheduled and
-advance the vCPU's virtual time stepwise for each one.
-
-=item B<no_delay_for_missed_ticks>
-
-No delay for missed ticks. As above, missed interrupts are delivered,
-but guest time always tracks wallclock (i.e., real) time while doing
-so. This is the default.
-
-=item B<no_missed_ticks_pending>
-
-No missed interrupts are held pending. Instead, to ensure ticks are
-delivered at some non-zero rate, if we detect missed ticks then the
-internal tick alarm is not disabled if the vCPU is preempted during
-the next tick period.
-
-=item B<one_missed_tick_pending>
-
-One missed tick pending. Missed interrupts are collapsed
-together and delivered as one 'late tick'.  Guest time always tracks
-wallclock (i.e., real) time.
-
-=back
-
-=back
-
-=head3 Memory layout
-
-=over 4
-
-=item B<mmio_hole=MBYTES>
-
-Specifies the size the MMIO hole below 4GiB will be.  Only valid for
-B<device_model_version="qemu-xen">.
-
-Cannot be smaller than 256. Cannot be larger than 3840.
-
-Known good large value is 3072.
-
-=back
-
-=head3 Support for Paravirtualisation of HVM Guests
-
-The following options allow Paravirtualised features (such as devices)
-to be exposed to the guest Operating System in an HVM guest.
-Utilising these features requires specific guest support but when
-available they will result in improved performance.
-
-=over 4
-
-=item B<xen_platform_pci=BOOLEAN>
-
-Enable or disable the Xen platform PCI device.  The presence of this
-virtual device enables a guest Operating System (subject to the
-availability of suitable drivers) to make use of paravirtualisation
-features such as disk and network devices etc. Enabling these drivers
-improves performance and is strongly recommended when available. PV
-drivers are available for various Operating Systems including HVM
-Linux L<http://wiki.xen.org/wiki/XenLinuxPVonHVMdrivers> and Microsoft
-Windows L<http://wiki.xen.org/wiki/XenWindowsGplPv>.
-
-Setting B<xen_platform_pci=0> with the default device_model "qemu-xen"
-requires at least QEMU 1.6.
-
-=item B<viridian=[ "GROUP", "GROUP", ...]> or B<viridian=BOOLEAN>
-
-The groups of Microsoft Hyper-V (AKA viridian) compatible enlightenments
-exposed to the guest. The following groups of enlightenments may be
-specified:
-
-=over 4
-
-=item B<base>
-
-This group incorporates the Hypercall MSRs, Virtual processor index MSR,
-and APIC access MSRs. These enlightenments can improve performance of
-Windows Vista and Windows Server 2008 onwards and setting this option
-for such guests is strongly recommended.
-This group is also a pre-requisite for all others. If it is disabled
-then it is an error to attempt to enable any other group.
-
-=item B<freq>
-
-This group incorporates the TSC and APIC frequency MSRs. These
-enlightenments can improve performance of Windows 7 and Windows
-Server 2008 R2 onwards.
-
-=item B<time_ref_count>
-
-This group incorporates Partition Time Reference Counter MSR. This
-enlightenment can improve performance of Windows 8 and Windows
-Server 2012 onwards.
-
-=item B<reference_tsc>
-
-This set incorporates the Partition Reference TSC MSR. This
-enlightenment can improve performance of Windows 7 and Windows
-Server 2008 R2 onwards.
-
-=item B<hcall_remote_tlb_flush>
-
-This set incorporates use of hypercalls for remote TLB flushing.
-This enlightenment may improve performance of Windows guests running
-on hosts with higher levels of (physical) CPU contention.
-
-=item B<apic_assist>
-
-This set incorporates use of the APIC assist page to avoid EOI of
-the local APIC.
-This enlightenment may improve performance of guests that make use of
-per-vCPU event channel upcall vectors.
-Note that this enlightenment will have no effect if the guest is
-using APICv posted interrupts.
-
-=item B<crash_ctl>
-
-This group incorporates the crash control MSRs. These enlightenments
-allow Windows to write crash information such that it can be logged
-by Xen.
-
-=item B<defaults>
-
-This is a special value that enables the default set of groups, which
-is currently the B<base>, B<freq>, B<time_ref_count>, B<apic_assist>
-and B<crash_ctl> groups.
-
-=item B<all>
-
-This is a special value that enables all available groups.
-
-=back
-
-Groups can be disabled by prefixing the name with '!'. So, for example,
-to enable all groups except B<freq>, specify:
-
-=over 4
-
-B<viridian=[ "all", "!freq" ]>
-
-=back
-
-For details of the enlightenments see the latest version of Microsoft's
-Hypervisor Top-Level Functional Specification.
-
-The enlightenments should be harmless for other versions of Windows
-(although they will not give any benefit) and the majority of other
-non-Windows OSes.
-However it is known that they are incompatible with some other Operating
-Systems and in some circumstance can prevent Xen's own paravirtualisation
-interfaces for HVM guests from being used.
-
-The viridian option can be specified as a boolean. A value of true (1)
-is equivalent to the list [ "defaults" ], and a value of false (0) is
-equivalent to an empty list.
-
-=back
-
-=head3 Emulated VGA Graphics Device
-
-The following options control the features of the emulated graphics
-device.  Many of these options behave similarly to the equivalent key
-in the B<VFB_SPEC_STRING> for configuring virtual frame buffer devices
-(see above).
-
-=over 4
-
-=item B<videoram=MBYTES>
-
-Sets the amount of RAM which the emulated video card will contain,
-which in turn limits the resolutions and bit depths which will be
-available.
-
-When using the qemu-xen-traditional device-model, the default as well as
-minimum amount of video RAM for stdvga is 8 MB, which is sufficient for e.g.
-1600x1200 at 32bpp. For the upstream qemu-xen device-model, the default and
-minimum is 16 MB.
-
-When using the emulated Cirrus graphics card (B<vga="cirrus">) and the
-qemu-xen-traditional device-model, the amount of video RAM is fixed at 4 MB,
-which is sufficient for 1024x768 at 32 bpp. For the upstream qemu-xen
-device-model, the default and minimum is 8 MB.
-
-For QXL vga, both the default and minimal are 128MB.
-If B<videoram> is set less than 128MB, an error will be triggered.
-
-=item B<stdvga=BOOLEAN>
-
-Speficies a standard VGA card with VBE (VESA BIOS Extensions) as the
-emulated graphics device. If your guest supports VBE 2.0 or
-later (e.g. Windows XP onwards) then you should enable this.
-stdvga supports more video ram and bigger resolutions than Cirrus.
-The default is false (0) which means to emulate
-a Cirrus Logic GD5446 VGA card.
-B<This option is deprecated, use vga="stdvga" instead>.
-
-=item B<vga="STRING">
-
-Selects the emulated video card.
-Options are: B<none>, B<stdvga>, B<cirrus> and B<qxl>.
-The default is B<cirrus>.
-
-In general, QXL should work with the Spice remote display protocol
-for acceleration, and a QXL driver is necessary in the guest in that case.
-QXL can also work with the VNC protocol, but it will be like a standard
-VGA card without acceleration.
-
-=item B<vnc=BOOLEAN>
-
-Allow access to the display via the VNC protocol.  This enables the
-other VNC-related settings.  The default is (1) enabled.
-
-=item B<vnclisten="ADDRESS[:DISPLAYNUM]">
-
-Specifies the IP address and, optionally, the VNC display number to use.
-
-=item B<vncdisplay=DISPLAYNUM>
-
-Specifies the VNC display number to use. The actual TCP port number
-will be DISPLAYNUM+5900.
-
-=item B<vncunused=BOOLEAN>
-
-Requests that the VNC display setup searches for a free TCP port to use.
-The actual display used can be accessed with B<xl vncviewer>.
-
-=item B<vncpasswd="PASSWORD">
-
-Specifies the password for the VNC server. If the password is set to an
-empty string, authentication on the VNC server will be disabled
-allowing any user to connect.
-
-=item B<keymap="LANG">
-
-Configure the keymap to use for the keyboard associated with this
-display. If the input method does not easily support raw keycodes
-(e.g. this is often the case when using VNC) then this allows us to
-correctly map the input keys into keycodes seen by the guest. The
-specific values which are accepted are defined by the version of the
-device-model which you are using. See B<Keymaps> below or consult the
-B<qemu(1)> manpage. The default is B<en-us>.
-
-=item B<sdl=BOOLEAN>
-
-Specifies that the display should be presented via an X window (using
-Simple DirectMedia Layer). The default is (0) not enabled.
-
-=item B<opengl=BOOLEAN>
-
-Enable OpenGL acceleration of the SDL display. Only effects machines
-using B<device_model_version="qemu-xen-traditional"> and only if the
-device-model was compiled with OpenGL support. Default is (0) false.
-
-=item B<nographic=BOOLEAN>
-
-Enable or disable the virtual graphics device.  The default is to
-provide a VGA graphics device but this option can be used to disable
-it.
-
-=back
-
-=head3 Spice Graphics Support
-
-The following options control the features of SPICE.
-
-=over 4
-
-=item B<spice=BOOLEAN>
-
-Allow access to the display via the SPICE protocol.  This enables the
-other SPICE-related settings.
-
-=item B<spicehost="ADDRESS">
-
-Specifies the interface address to listen on if given, otherwise any
-interface.
-
-=item B<spiceport=NUMBER>
-
-Specifies the port to listen on by the SPICE server if SPICE is
-enabled.
-
-=item B<spicetls_port=NUMBER>
-
-Specifies the secure port to listen on by the SPICE server if SPICE
-is enabled. At least one of B<spiceport> or B<spicetls_port> must be
-given if SPICE is enabled.
-
-B<Note:> the options depending on B<spicetls_port>
-have not been supported.
-
-=item B<spicedisable_ticketing=BOOLEAN>
-
-Enable clients to connect without specifying a password. When disabled,
-B<spicepasswd> must be set. The default is (0) false.
-
-=item B<spicepasswd="PASSWORD">
-
-Specify the password which is used by clients for establishing a connection.
-
-=item B<spiceagent_mouse=BOOLEAN>
-
-Whether SPICE agent is used for client mouse mode. The default is (1) true.
-
-=item B<spicevdagent=BOOLEAN>
-
-Enables the SPICE vdagent. The SPICE vdagent is an optional component for
-enhancing user experience and performing guest-oriented management
-tasks. Its features include: client mouse mode (no need to grab the mouse
-by the client, no mouse lag), automatic adjustment of screen resolution,
-copy and paste (text and image) between the client and the guest. It also
-requires the vdagent service installed on the guest OS to work.
-The default is (0) disabled.
-
-=item B<spice_clipboard_sharing=BOOLEAN>
-
-Enables SPICE clipboard sharing (copy/paste). It requires that
-B<spicevdagent> is enabled. The default is (0) false.
-
-=item B<spiceusbredirection=NUMBER>
-
-Enables SPICE USB redirection. Creates a NUMBER of USB redirection channels
-for redirecting up to 4 USB devices from the SPICE client to the guest's QEMU.
-It requires an USB controller and, if not defined, it will automatically add
-an USB2.0 controller. The default is (0) disabled.
-
-=item B<spice_image_compression="COMPRESSION">
-
-Specifies what image compression is to be used by SPICE (if given), otherwise
-the QEMU default will be used. Please see the documentation of your QEMU
-version for more details.
-
-Available options are: B<auto_glz, auto_lz, quic, glz, lz, off>.
-
-=item B<spice_streaming_video="VIDEO">
-
-Specifies what streaming video setting is to be used by SPICE (if given),
-otherwise the QEMU default will be used.
-
-Available options are: B<filter, all, off>.
-
-=back
-
-=head3 Miscellaneous Emulated Hardware
-
-=over 4
-
-=item B<serial=[ "DEVICE", "DEVICE", ...]>
-
-Redirect virtual serial ports to B<DEVICE>s. Please see the
-B<-serial> option in the B<qemu(1)> manpage for details of the valid
-B<DEVICE> options. Default is B<vc> when in graphical mode and
-B<stdio> if B<nographics=1> is used.
-
-The form serial=DEVICE is also accepted for backwards compatibility.
-
-=item B<soundhw="DEVICE">
-
-Select the virtual sound card to expose to the guest. The valid
-devices are defined by the device model configuration, please see the
-B<qemu(1)> manpage for details. The default is not to export any sound
-device.
-
-=item B<usb=BOOLEAN>
-
-Enables or disables an emulated USB bus in the guest.
-
-=item B<usbversion=NUMBER>
-
-Specifies the type of an emulated USB bus in the guest, values 1 for USB1.1,
-2 for USB2.0 and 3 for USB3.0. It is available only with an upstream QEMU.
-Due to implementation limitations this is not compatible with the B<usb>
-and B<usbdevice> parameters.
-Default is (0) no USB controller defined.
-
-=item B<usbdevice=[ "DEVICE", "DEVICE", ...]>
-
-Adds B<DEVICE>s to the emulated USB bus. The USB bus must also be
-enabled using B<usb=1>. The most common use for this option is
-B<usbdevice=['tablet']> which adds a pointer device using absolute
-coordinates. Such devices function better than relative coordinate
-devices (such as a standard mouse) since many methods of exporting
-guest graphics (such as VNC) work better in this mode. Note that this
-is independent of the actual pointer device you are using on the
-host/client side.
-
-Host devices can also be passed through in this way, by specifying
-host:USBID, where USBID is of the form xxxx:yyyy.  The USBID can
-typically be found by using B<lsusb(1)> or B<usb-devices(1)>.
-
-If you wish to use the "host:bus.addr" format, remove any leading '0' from the
-bus and addr. For example, for the USB device on bus 008 dev 002, you should
-write "host:8.2".
-
-The form usbdevice=DEVICE is also accepted for backwards compatibility.
-
-More valid options can be found in the "usbdevice" section of the QEMU
-documentation.
-
-=item B<vendor_device="VENDOR_DEVICE">
-
-Selects which variant of the QEMU xen-pvdevice should be used for this
-guest. Valid values are:
-
-=over 4
-
-=item B<none>
-
-The xen-pvdevice should be omitted. This is the default.
-
-=item B<xenserver>
-
-The xenserver variant of the xen-pvdevice (device-id=C000) will be
-specified, enabling the use of XenServer PV drivers in the guest.
-
-=back
-
-This parameter only takes effect when device_model_version=qemu-xen.
-See B<xen-pci-device-reservations(7)> for more information.
-
-=back
-
-=head2 PVH Guest Specific Options
-
-=over 4
-
-=item B<nestedhvm=BOOLEAN>
-
-Enable or disables guest access to hardware virtualisation features,
-e.g. it allows a guest Operating System to also function as a hypervisor.
-You may want this option if you want to run another hypervisor (including
-another copy of Xen) within a Xen guest or to support a guest Operating
-System which uses hardware virtualisation extensions (e.g. Windows XP
-compatibility mode on more modern Windows OS).
-
-This option is disabled by default.
-
-=item B<bootloader="PROGRAM">
-
-Run C<PROGRAM> to find the kernel image and ramdisk to use.  Normally
-C<PROGRAM> would be C<pygrub>, which is an emulation of
-grub/grub2/syslinux. Either B<kernel> or B<bootloader> must be specified
-for PV guests.
-
-=item B<bootloader_args=[ "ARG", "ARG", ...]>
-
-Append B<ARG>s to the arguments to the B<bootloader>
-program. Alternatively if the argument is a simple string then it will
-be split into words at whitespace B<(this second option is deprecated)>.
-
-=item B<timer_mode="MODE">
-
-Specifies the mode for Virtual Timers. The valid values are as follows:
-
-=over 4
-
-=item B<delay_for_missed_ticks>
-
-Delay for missed ticks. Do not advance a vCPU's time beyond the
-correct delivery time for interrupts that have been missed due to
-preemption. Deliver missed interrupts when the vCPU is rescheduled and
-advance the vCPU's virtual time stepwise for each one.
-
-=item B<no_delay_for_missed_ticks>
-
-No delay for missed ticks. As above, missed interrupts are delivered,
-but guest time always tracks wallclock (i.e., real) time while doing
-so. This is the default.
-
-=item B<no_missed_ticks_pending>
-
-No missed interrupts are held pending. Instead, to ensure ticks are
-delivered at some non-zero rate, if we detect missed ticks then the
-internal tick alarm is not disabled if the vCPU is preempted during
-the next tick period.
-
-=item B<one_missed_tick_pending>
-
-One missed tick pending. Missed interrupts are collapsed
-together and delivered as one 'late tick'.  Guest time always tracks
-wallclock (i.e., real) time.
-
-=back
-
-=back
-
-=head3 Paging
-
-The following options control the mechanisms used to virtualise guest
-memory.  The defaults are selected to give the best results for the
-common cases so you should normally leave these options
-unspecified.
-
-=over 4
-
-=item B<hap=BOOLEAN>
-
-Turns "hardware assisted paging" (the use of the hardware nested page
-table feature) on or off.  This feature is called EPT (Extended Page
-Tables) by Intel and NPT (Nested Page Tables) or RVI (Rapid
-Virtualisation Indexing) by AMD. If turned
-off, Xen will run the guest in "shadow page table" mode where the
-guest's page table updates and/or TLB flushes etc. will be emulated.
-Use of HAP is the default when available.
-
-=item B<oos=BOOLEAN>
-
-Turns "out of sync pagetables" on or off.  When running in shadow page
-table mode, the guest's page table updates may be deferred as
-specified in the Intel/AMD architecture manuals.  However, this may
-expose unexpected bugs in the guest, or find bugs in Xen, so it is
-possible to disable this feature.  Use of out of sync page tables,
-when Xen thinks it appropriate, is the default.
-
-=item B<shadow_memory=MBYTES>
-
-Number of megabytes to set aside for shadowing guest pagetable pages
-(effectively acting as a cache of translated pages) or to use for HAP
-state. By default this is 1MB per guest vCPU plus 8KB per MB of guest
-RAM. You should not normally need to adjust this value. However, if you
-are not using hardware assisted paging (i.e. you are using shadow
-mode) and your guest workload consists of a very large number of
-similar processes then increasing this value may improve performance.
-
-=back
-
-=head2 Device-Model Options
-
-The following options control the selection of the device-model.  This
-is the component which provides emulation of the virtual devices to an
-HVM guest.  For a PV guest a device-model is sometimes used to provide
-backends for certain PV devices (most usually a virtual framebuffer
-device).
-
-=over 4
-
-=item B<device_model_version="DEVICE-MODEL">
-
-Selects which variant of the device-model should be used for this
-guest.
-
-Valid values are:
-
-=over 4
-
-=item B<qemu-xen>
-
-Use the device-model merged into the upstream QEMU project.
-This device-model is the default for Linux dom0.
-
-=item B<qemu-xen-traditional>
-
-Use the device-model based upon the historical Xen fork of QEMU.
-This device-model is still the default for NetBSD dom0.
-
-=back
-
-It is recommended to accept the default value for new guests.  If
-you have existing guests then, depending on the nature of the guest
-Operating System, you may wish to force them to use the device
-model which they were installed with.
-
-=item B<device_model_override="PATH">
-
-Override the path to the binary to be used as the device-model. The
-binary provided here MUST be consistent with the
-B<device_model_version> which you have specified. You should not
-normally need to specify this option.
-
-=item B<device_model_stubdomain_override=BOOLEAN>
-
-Override the use of stubdomain based device-model.  Normally this will
-be automatically selected based upon the other features and options
-you have selected.
-
-=item B<device_model_stubdomain_seclabel="LABEL">
-
-Assign an XSM security label to the device-model stubdomain.
-
-=item B<device_model_args=[ "ARG", "ARG", ...]>
-
-Pass additional arbitrary options on the device-model command
-line. Each element in the list is passed as an option to the
-device-model.
-
-=item B<device_model_args_pv=[ "ARG", "ARG", ...]>
-
-Pass additional arbitrary options on the device-model command line for
-a PV device model only. Each element in the list is passed as an
-option to the device-model.
-
-=item B<device_model_args_hvm=[ "ARG", "ARG", ...]>
-
-Pass additional arbitrary options on the device-model command line for
-an HVM device model only. Each element in the list is passed as an
-option to the device-model.
-
-=back
-
-=head2 Keymaps
-
-The keymaps available are defined by the device-model which you are
-using. Commonly this includes:
-
-        ar  de-ch  es  fo     fr-ca  hu  ja  mk     no  pt-br  sv
-        da  en-gb  et  fr     fr-ch  is  lt  nl     pl  ru     th
-        de  en-us  fi  fr-be  hr     it  lv  nl-be  pt  sl     tr
-
-The default is B<en-us>.
-
-See B<qemu(1)> for more information.
-
-=head2 Architecture Specific options
-
-=head3 ARM
-
-=over 4
-
-=item B<gic_version="vN">
-
-Version of the GIC emulated for the guest.
-
-Currently, the following versions are supported:
-
-=over 4
-
-=item B<v2>
-
-Emulate a GICv2
-
-=item B<v3>
-
-Emulate a GICv3. Note that the emulated GIC does not support the
-GICv2 compatibility mode.
-
-=item B<default>
-
-Emulate the same version as the native GIC hardware used by the host where
-the domain was created.
-
-=back
-
-This requires hardware compatibility with the requested version, either
-natively or via hardware backwards compatibility support.
-
-=item B<vuart="uart">
-
-To enable vuart console, user must specify the following option in the
-VM config file:
-
-vuart = "sbsa_uart"
-
-Currently, only the "sbsa_uart" model is supported for ARM.
-
-=back
-
-=head3 x86
-
-=over 4
-
-=item B<mca_caps=[ "CAP", "CAP", ... ]>
-
-(HVM only) Enable MCA capabilities besides default ones enabled
-by Xen hypervisor for the HVM domain. "CAP" can be one in the
-following list:
-
-=over 4
-
-=item B<"lmce">
-
-Intel local MCE
-
-=item B<default>
-
-No MCA capabilities in above list are enabled.
-
-=back
-
-=back
-
-=head1 SEE ALSO
-
-=over 4
-
-=item L<xl(1)>
-
-=item L<xl.conf(5)>
-
-=item L<xlcpupool.cfg(5)>
-
-=item L<xl-disk-configuration(5)>
-
-=item L<xl-network-configuration(5)>
-
-=item L<xen-tscmode(7)>
-
-=back
-
-=head1 FILES
-
-F</etc/xen/NAME.cfg>
-F<@XEN_DUMP_DIR@/NAME>
-
-=head1 BUGS
-
-This document may contain items which require further
-documentation. Patches to improve incomplete items (or any other item)
-are gratefully received on the xen-devel@lists.xen.org mailing
-list. Please see L<http://wiki.xen.org/wiki/SubmittingXenPatches> for
-information on how to submit a patch to Xen.
-
diff --git a/docs/man/xl.conf.5.pod b/docs/man/xl.conf.5.pod
new file mode 100644 (file)
index 0000000..37262a7
--- /dev/null
@@ -0,0 +1,222 @@
+=head1 NAME
+
+/etc/xen/xl.conf - XL Global/Host Configuration 
+
+=head1 DESCRIPTION
+
+The F<xl.conf> file allows configuration of hostwide C<xl> toolstack
+options.
+
+For details of per-domain configuration options please see
+L<xl.cfg(5)>.
+
+=head1 SYNTAX
+
+The config file consists of a series of C<KEY=VALUE> pairs.
+
+A value C<VALUE> is one of:
+
+=over 4
+
+=item B<"STRING">
+
+A string, surrounded by either single or double quotes.
+
+=item B<NUMBER>
+
+A number, in either decimal, octal (using a C<0> prefix) or
+hexadecimal (using an C<0x> prefix).
+
+=item B<BOOLEAN>
+
+A C<NUMBER> interpreted as C<False> (C<0>) or C<True> (any other
+value).
+
+=item B<[ VALUE, VALUE, ... ]>
+
+A list of C<VALUES> of the above types. Lists are homogeneous and are
+not nested.
+
+=back
+
+The semantics of each C<KEY> defines which form of C<VALUE> is required.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<autoballoon="off"|"on"|"auto">
+
+If set to "on" then C<xl> will automatically reduce the amount of
+memory assigned to domain 0 in order to free memory for new domains.
+
+If set to "off" then C<xl> will not automatically reduce the amount of
+domain 0 memory.
+
+If set to "auto" then auto-ballooning will be disabled if the
+C<dom0_mem> option was provided on the Xen command line.
+
+You are strongly recommended to set this to C<"off"> (or C<"auto">) if
+you use the C<dom0_mem> hypervisor command line to reduce the amount
+of memory given to domain 0 by default.
+
+Default: C<"auto">
+
+=item B<run_hotplug_scripts=BOOLEAN>
+
+If disabled hotplug scripts will be called from udev, as it used to
+be in the previous releases. With the default option, hotplug scripts
+will be launched by xl directly.
+
+Default: C<1>
+
+=item B<lockfile="PATH">
+
+Sets the path to the lock file used by xl to serialise certain
+operations (primarily domain creation).
+
+Default: C</var/lock/xl>
+
+=item B<max_grant_frames=NUMBER>
+
+Sets the default value for the C<max_grant_frames> domain config value.
+
+Default: C<32> on hosts up to 16TB of memory, C<64> on hosts larger than 16TB
+
+=item B<max_maptrack_frames=NUMBER>
+
+Sets the default value for the C<max_maptrack_frames> domain config value.
+
+Default: C<1024>
+
+=item B<vif.default.script="PATH">
+
+Configures the default hotplug script used by virtual network devices.
+
+The old B<vifscript> option is deprecated and should not be used.
+
+Default: C</etc/xen/scripts/vif-bridge>
+
+=item B<vif.default.bridge="NAME">
+
+Configures the default bridge to set for virtual network devices.
+
+The old B<defaultbridge> option is deprecated and should not be used.
+
+Default: C<xenbr0>
+
+=item B<vif.default.backend="NAME">
+
+Configures the default backend to set for virtual network devices.
+
+Default: C<0>
+
+=item B<vif.default.gatewaydev="NAME">
+
+Configures the default gateway device to set for virtual network devices.
+
+Default: C<None>
+
+=item B<remus.default.netbufscript="PATH">
+
+Configures the default script used by Remus to setup network buffering.
+
+Default: C</etc/xen/scripts/remus-netbuf-setup>
+
+=item B<colo.default.proxyscript="PATH">
+
+Configures the default script used by COLO to setup colo-proxy.
+
+Default: C</etc/xen/scripts/colo-proxy-setup>
+
+=item B<output_format="json|sxp">
+
+Configures the default output format used by xl when printing "machine
+readable" information. The default is to use the C<JSON>
+L<http://www.json.org/> syntax. However for compatibility with the
+previous C<xm> toolstack this can be configured to use the old C<SXP>
+(S-Expression-like) syntax instead.
+
+Default: C<json>
+
+=item B<blkdev_start="NAME">
+
+Configures the name of the first block device to be used for temporary
+block device allocations by the toolstack.
+The default choice is "xvda".
+
+=item B<claim_mode=BOOLEAN>
+
+If this option is enabled then when a guest is created there will be an
+guarantee that there is memory available for the guest. This is an
+particularly acute problem on hosts with memory over-provisioned guests
+that use tmem and have self-balloon enabled (which is the default
+option). The self-balloon mechanism can deflate/inflate the balloon
+quickly and the amount of free memory (which C<xl info> can show) is
+stale the moment it is printed. When claim is enabled a reservation for
+the amount of memory (see 'memory' in xl.conf(5)) is set, which is then
+reduced as the domain's memory is populated and eventually reaches zero.
+The free memory in C<xl info> is the combination of the hypervisor's
+free heap memory minus the outstanding claims value.
+
+If the reservation cannot be meet the guest creation fails immediately
+instead of taking seconds/minutes (depending on the size of the guest)
+while the guest is populated.
+
+Note that to enable tmem type guests, one needs to provide C<tmem> on the
+Xen hypervisor argument and as well on the Linux kernel command line.
+
+Default: C<1>
+
+=over 4
+
+=item C<0>
+
+No claim is made. Memory population during guest creation will be
+attempted as normal and may fail due to memory exhaustion.
+
+=item C<1>
+
+Normal memory and freeable pool of ephemeral pages (tmem) is used when
+calculating whether there is enough memory free to launch a guest.
+This guarantees immediate feedback whether the guest can be launched due
+to memory exhaustion (which can take a long time to find out if launching
+massively huge guests).
+
+=back
+
+=item B<vm.cpumask>="CPULIST"
+
+=item B<vm.hvm.cpumask>="CPULIST"
+
+=item B<vm.pv.cpumask>="CPULIST"
+
+Global masks that are applied when creating guests and pinning vcpus
+to indicate which cpus they are allowed to run on.  Specifically,
+C<vm.cpumask> applies to all guest types, C<vm.hvm.cpumask> applies to
+both HVM and PVH guests and C<vm.pv.cpumask> applies to PV guests.
+
+The hard affinity of guest's vcpus are logical-AND'ed with respective
+masks. If the resulting affinity mask is empty, operation will fail.
+
+Use --ignore-global-affinity-masks to skip applying global masks.
+
+The default value for these masks are all 1's, i.e. all cpus are allowed.
+
+Due to bug(s), these options may not interact well with other options
+concerning CPU affinity. One example is CPU pools. Users should always double
+check that the required affinity has taken effect.
+
+=back
+
+=head1 SEE ALSO
+
+=over 4
+
+=item L<xl(1)>
+
+=item L<xl.cfg(5)>
+
+=item http://www.json.org/
+
+=back
diff --git a/docs/man/xl.conf.pod.5 b/docs/man/xl.conf.pod.5
deleted file mode 100644 (file)
index 37262a7..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-=head1 NAME
-
-/etc/xen/xl.conf - XL Global/Host Configuration 
-
-=head1 DESCRIPTION
-
-The F<xl.conf> file allows configuration of hostwide C<xl> toolstack
-options.
-
-For details of per-domain configuration options please see
-L<xl.cfg(5)>.
-
-=head1 SYNTAX
-
-The config file consists of a series of C<KEY=VALUE> pairs.
-
-A value C<VALUE> is one of:
-
-=over 4
-
-=item B<"STRING">
-
-A string, surrounded by either single or double quotes.
-
-=item B<NUMBER>
-
-A number, in either decimal, octal (using a C<0> prefix) or
-hexadecimal (using an C<0x> prefix).
-
-=item B<BOOLEAN>
-
-A C<NUMBER> interpreted as C<False> (C<0>) or C<True> (any other
-value).
-
-=item B<[ VALUE, VALUE, ... ]>
-
-A list of C<VALUES> of the above types. Lists are homogeneous and are
-not nested.
-
-=back
-
-The semantics of each C<KEY> defines which form of C<VALUE> is required.
-
-=head1 OPTIONS
-
-=over 4
-
-=item B<autoballoon="off"|"on"|"auto">
-
-If set to "on" then C<xl> will automatically reduce the amount of
-memory assigned to domain 0 in order to free memory for new domains.
-
-If set to "off" then C<xl> will not automatically reduce the amount of
-domain 0 memory.
-
-If set to "auto" then auto-ballooning will be disabled if the
-C<dom0_mem> option was provided on the Xen command line.
-
-You are strongly recommended to set this to C<"off"> (or C<"auto">) if
-you use the C<dom0_mem> hypervisor command line to reduce the amount
-of memory given to domain 0 by default.
-
-Default: C<"auto">
-
-=item B<run_hotplug_scripts=BOOLEAN>
-
-If disabled hotplug scripts will be called from udev, as it used to
-be in the previous releases. With the default option, hotplug scripts
-will be launched by xl directly.
-
-Default: C<1>
-
-=item B<lockfile="PATH">
-
-Sets the path to the lock file used by xl to serialise certain
-operations (primarily domain creation).
-
-Default: C</var/lock/xl>
-
-=item B<max_grant_frames=NUMBER>
-
-Sets the default value for the C<max_grant_frames> domain config value.
-
-Default: C<32> on hosts up to 16TB of memory, C<64> on hosts larger than 16TB
-
-=item B<max_maptrack_frames=NUMBER>
-
-Sets the default value for the C<max_maptrack_frames> domain config value.
-
-Default: C<1024>
-
-=item B<vif.default.script="PATH">
-
-Configures the default hotplug script used by virtual network devices.
-
-The old B<vifscript> option is deprecated and should not be used.
-
-Default: C</etc/xen/scripts/vif-bridge>
-
-=item B<vif.default.bridge="NAME">
-
-Configures the default bridge to set for virtual network devices.
-
-The old B<defaultbridge> option is deprecated and should not be used.
-
-Default: C<xenbr0>
-
-=item B<vif.default.backend="NAME">
-
-Configures the default backend to set for virtual network devices.
-
-Default: C<0>
-
-=item B<vif.default.gatewaydev="NAME">
-
-Configures the default gateway device to set for virtual network devices.
-
-Default: C<None>
-
-=item B<remus.default.netbufscript="PATH">
-
-Configures the default script used by Remus to setup network buffering.
-
-Default: C</etc/xen/scripts/remus-netbuf-setup>
-
-=item B<colo.default.proxyscript="PATH">
-
-Configures the default script used by COLO to setup colo-proxy.
-
-Default: C</etc/xen/scripts/colo-proxy-setup>
-
-=item B<output_format="json|sxp">
-
-Configures the default output format used by xl when printing "machine
-readable" information. The default is to use the C<JSON>
-L<http://www.json.org/> syntax. However for compatibility with the
-previous C<xm> toolstack this can be configured to use the old C<SXP>
-(S-Expression-like) syntax instead.
-
-Default: C<json>
-
-=item B<blkdev_start="NAME">
-
-Configures the name of the first block device to be used for temporary
-block device allocations by the toolstack.
-The default choice is "xvda".
-
-=item B<claim_mode=BOOLEAN>
-
-If this option is enabled then when a guest is created there will be an
-guarantee that there is memory available for the guest. This is an
-particularly acute problem on hosts with memory over-provisioned guests
-that use tmem and have self-balloon enabled (which is the default
-option). The self-balloon mechanism can deflate/inflate the balloon
-quickly and the amount of free memory (which C<xl info> can show) is
-stale the moment it is printed. When claim is enabled a reservation for
-the amount of memory (see 'memory' in xl.conf(5)) is set, which is then
-reduced as the domain's memory is populated and eventually reaches zero.
-The free memory in C<xl info> is the combination of the hypervisor's
-free heap memory minus the outstanding claims value.
-
-If the reservation cannot be meet the guest creation fails immediately
-instead of taking seconds/minutes (depending on the size of the guest)
-while the guest is populated.
-
-Note that to enable tmem type guests, one needs to provide C<tmem> on the
-Xen hypervisor argument and as well on the Linux kernel command line.
-
-Default: C<1>
-
-=over 4
-
-=item C<0>
-
-No claim is made. Memory population during guest creation will be
-attempted as normal and may fail due to memory exhaustion.
-
-=item C<1>
-
-Normal memory and freeable pool of ephemeral pages (tmem) is used when
-calculating whether there is enough memory free to launch a guest.
-This guarantees immediate feedback whether the guest can be launched due
-to memory exhaustion (which can take a long time to find out if launching
-massively huge guests).
-
-=back
-
-=item B<vm.cpumask>="CPULIST"
-
-=item B<vm.hvm.cpumask>="CPULIST"
-
-=item B<vm.pv.cpumask>="CPULIST"
-
-Global masks that are applied when creating guests and pinning vcpus
-to indicate which cpus they are allowed to run on.  Specifically,
-C<vm.cpumask> applies to all guest types, C<vm.hvm.cpumask> applies to
-both HVM and PVH guests and C<vm.pv.cpumask> applies to PV guests.
-
-The hard affinity of guest's vcpus are logical-AND'ed with respective
-masks. If the resulting affinity mask is empty, operation will fail.
-
-Use --ignore-global-affinity-masks to skip applying global masks.
-
-The default value for these masks are all 1's, i.e. all cpus are allowed.
-
-Due to bug(s), these options may not interact well with other options
-concerning CPU affinity. One example is CPU pools. Users should always double
-check that the required affinity has taken effect.
-
-=back
-
-=head1 SEE ALSO
-
-=over 4
-
-=item L<xl(1)>
-
-=item L<xl.cfg(5)>
-
-=item http://www.json.org/
-
-=back
diff --git a/docs/man/xl.pod.1.in b/docs/man/xl.pod.1.in
deleted file mode 100644 (file)
index 1800688..0000000
+++ /dev/null
@@ -1,1992 +0,0 @@
-=head1 NAME
-
-xl - Xen management tool, based on LibXenlight
-
-=head1 SYNOPSIS
-
-B<xl> I<subcommand> [I<args>]
-
-=head1 DESCRIPTION
-
-The B<xl> program is the new tool for managing Xen guest
-domains. The program can be used to create, pause, and shutdown
-domains. It can also be used to list current domains, enable or pin
-VCPUs, and attach or detach virtual block devices.
-
-The basic structure of every B<xl> command is almost always:
-
-=over 2
-
-B<xl> I<subcommand> [I<OPTIONS>] I<domain-id>
-
-=back
-
-Where I<subcommand> is one of the subcommands listed below, I<domain-id>
-is the numeric domain id, or the domain name (which will be internally
-translated to domain id), and I<OPTIONS> are subcommand specific
-options.  There are a few exceptions to this rule in the cases where
-the subcommand in question acts on all domains, the entire machine,
-or directly on the Xen hypervisor.  Those exceptions will be clear for
-each of those subcommands.
-
-=head1 NOTES
-
-=over 4
-
-=item start the script B</etc/init.d/xencommons> at boot time
-
-Most B<xl> operations rely upon B<xenstored> and B<xenconsoled>: make
-sure you start the script B</etc/init.d/xencommons> at boot time to
-initialize all the daemons needed by B<xl>.
-
-=item setup a B<xenbr0> bridge in dom0
-
-In the most common network configuration, you need to setup a bridge in dom0
-named B<xenbr0> in order to have a working network in the guest domains.
-Please refer to the documentation of your Linux distribution to know how to
-setup the bridge.
-
-=item B<autoballoon>
-
-If you specify the amount of memory dom0 has, passing B<dom0_mem> to
-Xen, it is highly recommended to disable B<autoballoon>. Edit
-B</etc/xen/xl.conf> and set it to 0.
-
-=item run xl as B<root>
-
-Most B<xl> commands require root privileges to run due to the
-communications channels used to talk to the hypervisor.  Running as
-non root will return an error.
-
-=back
-
-=head1 GLOBAL OPTIONS
-
-Some global options are always available:
-
-=over 4
-
-=item B<-v>
-
-Verbose.
-
-=item B<-N>
-
-Dry run: do not actually execute the command.
-
-=item B<-f>
-
-Force execution: xl will refuse to run some commands if it detects that xend is
-also running, this option will force the execution of those commands, even
-though it is unsafe.
-
-=item B<-t>
-
-Always use carriage-return-based overwriting for displaying progress
-messages without scrolling the screen.  Without -t, this is done only
-if stderr is a tty.
-
-=back
-
-=head1 DOMAIN SUBCOMMANDS
-
-The following subcommands manipulate domains directly.  As stated
-previously, most commands take I<domain-id> as the first parameter.
-
-=over 4
-
-=item B<button-press> I<domain-id> I<button>
-
-I<This command is deprecated. Please use C<xl trigger> instead.>
-
-Indicate an ACPI button press to the domain, where I<button> can be 'power' or
-'sleep'. This command is only available for HVM domains.
-
-=item B<create> [I<configfile>] [I<OPTIONS>]
-
-The create subcommand takes a config file as its first argument: see
-L<xl.cfg(5)> for full details of the file format and possible options.
-If I<configfile> is missing B<xl> creates the domain assuming the default
-values for every option.
-
-I<configfile> has to be an absolute path to a file.
-
-Create will return B<as soon> as the domain is started.  This B<does
-not> mean the guest OS in the domain has actually booted, or is
-available for input.
-
-If the I<-F> option is specified, create will start the domain and not
-return until its death.
-
-B<OPTIONS>
-
-=over 4
-
-=item B<-q>, B<--quiet>
-
-No console output.
-
-=item B<-f=FILE>, B<--defconfig=FILE>
-
-Use the given configuration file.
-
-=item B<-p>
-
-Leave the domain paused after it is created.
-
-=item B<-F>
-
-Run in foreground until death of the domain.
-
-=item B<-V>, B<--vncviewer>
-
-Attach to domain's VNC server, forking a vncviewer process.
-
-=item B<-A>, B<--vncviewer-autopass>
-
-Pass the VNC password to vncviewer via stdin.
-
-=item B<-c>
-
-Attach console to the domain as soon as it has started.  This is
-useful for determining issues with crashing domains and just as a
-general convenience since you often want to watch the
-domain boot.
-
-=item B<key=value>
-
-It is possible to pass I<key=value> pairs on the command line to provide
-options as if they were written in the configuration file; these override
-whatever is in the I<configfile>.
-
-NB: Many config options require characters such as quotes or brackets
-which are interpreted by the shell (and often discarded) before being
-passed to xl, resulting in xl being unable to parse the value
-correctly.  A simple work-around is to put all extra options within a
-single set of quotes, separated by semicolons.  (See below for an example.)
-
-=back
-
-B<EXAMPLES>
-
-=over 4
-
-=item I<with config file>
-
-  xl create DebianLenny
-
-This creates a domain with the file /etc/xen/DebianLenny, and returns as
-soon as it is run.
-
-=item I<with extra parameters>
-
-  xl create hvm.cfg 'cpus="0-3"; pci=["01:05.1","01:05.2"]'
-
-This creates a domain with the file hvm.cfg, but additionally pins it to
-cpus 0-3, and passes through two PCI devices.
-
-=back
-
-=item B<config-update> I<domain-id> [I<configfile>] [I<OPTIONS>]
-
-Update the saved configuration for a running domain. This has no
-immediate effect but will be applied when the guest is next
-restarted. This command is useful to ensure that runtime modifications
-made to the guest will be preserved when the guest is restarted.
-
-Since Xen 4.5 xl has improved capabilities to handle dynamic domain
-configuration changes and will preserve any changes made at runtime
-when necessary. Therefore it should not normally be necessary to use
-this command any more.
-
-I<configfile> has to be an absolute path to a file.
-
-B<OPTIONS>
-
-=over 4
-
-=item B<-f=FILE>, B<--defconfig=FILE>
-
-Use the given configuration file.
-
-=item B<key=value>
-
-It is possible to pass I<key=value> pairs on the command line to
-provide options as if they were written in the configuration file;
-these override whatever is in the I<configfile>.  Please see the note
-under I<create> on handling special characters when passing
-I<key=value> pairs on the command line.
-
-=back
-
-=item B<console> [I<OPTIONS>] I<domain-id>
-
-Attach to the console of a domain specified by I<domain-id>.  If you've set up
-your domains to have a traditional login console this will look much like a
-normal text login screen.
-
-Use the key combination Ctrl+] to detach from the domain console.
-
-B<OPTIONS>
-
-=over 4
-
-=item I<-t [pv|serial]>
-
-Connect to a PV console or connect to an emulated serial console.
-PV consoles are the only consoles available for PV domains while HVM
-domains can have both. If this option is not specified it defaults to
-emulated serial for HVM guests and PV console for PV guests.
-
-=item I<-n NUM>
-
-Connect to console number I<NUM>. Console numbers start from 0.
-
-=back
-
-=item B<destroy> [I<OPTIONS>] I<domain-id>
-
-Immediately terminate the domain specified by I<domain-id>.  This doesn't give
-the domain OS any chance to react, and is the equivalent of ripping the power
-cord out on a physical machine.  In most cases you will want to use the
-B<shutdown> command instead.
-
-B<OPTIONS>
-
-=over 4
-
-=item I<-f>
-
-Allow domain 0 to be destroyed.  Because a domain cannot destroy itself, this
-is only possible when using a disaggregated toolstack, and is most useful when
-using a hardware domain separated from domain 0.
-
-=back
-
-=item B<domid> I<domain-name>
-
-Converts a domain name to a domain id.
-
-=item B<domname> I<domain-id>
-
-Converts a domain id to a domain name.
-
-=item B<rename> I<domain-id> I<new-name>
-
-Change the domain name of a domain specified by I<domain-id> to I<new-name>.
-
-=item B<dump-core> I<domain-id> [I<filename>]
-
-Dumps the virtual machine's memory for the specified domain to the
-I<filename> specified, without pausing the domain.  The dump file will
-be written to a distribution specific directory for dump files, for example:
-@XEN_DUMP_DIR@/dump.
-
-=item B<help> [I<--long>]
-
-Displays the short help message (i.e. common commands) by default.
-
-If the I<--long> option is specified, it displays the complete set of B<xl>
-subcommands, grouped by function.
-
-=item B<list> [I<OPTIONS>] [I<domain-id> ...]
-
-Displays information about one or more domains.  If no domains are
-specified it displays information about all domains.
-
-
-B<OPTIONS>
-
-=over 4
-
-=item B<-l>, B<--long>
-
-The output for B<xl list> is not the table view shown below, but
-instead presents the data as a JSON data structure.
-
-=item B<-Z>, B<--context>
-
-Also displays the security labels.
-
-=item B<-v>, B<--verbose>
-
-Also displays the domain UUIDs, the shutdown reason and security labels.
-
-=item B<-c>, B<--cpupool>
-
-Also displays the cpupool the domain belongs to.
-
-=item B<-n>, B<--numa>
-
-Also displays the domain NUMA node affinity.
-
-=back
-
-B<EXAMPLE>
-
-An example format for the list is as follows:
-
-    Name                                        ID   Mem VCPUs      State   Time(s)
-    Domain-0                                     0   750     4     r-----   11794.3
-    win                                          1  1019     1     r-----       0.3
-    linux                                        2  2048     2     r-----    5624.2
-
-Name is the name of the domain.  ID the numeric domain id.  Mem is the
-desired amount of memory to allocate to the domain (although it may
-not be the currently allocated amount).  VCPUs is the number of
-virtual CPUs allocated to the domain.  State is the run state (see
-below).  Time is the total run time of the domain as accounted for by
-Xen.
-
-B<STATES>
-
-The State field lists 6 states for a Xen domain, and which ones the
-current domain is in.
-
-=over 4
-
-=item B<r - running>
-
-The domain is currently running on a CPU.
-
-=item B<b - blocked>
-
-The domain is blocked, and not running or runnable.  This can be because the
-domain is waiting on IO (a traditional wait state) or has
-gone to sleep because there was nothing else for it to do.
-
-=item B<p - paused>
-
-The domain has been paused, usually occurring through the administrator
-running B<xl pause>.  When in a paused state the domain will still
-consume allocated resources (like memory), but will not be eligible for
-scheduling by the Xen hypervisor.
-
-=item B<s - shutdown>
-
-The guest OS has shut down (SCHEDOP_shutdown has been called) but the
-domain is not dying yet.
-
-=item B<c - crashed>
-
-The domain has crashed, which is always a violent ending.  Usually
-this state only occurs if the domain has been configured not to
-restart on a crash.  See L<xl.cfg(5)> for more info.
-
-=item B<d - dying>
-
-The domain is in the process of dying, but hasn't completely shut down or
-crashed.
-
-=back
-
-B<NOTES>
-
-=over 4
-
-The Time column is deceptive.  Virtual IO (network and block devices)
-used by the domains requires coordination by Domain0, which means that
-Domain0 is actually charged for much of the time that a DomainU is
-doing IO.  Use of this time value to determine relative utilizations
-by domains is thus very unreliable, as a high IO workload may show as
-less utilized than a high CPU workload.  Consider yourself warned.
-
-=back
-
-=item B<mem-max> I<domain-id> I<mem>
-
-Specify the maximum amount of memory the domain is able to use, appending 't'
-for terabytes, 'g' for gigabytes, 'm' for megabytes, 'k' for kilobytes and 'b'
-for bytes.
-
-The mem-max value may not correspond to the actual memory used in the
-domain, as it may balloon down its memory to give more back to the OS.
-
-The value given just sets the memory amount the domain is allowed to allocate
-in the hypervisor. It can't be set lower than the current reservation, but
-it is allowed to be higher than the configured maximum memory size of the
-domain (B<maxmem> parameter in the domain's configuration). Using B<xl mem-max>
-to set the maximum memory above the initial B<maxmem> value will not allow the
-additional memory to be used via B<xl mem-set>. The initial B<maxmem> value is
-still used as an upper limit for B<xl mem-set>.
-
-The domain will not receive any signal regarding the changed memory limit.
-
-=item B<mem-set> I<domain-id> I<mem>
-
-Set the domain's used memory using the balloon driver; append 't' for
-terabytes, 'g' for gigabytes, 'm' for megabytes, 'k' for kilobytes and 'b' for
-bytes.
-
-Because this operation requires cooperation from the domain operating
-system, there is no guarantee that it will succeed.  This command will
-definitely not work unless the domain has the required paravirt
-driver.
-
-B<Warning:> There is no good way to know in advance how small of a
-mem-set will make a domain unstable and cause it to crash.  Be very
-careful when using this command on running domains.
-
-=item B<migrate> [I<OPTIONS>] I<domain-id> I<host>
-
-Migrate a domain to another host machine. By default B<xl> relies on ssh as a
-transport mechanism between the two hosts.
-
-B<OPTIONS>
-
-=over 4
-
-=item B<-s> I<sshcommand>
-
-Use <sshcommand> instead of ssh.  String will be passed to sh. If empty, run
-<host> instead of ssh <host> xl migrate-receive [-d -e].
-
-=item B<-e>
-
-On the new <host>, do not wait in the background for the death of the
-domain. See the corresponding option of the I<create> subcommand.
-
-=item B<-C> I<config>
-
-Send the specified <config> file instead of the file used on creation of the
-domain.
-
-=item B<--debug>
-
-Display huge (!) amount of debug information during the migration process.
-
-=item B<-p>
-
-Leave the domain on the receive side paused after migration.
-
-=back
-
-=item B<remus> [I<OPTIONS>] I<domain-id> I<host>
-
-Enable Remus HA or COLO HA for domain. By default B<xl> relies on ssh as a
-transport mechanism between the two hosts.
-
-B<NOTES>
-
-=over 4
-
-Remus support in xl is still in experimental (proof-of-concept) phase.
-Disk replication support is limited to DRBD disks.
-
-COLO support in xl is still in experimental (proof-of-concept)
-phase. All options are subject to change in the future.
-
-=back
-
-COLO disk configuration looks like:
-
-  disk = ['...,colo,colo-host=xxx,colo-port=xxx,colo-export=xxx,active-disk=xxx,hidden-disk=xxx...']
-
-The supported options are:
-
-=over 4
-
-=item B<colo-host>   : Secondary host's ip address.
-
-=item B<colo-port>   : Secondary host's port, we will run a nbd server on the
-secondary host, and the nbd server will listen on this port.
-
-=item B<colo-export> : Nbd server's disk export name of the secondary host.
-
-=item B<active-disk> : Secondary's guest write will be buffered to this disk,
-and it's used by the secondary.
-
-=item B<hidden-disk> : Primary's modified contents will be buffered in this
-disk, and it's used by the secondary.
-
-=back
-
-COLO network configuration looks like:
-
-  vif = [ '...,forwarddev=xxx,...']
-
-The supported options are:
-
-=over 4
-
-=item B<forwarddev> : Forward devices for the primary and the secondary, they
-are directly connected.
-
-
-=back
-
-B<OPTIONS>
-
-=over 4
-
-=item B<-i> I<MS>
-
-Checkpoint domain memory every MS milliseconds (default 200ms).
-
-=item B<-u>
-
-Disable memory checkpoint compression.
-
-=item B<-s> I<sshcommand>
-
-Use <sshcommand> instead of ssh.  String will be passed to sh.
-If empty, run <host> instead of ssh <host> xl migrate-receive -r [-e].
-
-=item B<-e>
-
-On the new <host>, do not wait in the background for the death of the domain.
-See the corresponding option of the I<create> subcommand.
-
-=item B<-N> I<netbufscript>
-
-Use <netbufscript> to setup network buffering instead of the
-default script (/etc/xen/scripts/remus-netbuf-setup).
-
-=item B<-F>
-
-Run Remus in unsafe mode. Use this option with caution as failover may
-not work as intended.
-
-=item B<-b>
-
-Replicate memory checkpoints to /dev/null (blackhole).
-Generally useful for debugging. Requires enabling unsafe mode.
-
-=item B<-n>
-
-Disable network output buffering. Requires enabling unsafe mode.
-
-=item B<-d>
-
-Disable disk replication. Requires enabling unsafe mode.
-
-=item B<-c>
-
-Enable COLO HA. This conflicts with B<-i> and B<-b>, and memory
-checkpoint compression must be disabled.
-
-=item B<-p>
-
-Use userspace COLO Proxy. This option must be used in conjunction
-with B<-c>.
-
-=back
-
-=item B<pause> I<domain-id>
-
-Pause a domain.  When in a paused state the domain will still consume
-allocated resources (such as memory), but will not be eligible for
-scheduling by the Xen hypervisor.
-
-=item B<reboot> [I<OPTIONS>] I<domain-id>
-
-Reboot a domain.  This acts just as if the domain had the B<reboot>
-command run from the console.  The command returns as soon as it has
-executed the reboot action, which may be significantly earlier than when the
-domain actually reboots.
-
-For HVM domains this requires PV drivers to be installed in your guest
-OS. If PV drivers are not present but you have configured the guest OS
-to behave appropriately you may be able to use the I<-F> option to
-trigger a reset button press.
-
-The behavior of what happens to a domain when it reboots is set by the
-B<on_reboot> parameter of the domain configuration file when the
-domain was created.
-
-B<OPTIONS>
-
-=over 4
-
-=item B<-F>
-
-If the guest does not support PV reboot control then fallback to
-sending an ACPI power event (equivalent to the I<reset> option to
-I<trigger>).
-
-You should ensure that the guest is configured to behave as expected
-in response to this event.
-
-=back
-
-=item B<restore> [I<OPTIONS>] [I<configfile>] I<checkpointfile>
-
-Build a domain from an B<xl save> state file.  See B<save> for more info.
-
-B<OPTIONS>
-
-=over 4
-
-=item B<-p>
-
-Do not unpause the domain after restoring it.
-
-=item B<-e>
-
-Do not wait in the background for the death of the domain on the new host.
-See the corresponding option of the I<create> subcommand.
-
-=item B<-d>
-
-Enable debug messages.
-
-=item B<-V>, B<--vncviewer>
-
-Attach to the domain's VNC server, forking a vncviewer process.
-
-=item B<-A>, B<--vncviewer-autopass>
-
-Pass the VNC password to vncviewer via stdin.
-
-
-
-=back
-
-=item B<save> [I<OPTIONS>] I<domain-id> I<checkpointfile> [I<configfile>]
-
-Saves a running domain to a state file so that it can be restored
-later.  Once saved, the domain will no longer be running on the
-system, unless the -c or -p options are used.
-B<xl restore> restores from this checkpoint file.
-Passing a config file argument allows the user to manually select the VM config
-file used to create the domain.
-
-=over 4
-
-=item B<-c>
-
-Leave the domain running after creating the snapshot.
-
-=item B<-p>
-
-Leave the domain paused after creating the snapshot.
-
-=back
-
-=item B<sharing> [I<domain-id>]
-
-Display the number of shared pages for a specified domain. If no domain is
-specified it displays information about all domains.
-
-=item B<shutdown> [I<OPTIONS>] I<-a|domain-id>
-
-Gracefully shuts down a domain.  This coordinates with the domain OS
-to perform graceful shutdown, so there is no guarantee that it will
-succeed, and may take a variable length of time depending on what
-services must be shut down in the domain.
-
-For HVM domains this requires PV drivers to be installed in your guest
-OS. If PV drivers are not present but you have configured the guest OS
-to behave appropriately you may be able to use the I<-F> option to
-trigger a power button press.
-
-The command returns immediately after signaling the domain unless the
-B<-w> flag is used.
-
-The behavior of what happens to a domain when it reboots is set by the
-B<on_shutdown> parameter of the domain configuration file when the
-domain was created.
-
-B<OPTIONS>
-
-=over 4
-
-=item B<-a>, B<--all>
-
-Shutdown all guest domains.  Often used when doing a complete shutdown
-of a Xen system.
-
-=item B<-w>, B<--wait>
-
-Wait for the domain to complete shutdown before returning.
-
-=item B<-F>
-
-If the guest does not support PV shutdown control then fallback to
-sending an ACPI power event (equivalent to the I<power> option to
-I<trigger>).
-
-You should ensure that the guest is configured to behave as expected
-in response to this event.
-
-=back
-
-=item B<sysrq> I<domain-id> I<letter>
-
-Send a <Magic System Request> to the domain, each type of request is
-represented by a different letter.
-It can be used to send SysRq requests to Linux guests, see sysrq.txt in
-your Linux Kernel sources for more information.
-It requires PV drivers to be installed in your guest OS.
-
-=item B<trigger> I<domain-id> I<nmi|reset|init|power|sleep|s3resume> [I<VCPU>]
-
-Send a trigger to a domain, where the trigger can be: nmi, reset, init, power
-or sleep.  Optionally a specific vcpu number can be passed as an argument.
-This command is only available for HVM domains.
-
-=item B<unpause> I<domain-id>
-
-Moves a domain out of the paused state.  This will allow a previously
-paused domain to now be eligible for scheduling by the Xen hypervisor.
-
-=item B<vcpu-set> I<domain-id> I<vcpu-count>
-
-Enables the I<vcpu-count> virtual CPUs for the domain in question.
-Like mem-set, this command can only allocate up to the maximum virtual
-CPU count configured at boot for the domain.
-
-If the I<vcpu-count> is smaller than the current number of active
-VCPUs, the highest number VCPUs will be hotplug removed.  This may be
-important for pinning purposes.
-
-Attempting to set the VCPUs to a number larger than the initially
-configured VCPU count is an error.  Trying to set VCPUs to < 1 will be
-quietly ignored.
-
-Some guests may need to actually bring the newly added CPU online
-after B<vcpu-set>, go to B<SEE ALSO> section for information.
-
-=item B<vcpu-list> [I<domain-id>]
-
-Lists VCPU information for a specific domain.  If no domain is
-specified, VCPU information for all domains will be provided.
-
-=item B<vcpu-pin> [I<-f|--force>] I<domain-id> I<vcpu> I<cpus hard> I<cpus soft>
-
-Set hard and soft affinity for a I<vcpu> of <domain-id>. Normally VCPUs
-can float between available CPUs whenever Xen deems a different run state
-is appropriate.
-
-Hard affinity can be used to restrict this, by ensuring certain VCPUs
-can only run on certain physical CPUs. Soft affinity specifies a I<preferred>
-set of CPUs. Soft affinity needs special support in the scheduler, which is
-only provided in credit1.
-
-The keyword B<all> can be used to apply the hard and soft affinity masks to
-all the VCPUs in the domain. The symbol '-' can be used to leave either
-hard or soft affinity alone.
-
-For example:
-
- xl vcpu-pin 0 3 - 6-9
-
-will set soft affinity for vCPU 3 of domain 0 to pCPUs 6,7,8 and 9,
-leaving its hard affinity untouched. On the other hand:
-
- xl vcpu-pin 0 3 3,4 6-9
-
-will set both hard and soft affinity, the former to pCPUs 3 and 4, the
-latter to pCPUs 6,7,8, and 9.
-
-Specifying I<-f> or I<--force> will remove a temporary pinning done by the
-operating system (normally this should be done by the operating system).
-In case a temporary pinning is active for a vcpu the affinity of this vcpu
-can't be changed without this option.
-
-=item B<vm-list>
-
-Prints information about guests. This list excludes information about
-service or auxiliary domains such as dom0 and stubdoms.
-
-B<EXAMPLE>
-
-An example format for the list is as follows:
-
-    UUID                                  ID    name
-    59e1cf6c-6ab9-4879-90e7-adc8d1c63bf5  2    win
-    50bc8f75-81d0-4d53-b2e6-95cb44e2682e  3    linux
-
-=item B<vncviewer> [I<OPTIONS>] I<domain-id>
-
-Attach to the domain's VNC server, forking a vncviewer process.
-
-B<OPTIONS>
-
-=over 4
-
-=item I<--autopass>
-
-Pass the VNC password to vncviewer via stdin.
-
-=back
-
-=back
-
-=head1 XEN HOST SUBCOMMANDS
-
-=over 4
-
-=item B<debug-keys> I<keys>
-
-Send debug I<keys> to Xen. It is the same as pressing the Xen
-"conswitch" (Ctrl-A by default) three times and then pressing "keys".
-
-=item B<set-parameters> I<params>
-
-Set hypervisor parameters as specified in I<params>. This allows for some
-boot parameters of the hypervisor to be modified in the running systems.
-
-=item B<dmesg> [I<OPTIONS>]
-
-Reads the Xen message buffer, similar to dmesg on a Linux system.  The
-buffer contains informational, warning, and error messages created
-during Xen's boot process.  If you are having problems with Xen, this
-is one of the first places to look as part of problem determination.
-
-B<OPTIONS>
-
-=over 4
-
-=item B<-c>, B<--clear>
-
-Clears Xen's message buffer.
-
-=back
-
-=item B<info> [I<OPTIONS>]
-
-Print information about the Xen host in I<name : value> format.  When
-reporting a Xen bug, please provide this information as part of the
-bug report. See I<http://wiki.xen.org/xenwiki/ReportingBugs> on how to
-report Xen bugs.
-
-Sample output looks as follows:
-
- host                   : scarlett
- release                : 3.1.0-rc4+
- version                : #1001 SMP Wed Oct 19 11:09:54 UTC 2011
- machine                : x86_64
- nr_cpus                : 4
- nr_nodes               : 1
- cores_per_socket       : 4
- threads_per_core       : 1
- cpu_mhz                : 2266
- hw_caps                : bfebfbff:28100800:00000000:00003b40:009ce3bd:00000000:00000001:00000000
- virt_caps              : hvm hvm_directio
- total_memory           : 6141
- free_memory            : 4274
- free_cpus              : 0
- outstanding_claims     : 0
- xen_major              : 4
- xen_minor              : 2
- xen_extra              : -unstable
- xen_caps               : xen-3.0-x86_64 xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p hvm-3.0-x86_64
- xen_scheduler          : credit
- xen_pagesize           : 4096
- platform_params        : virt_start=0xffff800000000000
- xen_changeset          : Wed Nov 02 17:09:09 2011 +0000 24066:54a5e994a241
- xen_commandline        : com1=115200,8n1 guest_loglvl=all dom0_mem=750M console=com1
- cc_compiler            : gcc version 4.4.5 (Debian 4.4.5-8)
- cc_compile_by          : sstabellini
- cc_compile_domain      : uk.xensource.com
- cc_compile_date        : Tue Nov  8 12:03:05 UTC 2011
- xend_config_format     : 4
-
-
-B<FIELDS>
-
-Not all fields will be explained here, but some of the less obvious
-ones deserve explanation:
-
-=over 4
-
-=item B<hw_caps>
-
-A vector showing what hardware capabilities are supported by your
-processor.  This is equivalent to, though more cryptic, the flags
-field in /proc/cpuinfo on a normal Linux machine: they both derive from
-the feature bits returned by the cpuid command on x86 platforms.
-
-=item B<free_memory>
-
-Available memory (in MB) not allocated to Xen, or any other domains, or
-claimed for domains.
-
-=item B<outstanding_claims>
-
-When a claim call is done (see L<xl.conf>) a reservation for a specific
-amount of pages is set and also a global value is incremented. This
-global value (outstanding_claims) is then reduced as the domain's memory
-is populated and eventually reaches zero. Most of the time the value will
-be zero, but if you are launching multiple guests, and B<claim_mode> is
-enabled, this value can increase/decrease. Note that the value also
-affects the B<free_memory> - as it will reflect the free memory
-in the hypervisor minus the outstanding pages claimed for guests.
-See xl I<info> B<claims> parameter for detailed listing.
-
-=item B<xen_caps>
-
-The Xen version and architecture.  Architecture values can be one of:
-x86_32, x86_32p (i.e. PAE enabled), x86_64, ia64.
-
-=item B<xen_changeset>
-
-The Xen mercurial changeset id.  Very useful for determining exactly
-what version of code your Xen system was built from.
-
-=back
-
-B<OPTIONS>
-
-=over 4
-
-=item B<-n>, B<--numa>
-
-List host NUMA topology information
-
-=back
-
-=item B<top>
-
-Executes the B<xentop(1)> command, which provides real time monitoring of
-domains.  Xentop has a curses interface, and is reasonably self explanatory.
-
-=item B<uptime>
-
-Prints the current uptime of the domains running.
-
-=item B<claims>
-
-Prints information about outstanding claims by the guests. This provides
-the outstanding claims and currently populated memory count for the guests.
-These values added up reflect the global outstanding claim value, which
-is provided via the I<info> argument, B<outstanding_claims> value.
-The B<Mem> column has the cumulative value of outstanding claims and
-the total amount of memory that has been right now allocated to the guest.
-
-B<EXAMPLE>
-
-An example format for the list is as follows:
-
- Name                                        ID   Mem VCPUs      State   Time(s)  Claimed
- Domain-0                                     0  2047     4     r-----      19.7     0
- OL5                                          2  2048     1     --p---       0.0   847
- OL6                                          3  1024     4     r-----       5.9     0
- Windows_XP                                   4  2047     1     --p---       0.0  1989
-
-In which it can be seen that the OL5 guest still has 847MB of claimed
-memory (out of the total 2048MB where 1191MB has been allocated to
-the guest).
-
-=back
-
-=head1 SCHEDULER SUBCOMMANDS
-
-Xen ships with a number of domain schedulers, which can be set at boot
-time with the B<sched=> parameter on the Xen command line.  By
-default B<credit> is used for scheduling.
-
-=over 4
-
-=item B<sched-credit> [I<OPTIONS>]
-
-Set or get credit (aka credit1) scheduler parameters.  The credit scheduler is
-a proportional fair share CPU scheduler built from the ground up to be
-work conserving on SMP hosts.
-
-Each domain (including Domain0) is assigned a weight and a cap.
-
-B<OPTIONS>
-
-=over 4
-
-=item B<-d DOMAIN>, B<--domain=DOMAIN>
-
-Specify domain for which scheduler parameters are to be modified or retrieved.
-Mandatory for modifying scheduler parameters.
-
-=item B<-w WEIGHT>, B<--weight=WEIGHT>
-
-A domain with a weight of 512 will get twice as much CPU as a domain
-with a weight of 256 on a contended host. Legal weights range from 1
-to 65535 and the default is 256.
-
-=item B<-c CAP>, B<--cap=CAP>
-
-The cap optionally fixes the maximum amount of CPU a domain will be
-able to consume, even if the host system has idle CPU cycles. The cap
-is expressed in percentage of one physical CPU: 100 is 1 physical CPU,
-50 is half a CPU, 400 is 4 CPUs, etc. The default, 0, means there is
-no upper cap.
-
-NB: Many systems have features that will scale down the computing
-power of a cpu that is not 100% utilized.  This can be in the
-operating system, but can also sometimes be below the operating system
-in the BIOS.  If you set a cap such that individual cores are running
-at less than 100%, this may have an impact on the performance of your
-workload over and above the impact of the cap. For example, if your
-processor runs at 2GHz, and you cap a vm at 50%, the power management
-system may also reduce the clock speed to 1GHz; the effect will be
-that your VM gets 25% of the available power (50% of 1GHz) rather than
-50% (50% of 2GHz).  If you are not getting the performance you expect,
-look at performance and cpufreq options in your operating system and
-your BIOS.
-
-=item B<-p CPUPOOL>, B<--cpupool=CPUPOOL>
-
-Restrict output to domains in the specified cpupool.
-
-=item B<-s>, B<--schedparam>
-
-Specify to list or set pool-wide scheduler parameters.
-
-=item B<-t TSLICE>, B<--tslice_ms=TSLICE>
-
-Timeslice tells the scheduler how long to allow VMs to run before
-pre-empting.  The default is 30ms.  Valid ranges are 1ms to 1000ms.
-The length of the timeslice (in ms) must be higher than the length of
-the ratelimit (see below).
-
-=item B<-r RLIMIT>, B<--ratelimit_us=RLIMIT>
-
-Ratelimit attempts to limit the number of schedules per second.  It
-sets a minimum amount of time (in microseconds) a VM must run before
-we will allow a higher-priority VM to pre-empt it.  The default value
-is 1000 microseconds (1ms).  Valid range is 100 to 500000 (500ms).
-The ratelimit length must be lower than the timeslice length.
-
-=item B<-m DELAY>, B<--migration_delay_us=DELAY>
-
-Migration delay specifies for how long a vCPU, after it stopped running should
-be considered "cache-hot". Basically, if less than DELAY us passed since when
-the vCPU was executing on a CPU, it is likely that most of the vCPU's working
-set is still in the CPU's cache, and therefore the vCPU is not migrated.
-
-Default is 0. Maximum is 100 ms. This can be effective at preventing vCPUs
-to bounce among CPUs too quickly, but, at the same time, the scheduler stops
-being fully work-conserving.
-
-=back
-
-B<COMBINATION>
-
-The following is the effect of combining the above options:
-
-=over 4
-
-=item B<E<lt>nothingE<gt>>             : List all domain params and sched params from all pools
-
-=item B<-d [domid]>            : List domain params for domain [domid]
-
-=item B<-d [domid] [params]>   : Set domain params for domain [domid]
-
-=item B<-p [pool]>             : list all domains and sched params for [pool]
-
-=item B<-s>                    : List sched params for poolid 0
-
-=item B<-s [params]>           : Set sched params for poolid 0
-
-=item B<-p [pool] -s>          : List sched params for [pool]
-
-=item B<-p [pool] -s [params]> : Set sched params for [pool]
-
-=item B<-p [pool] -d>...       : Illegal
-
-=back
-
-=item B<sched-credit2> [I<OPTIONS>]
-
-Set or get credit2 scheduler parameters.  The credit2 scheduler is a
-proportional fair share CPU scheduler built from the ground up to be
-work conserving on SMP hosts.
-
-Each domain (including Domain0) is assigned a weight.
-
-B<OPTIONS>
-
-=over 4
-
-=item B<-d DOMAIN>, B<--domain=DOMAIN>
-
-Specify domain for which scheduler parameters are to be modified or retrieved.
-Mandatory for modifying scheduler parameters.
-
-=item B<-w WEIGHT>, B<--weight=WEIGHT>
-
-A domain with a weight of 512 will get twice as much CPU as a domain
-with a weight of 256 on a contended host. Legal weights range from 1
-to 65535 and the default is 256.
-
-=item B<-p CPUPOOL>, B<--cpupool=CPUPOOL>
-
-Restrict output to domains in the specified cpupool.
-
-=item B<-s>, B<--schedparam>
-
-Specify to list or set pool-wide scheduler parameters.
-
-=item B<-r RLIMIT>, B<--ratelimit_us=RLIMIT>
-
-Attempts to limit the rate of context switching. It is basically the same
-as B<--ratelimit_us> in B<sched-credit>
-
-=back
-
-=item B<sched-rtds> [I<OPTIONS>]
-
-Set or get rtds (Real Time Deferrable Server) scheduler parameters.
-This rt scheduler applies Preemptive Global Earliest Deadline First
-real-time scheduling algorithm to schedule VCPUs in the system.
-Each VCPU has a dedicated period, budget and extratime.
-While scheduled, a VCPU burns its budget.
-A VCPU has its budget replenished at the beginning of each period;
-Unused budget is discarded at the end of each period.
-A VCPU with extratime set gets extra time from the unreserved system resource.
-
-B<OPTIONS>
-
-=over 4
-
-=item B<-d DOMAIN>, B<--domain=DOMAIN>
-
-Specify domain for which scheduler parameters are to be modified or retrieved.
-Mandatory for modifying scheduler parameters.
-
-=item B<-v VCPUID/all>, B<--vcpuid=VCPUID/all>
-
-Specify vcpu for which scheduler parameters are to be modified or retrieved.
-
-=item B<-p PERIOD>, B<--period=PERIOD>
-
-Period of time, in microseconds, over which to replenish the budget.
-
-=item B<-b BUDGET>, B<--budget=BUDGET>
-
-Amount of time, in microseconds, that the VCPU will be allowed
-to run every period.
-
-=item B<-e Extratime>, B<--extratime=Extratime>
-
-Binary flag to decide if the VCPU will be allowed to get extra time from
-the unreserved system resource.
-
-=item B<-c CPUPOOL>, B<--cpupool=CPUPOOL>
-
-Restrict output to domains in the specified cpupool.
-
-=back
-
-B<EXAMPLE>
-
-=over 4
-
-1) Use B<-v all> to see the budget and period of all the VCPUs of
-all the domains:
-
-    xl sched-rtds -v all
-    Cpupool Pool-0: sched=RTDS
-    Name                        ID VCPU    Period    Budget  Extratime
-    Domain-0                     0    0     10000      4000        yes
-    vm1                          2    0       300       150        yes
-    vm1                          2    1       400       200        yes
-    vm1                          2    2     10000      4000        yes
-    vm1                          2    3      1000       500        yes
-    vm2                          4    0     10000      4000        yes
-    vm2                          4    1     10000      4000        yes
-
-Without any arguments, it will output the default scheduling
-parameters for each domain:
-
-    xl sched-rtds
-    Cpupool Pool-0: sched=RTDS
-    Name                        ID    Period    Budget  Extratime
-    Domain-0                     0     10000      4000        yes
-    vm1                          2     10000      4000        yes
-    vm2                          4     10000      4000        yes
-
-
-2) Use, for instance, B<-d vm1, -v all> to see the budget and
-period of all VCPUs of a specific domain (B<vm1>):
-
-    xl sched-rtds -d vm1 -v all
-    Name                        ID VCPU    Period    Budget  Extratime
-    vm1                          2    0       300       150        yes
-    vm1                          2    1       400       200        yes
-    vm1                          2    2     10000      4000        yes
-    vm1                          2    3      1000       500        yes
-
-To see the parameters of a subset of the VCPUs of a domain, use:
-
-    xl sched-rtds -d vm1 -v 0 -v 3
-    Name                        ID VCPU    Period    Budget  Extratime
-    vm1                          2    0       300       150        yes
-    vm1                          2    3      1000       500        yes
-
-If no B<-v> is specified, the default scheduling parameters for the
-domain are shown:
-
-    xl sched-rtds -d vm1
-    Name                        ID    Period    Budget  Extratime
-    vm1                          2     10000      4000        yes
-
-
-3) Users can set the budget and period of multiple VCPUs of a
-specific domain with only one command,
-e.g., "xl sched-rtds -d vm1 -v 0 -p 100 -b 50 -e 1 -v 3 -p 300 -b 150 -e 0".
-
-To change the parameters of all the VCPUs of a domain, use B<-v all>,
-e.g., "xl sched-rtds -d vm1 -v all -p 500 -b 250 -e 1".
-
-=back
-
-=back
-
-=head1 CPUPOOLS COMMANDS
-
-Xen can group the physical cpus of a server in cpu-pools. Each physical CPU is
-assigned at most to one cpu-pool. Domains are each restricted to a single
-cpu-pool. Scheduling does not cross cpu-pool boundaries, so each cpu-pool has
-its own scheduler.
-Physical cpus and domains can be moved from one cpu-pool to another only by an
-explicit command.
-Cpu-pools can be specified either by name or by id.
-
-=over 4
-
-=item B<cpupool-create> [I<OPTIONS>] [I<configfile>] [I<variable=value> ...]
-
-Create a cpu pool based an config from a I<configfile> or command-line
-parameters.  Variable settings from the I<configfile> may be altered
-by specifying new or additional assignments on the command line.
-
-See the L<xlcpupool.cfg(5)> manpage for more information.
-
-B<OPTIONS>
-
-=over 4
-
-=item B<-f=FILE>, B<--defconfig=FILE>
-
-Use the given configuration file.
-
-=back
-
-=item B<cpupool-list> [I<OPTIONS>] [I<cpu-pool>]
-
-List CPU pools on the host.
-
-B<OPTIONS>
-
-=over 4
-
-=item B<-c>, B<--cpus>
-
-If this option is specified, B<xl> prints a list of CPUs used by I<cpu-pool>.
-
-=back
-
-=item B<cpupool-destroy> I<cpu-pool>
-
-Deactivates a cpu pool.
-This is possible only if no domain is active in the cpu-pool.
-
-=item B<cpupool-rename> I<cpu-pool> <newname>
-
-Renames a cpu-pool to I<newname>.
-
-=item B<cpupool-cpu-add> I<cpu-pool> I<cpus|node:nodes>
-
-Adds one or more CPUs or NUMA nodes to I<cpu-pool>. CPUs and NUMA
-nodes can be specified as single CPU/node IDs or as ranges.
-
-For example:
-
- (a) xl cpupool-cpu-add mypool 4
- (b) xl cpupool-cpu-add mypool 1,5,10-16,^13
- (c) xl cpupool-cpu-add mypool node:0,nodes:2-3,^10-12,8
-
-means adding CPU 4 to mypool, in (a); adding CPUs 1,5,10,11,12,14,15
-and 16, in (b); and adding all the CPUs of NUMA nodes 0, 2 and 3,
-plus CPU 8, but keeping out CPUs 10,11,12, in (c).
-
-All the specified CPUs that can be added to the cpupool will be added
-to it. If some CPU can't (e.g., because they're already part of another
-cpupool), an error is reported about each one of them.
-
-=item B<cpupool-cpu-remove> I<cpus|node:nodes>
-
-Removes one or more CPUs or NUMA nodes from I<cpu-pool>. CPUs and NUMA
-nodes can be specified as single CPU/node IDs or as ranges, using the
-exact same syntax as in B<cpupool-cpu-add> above.
-
-=item B<cpupool-migrate> I<domain-id> I<cpu-pool>
-
-Moves a domain specified by domain-id or domain-name into a cpu-pool.
-Domain-0 can't be moved to another cpu-pool.
-
-=item B<cpupool-numa-split>
-
-Splits up the machine into one cpu-pool per numa node.
-
-=back
-
-=head1 VIRTUAL DEVICE COMMANDS
-
-Most virtual devices can be added and removed while guests are
-running, assuming that the necessary support exists in the guest OS.  The
-effect to the guest OS is much the same as any hotplug event.
-
-=head2 BLOCK DEVICES
-
-=over 4
-
-=item B<block-attach> I<domain-id> I<disc-spec-component(s)> ...
-
-Create a new virtual block device and attach it to the specified domain.
-A disc specification is in the same format used for the B<disk> variable in
-the domain config file. See L<xl-disk-configuration(5)>. This will trigger a
-hotplug event for the guest.
-
-Note that only PV block devices are supported by block-attach.
-Requests to attach emulated devices (eg, vdev=hdc) will result in only
-the PV view being available to the guest.
-
-=item B<block-detach> I<domain-id> I<devid> [I<OPTIONS>]
-
-Detach a domain's virtual block device. I<devid> may be the symbolic
-name or the numeric device id given to the device by domain 0.  You
-will need to run B<xl block-list> to determine that number.
-
-Detaching the device requires the cooperation of the domain.  If the
-domain fails to release the device (perhaps because the domain is hung
-or is still using the device), the detach will fail.
-
-B<OPTIONS>
-
-=over 4
-
-=item B<--force>
-
-If this parameter is specified the device will be forcefully detached, which
-may cause IO errors in the domain.
-
-=back
-
-
-
-=item B<block-list> I<domain-id>
-
-List virtual block devices for a domain.
-
-=item B<cd-insert> I<domain-id> I<virtualdevice> I<target>
-
-Insert a cdrom into a guest domain's existing virtual cd drive. The
-virtual drive must already exist but can be empty. How the device should be
-presented to the guest domain is specified by the I<virtualdevice> parameter;
-for example "hdc". Parameter I<target> is the target path in the backend domain
-(usually domain 0) to be exported; can be a block device or a file etc.
-See B<target> in L<xl-disk-configuration(5)>.
-
-Only works with HVM domains.
-
-
-=item B<cd-eject> I<domain-id> I<virtualdevice>
-
-Eject a cdrom from a guest domain's virtual cd drive, specified by
-I<virtualdevice>. Only works with HVM domains.
-
-=back
-
-=head2 NETWORK DEVICES
-
-=over 4
-
-=item B<network-attach> I<domain-id> I<network-device>
-
-Creates a new network device in the domain specified by I<domain-id>.
-I<network-device> describes the device to attach, using the same format as the
-B<vif> string in the domain config file. See L<xl.cfg(5)> and
-L<xl-network-configuration(5)>
-for more information.
-
-Note that only attaching PV network interfaces is supported.
-
-=item B<network-detach> I<domain-id> I<devid|mac>
-
-Removes the network device from the domain specified by I<domain-id>.
-I<devid> is the virtual interface device number within the domain
-(i.e. the 3 in vif22.3). Alternatively, the I<mac> address can be used to
-select the virtual interface to detach.
-
-=item B<network-list> I<domain-id>
-
-List virtual network interfaces for a domain.
-
-=back
-
-=head2 CHANNEL DEVICES
-
-=over 4
-
-=item B<channel-list> I<domain-id>
-
-List virtual channel interfaces for a domain.
-
-=back
-
-=head2 VIRTUAL TRUSTED PLATFORM MODULE (vTPM) DEVICES
-
-=over 4
-
-=item B<vtpm-attach> I<domain-id> I<vtpm-device>
-
-Creates a new vtpm (virtual Trusted Platform Module) device in the domain
-specified by I<domain-id>. I<vtpm-device> describes the device to attach,
-using the same format as the B<vtpm> string in the domain config file.
-See L<xl.cfg(5)> for more information.
-
-=item B<vtpm-detach> I<domain-id> I<devid|uuid>
-
-Removes the vtpm device from the domain specified by I<domain-id>.
-I<devid> is the numeric device id given to the virtual Trusted
-Platform Module device. You will need to run B<xl vtpm-list> to determine that
-number. Alternatively, the I<uuid> of the vtpm can be used to
-select the virtual device to detach.
-
-=item B<vtpm-list> I<domain-id>
-
-List virtual Trusted Platform Modules for a domain.
-
-=back
-
-=head2 VDISPL DEVICES
-
-=over 4
-
-=item B<vdispl-attach> I<domain-id> I<vdispl-device>
-
-Creates a new vdispl device in the domain specified by I<domain-id>.
-I<vdispl-device> describes the device to attach, using the same format as the
-B<vdispl> string in the domain config file. See L<xl.cfg> for
-more information.
-
-B<NOTES>
-
-=over 4
-
-As in I<vdispl-device> string semicolon is used then put quotes or escaping
-when using from the shell.
-
-B<EXAMPLE>
-
-=over 4
-
-xl vdispl-attach DomU connectors='id0:1920x1080;id1:800x600;id2:640x480'
-
-or
-
-xl vdispl-attach DomU connectors=id0:1920x1080\;id1:800x600\;id2:640x480
-
-=back
-
-=back
-
-=item B<vdispl-detach> I<domain-id> I<dev-id>
-
-Removes the vdispl device specified by I<dev-id> from the domain specified by I<domain-id>.
-
-=item B<vdispl-list> I<domain-id>
-
-List virtual displays for a domain.
-
-=back
-
-=head2 VSND DEVICES
-
-=over 4
-
-=item B<vsnd-attach> I<domain-id> I<vsnd-item> I<vsnd-item> ...
-
-Creates a new vsnd device in the domain specified by I<domain-id>.
-I<vsnd-item>'s describe the vsnd device to attach, using the same format as the
-B<VSND_ITEM_SPEC> string in the domain config file. See L<xl.cfg> for
-more information.
-
-B<EXAMPLE>
-
-=over 4
-
-xl vsnd-attach DomU 'CARD, short-name=Main, sample-formats=s16_le;s8;u32_be'
-'PCM, name=Main' 'STREAM, id=0, type=p' 'STREAM, id=1, type=c, channels-max=2'
-
-=back
-
-=item B<vsnd-detach> I<domain-id> I<dev-id>
-
-Removes the vsnd device specified by I<dev-id> from the domain specified by I<domain-id>.
-
-=item B<vsnd-list> I<domain-id>
-
-List vsnd devices for a domain.
-
-=back
-
-=head2 KEYBOARD DEVICES
-
-=over 4
-
-=item B<vkb-attach> I<domain-id> I<vkb-device>
-
-Creates a new keyboard device in the domain specified by I<domain-id>.
-I<vkb-device> describes the device to attach, using the same format as the
-B<VKB_SPEC_STRING> string in the domain config file. See L<xl.cfg(5)>
-for more informations.
-
-=item B<vkb-detach> I<domain-id> I<devid>
-
-Removes the keyboard device from the domain specified by I<domain-id>.
-I<devid> is the virtual interface device number within the domain
-
-=item B<vkb-list> I<domain-id>
-
-List virtual network interfaces for a domain.
-
-=back
-
-=head1 PCI PASS-THROUGH
-
-=over 4
-
-=item B<pci-assignable-list>
-
-List all the assignable PCI devices.
-These are devices in the system which are configured to be
-available for passthrough and are bound to a suitable PCI
-backend driver in domain 0 rather than a real driver.
-
-=item B<pci-assignable-add> I<BDF>
-
-Make the device at PCI Bus/Device/Function BDF assignable to guests.
-This will bind the device to the pciback driver.  If it is already
-bound to a driver, it will first be unbound, and the original driver
-stored so that it can be re-bound to the same driver later if desired.
-If the device is already bound, it will return success.
-
-CAUTION: This will make the device unusable by Domain 0 until it is
-returned with pci-assignable-remove.  Care should therefore be taken
-not to do this on a device critical to domain 0's operation, such as
-storage controllers, network interfaces, or GPUs that are currently
-being used.
-
-=item B<pci-assignable-remove> [I<-r>] I<BDF>
-
-Make the device at PCI Bus/Device/Function BDF not assignable to guests.  This
-will at least unbind the device from pciback.  If the -r option is specified,
-it will also attempt to re-bind the device to its original driver, making it
-usable by Domain 0 again.  If the device is not bound to pciback, it will
-return success.
-
-=item B<pci-attach> I<domain-id> I<BDF>
-
-Hot-plug a new pass-through pci device to the specified domain.
-B<BDF> is the PCI Bus/Device/Function of the physical device to pass-through.
-
-=item B<pci-detach> [I<OPTIONS>] I<domain-id> I<BDF>
-
-Hot-unplug a previously assigned pci device from a domain. B<BDF> is the PCI
-Bus/Device/Function of the physical device to be removed from the guest domain.
-
-B<OPTIONS>
-
-=over 4
-
-=item B<-f>
-
-If this parameter is specified, B<xl> is going to forcefully remove the device
-even without guest domain's collaboration.
-
-=back
-
-=item B<pci-list> I<domain-id>
-
-List pass-through pci devices for a domain.
-
-=back
-
-=head1 USB PASS-THROUGH
-
-=over 4
-
-=item B<usbctrl-attach> I<domain-id> I<usbctrl-device>
-
-Create a new USB controller in the domain specified by I<domain-id>,
-I<usbctrl-device> describes the device to attach, using form
-C<KEY=VALUE KEY=VALUE ...> where B<KEY=VALUE> has the same
-meaning as the B<usbctrl> description in the domain config file.
-See L<xl.cfg(5)> for more information.
-
-=item B<usbctrl-detach> I<domain-id> I<devid>
-
-Destroy a USB controller from the specified domain.
-B<devid> is devid of the USB controller.
-
-=item B<usbdev-attach> I<domain-id> I<usbdev-device>
-
-Hot-plug a new pass-through USB device to the domain specified by
-I<domain-id>, I<usbdev-device> describes the device to attach, using
-form C<KEY=VALUE KEY=VALUE ...> where B<KEY=VALUE> has the same
-meaning as the B<usbdev> description in the domain config file.
-See L<xl.cfg(5)> for more information.
-
-=item B<usbdev-detach> I<domain-id> I<controller=devid> I<port=number>
-
-Hot-unplug a previously assigned USB device from a domain.
-B<controller=devid> and B<port=number> is USB controller:port in the guest
-domain the USB device is attached to.
-
-=item B<usb-list> I<domain-id>
-
-List pass-through usb devices for a domain.
-
-=back
-
-=head1 DEVICE-MODEL CONTROL
-
-=over 4
-
-=item B<qemu-monitor-command> I<domain-id> I<command>
-
-Issue a monitor command to the device model of the domain specified by
-I<domain-id>. I<command> can be any valid command qemu understands. This
-can be e.g. used to add non-standard devices or devices with non-standard
-parameters to a domain. The output of the command is printed to stdout.
-
-B<Warning:> This qemu monitor access is provided for convenience when
-debugging, troubleshooting, and experimenting.  Its use is not
-supported by the Xen Project.
-
-Specifically, not all information displayed by the qemu monitor will
-necessarily be accurate or complete, because in a Xen system qemu
-does not have a complete view of the guest.
-
-Furthermore, modifying the guest's setup via the qemu monitor may
-conflict with the Xen toolstack's assumptions.  Resulting problems
-may include, but are not limited to: guest crashes; toolstack error
-messages; inability to migrate the guest; and security
-vulnerabilities which are not covered by the Xen Project security
-response policy.
-
-B<EXAMPLE>
-
-Obtain information of USB devices connected as such via the device model
-(only!) to a domain:
-
- xl qemu-monitor-command vm1 'info usb'
-  Device 0.2, Port 5, Speed 480 Mb/s, Product Mass Storage
-
-=back
-
-=head1 TRANSCENDENT MEMORY (TMEM)
-
-=over 4
-
-=item B<tmem-list> I<[OPTIONS]> I<domain-id>
-
-List tmem pools.
-
-B<OPTIONS>
-
-=over 4
-
-=item B<-l>
-
-If this parameter is specified, also list tmem stats.
-
-=back
-
-=item B<tmem-freeze> I<domain-id>
-
-Freeze tmem pools.
-
-=item B<tmem-thaw> I<domain-id>
-
-Thaw tmem pools.
-
-=item B<tmem-set> I<domain-id> [I<OPTIONS>]
-
-Change tmem settings.
-
-B<OPTIONS>
-
-=over 4
-
-=item B<-w> I<WEIGHT>
-
-Weight (int)
-
-=item B<-p> I<COMPRESS>
-
-Compress (int)
-
-=back
-
-=item B<tmem-shared-auth> I<domain-id> [I<OPTIONS>]
-
-De/authenticate shared tmem pool.
-
-B<OPTIONS>
-
-=over 4
-
-=item B<-u> I<UUID>
-
-Specify uuid (abcdef01-2345-6789-1234-567890abcdef)
-
-=item B<-a> I<AUTH>
-
-0=auth,1=deauth
-
-=back
-
-=item B<tmem-freeable>
-
-Get information about how much freeable memory (MB) is in-use by tmem.
-
-=back
-
-=head1 FLASK
-
-B<FLASK> is a security framework that defines a mandatory access control policy
-providing fine-grained controls over Xen domains, allowing the policy writer
-to define what interactions between domains, devices, and the hypervisor are
-permitted. Some example of what you can do using XSM/FLASK:
- - Prevent two domains from communicating via event channels or grants
- - Control which domains can use device passthrough (and which devices)
- - Restrict or audit operations performed by privileged domains
- - Prevent a privileged domain from arbitrarily mapping pages from other
-   domains.
-
-You can find more details on how to use FLASK and an example security
-policy here: L<http://xenbits.xen.org/docs/unstable/misc/xsm-flask.txt>
-
-=over 4
-
-=item B<getenforce>
-
-Determine if the FLASK security module is loaded and enforcing its policy.
-
-=item B<setenforce> I<1|0|Enforcing|Permissive>
-
-Enable or disable enforcing of the FLASK access controls. The default is
-permissive, but this can be changed to enforcing by specifying "flask=enforcing"
-or "flask=late" on the hypervisor's command line.
-
-=item B<loadpolicy> I<policy-file>
-
-Load FLASK policy from the given policy file. The initial policy is provided to
-the hypervisor as a multiboot module; this command allows runtime updates to the
-policy. Loading new security policy will reset runtime changes to device labels.
-
-=back
-
-=head1 PLATFORM SHARED RESOURCE MONITORING/CONTROL
-
-Intel Haswell and later server platforms offer shared resource monitoring
-and control technologies. The availability of these technologies and the
-hardware capabilities can be shown with B<psr-hwinfo>.
-
-See L<http://xenbits.xen.org/docs/unstable/misc/xl-psr.html> for more
-information.
-
-=over 4
-
-=item B<psr-hwinfo> [I<OPTIONS>]
-
-Show Platform Shared Resource (PSR) hardware information.
-
-B<OPTIONS>
-
-=over 4
-
-=item B<-m>, B<--cmt>
-
-Show Cache Monitoring Technology (CMT) hardware information.
-
-=item B<-a>, B<--cat>
-
-Show Cache Allocation Technology (CAT) hardware information.
-
-=back
-
-=back
-
-=head2 CACHE MONITORING TECHNOLOGY
-
-Intel Haswell and later server platforms offer monitoring capability in each
-logical processor to measure specific platform shared resource metric, for
-example, L3 cache occupancy. In the Xen implementation, the monitoring
-granularity is domain level. To monitor a specific domain, just attach the
-domain id with the monitoring service. When the domain doesn't need to be
-monitored any more, detach the domain id from the monitoring service.
-
-Intel Broadwell and later server platforms also offer total/local memory
-bandwidth monitoring. Xen supports per-domain monitoring for these two
-additional monitoring types. Both memory bandwidth monitoring and L3 cache
-occupancy monitoring share the same set of underlying monitoring service. Once
-a domain is attached to the monitoring service, monitoring data can be shown
-for any of these monitoring types.
-
-There is no cache monitoring and memory bandwidth monitoring on L2 cache so
-far.
-
-=over 4
-
-=item B<psr-cmt-attach> I<domain-id>
-
-attach: Attach the platform shared resource monitoring service to a domain.
-
-=item B<psr-cmt-detach> I<domain-id>
-
-detach: Detach the platform shared resource monitoring service from a domain.
-
-=item B<psr-cmt-show> I<psr-monitor-type> [I<domain-id>]
-
-Show monitoring data for a certain domain or all domains. Current supported
-monitor types are:
- - "cache-occupancy": showing the L3 cache occupancy(KB).
- - "total-mem-bandwidth": showing the total memory bandwidth(KB/s).
- - "local-mem-bandwidth": showing the local memory bandwidth(KB/s).
-
-=back
-
-=head2 CACHE ALLOCATION TECHNOLOGY
-
-Intel Broadwell and later server platforms offer capabilities to configure and
-make use of the Cache Allocation Technology (CAT) mechanisms, which enable more
-cache resources (i.e. L3/L2 cache) to be made available for high priority
-applications. In the Xen implementation, CAT is used to control cache allocation
-on VM basis. To enforce cache on a specific domain, just set capacity bitmasks
-(CBM) for the domain.
-
-Intel Broadwell and later server platforms also offer Code/Data Prioritization
-(CDP) for cache allocations, which support specifying code or data cache for
-applications. CDP is used on a per VM basis in the Xen implementation. To
-specify code or data CBM for the domain, CDP feature must be enabled and CBM
-type options need to be specified when setting CBM, and the type options (code
-and data) are mutually exclusive. There is no CDP support on L2 so far.
-
-=over 4
-
-=item B<psr-cat-set> [I<OPTIONS>] I<domain-id> I<cbm>
-
-Set cache capacity bitmasks(CBM) for a domain. For how to specify I<cbm>
-please refer to L<http://xenbits.xen.org/docs/unstable/misc/xl-psr.html>.
-
-B<OPTIONS>
-
-=over 4
-
-=item B<-s SOCKET>, B<--socket=SOCKET>
-
-Specify the socket to process, otherwise all sockets are processed.
-
-=item B<-l LEVEL>, B<--level=LEVEL>
-
-Specify the cache level to process, otherwise the last level cache (L3) is
-processed.
-
-=item B<-c>, B<--code>
-
-Set code CBM when CDP is enabled.
-
-=item B<-d>, B<--data>
-
-Set data CBM when CDP is enabled.
-
-=back
-
-=item B<psr-cat-show> [I<OPTIONS>] [I<domain-id>]
-
-Show CAT settings for a certain domain or all domains.
-
-B<OPTIONS>
-
-=over 4
-
-=item B<-l LEVEL>, B<--level=LEVEL>
-
-Specify the cache level to process, otherwise the last level cache (L3) is
-processed.
-
-=back
-
-=back
-
-=head2 Memory Bandwidth Allocation
-
-Intel Skylake and later server platforms offer capabilities to configure and
-make use of the Memory Bandwidth Allocation (MBA) mechanisms, which provides
-OS/VMMs the ability to slow misbehaving apps/VMs by using a credit-based
-throttling mechanism. In the Xen implementation, MBA is used to control memory
-bandwidth on VM basis. To enforce bandwidth on a specific domain, just set
-throttling value (THRTL) for the domain.
-
-=over 4
-
-=item B<psr-mba-set> [I<OPTIONS>] I<domain-id> I<thrtl>
-
-Set throttling value (THRTL) for a domain. For how to specify I<thrtl>
-please refer to L<http://xenbits.xen.org/docs/unstable/misc/xl-psr.html>.
-
-B<OPTIONS>
-
-=over 4
-
-=item B<-s SOCKET>, B<--socket=SOCKET>
-
-Specify the socket to process, otherwise all sockets are processed.
-
-=back
-
-=item B<psr-mba-show> [I<domain-id>]
-
-Show MBA settings for a certain domain or all domains. For linear mode, it
-shows the decimal value. For non-linear mode, it shows hexadecimal value.
-
-=back
-
-=head1 IGNORED FOR COMPATIBILITY WITH XM
-
-xl is mostly command-line compatible with the old xm utility used with
-the old Python xend.  For compatibility, the following options are
-ignored:
-
-=over 4
-
-=item B<xl migrate --live>
-
-=back
-
-=head1 TO BE DOCUMENTED
-
-We need better documentation for:
-
-=over 4
-
-=item B<tmem>
-
-Transcendent Memory.
-
-=back
-
-=head1 SEE ALSO
-
-The following man pages:
-
-L<xl.cfg>(5), L<xlcpupool.cfg>(5), L<xentop>(1), L<xl-disk-configuration(5)>
-L<xl-network-configuration(5)>
-
-And the following documents on the xen.org website:
-
-L<http://xenbits.xen.org/docs/unstable/misc/xsm-flask.txt>
-L<http://xenbits.xen.org/docs/unstable/misc/xl-psr.html>
-
-For systems that don't automatically bring the CPU online:
-
-L<http://wiki.xen.org/wiki/Paravirt_Linux_CPU_Hotplug>
-
-=head1 BUGS
-
-Send bugs to xen-devel@lists.xen.org, see
-http://wiki.xen.org/xenwiki/ReportingBugs on how to send bug reports.
diff --git a/docs/man/xlcpupool.cfg.5.pod b/docs/man/xlcpupool.cfg.5.pod
new file mode 100644 (file)
index 0000000..792cf4f
--- /dev/null
@@ -0,0 +1,133 @@
+=head1 NAME
+
+xlcpupool.cfg - XL Cpupool Configuration File Syntax
+
+=head1 SYNOPSIS
+
+ /etc/xen/xlcpupool
+
+=head1 DESCRIPTION
+
+To create a Cpupool with xl requires the provision of a cpupool config
+file.  Typically these live in `/etc/xen/CPUPOOL.cfg` where CPUPOOL is
+the name of the cpupool.
+
+=head1 SYNTAX
+
+A cpupool config file consists of a series of C<KEY=VALUE> pairs.
+
+A value C<VALUE> is one of:
+
+=over 4
+
+=item B<"STRING">
+
+A string, surrounded by either single or double quotes.
+
+=item B<NUMBER>
+
+A number, in either decimal, octal (using a C<0> prefix) or
+hexadecimal (using an C<0x> prefix).
+
+=item B<[ VALUE, VALUE, ... ]>
+
+A list of C<VALUES> of the above types. Lists are homogeneous and are
+not nested.
+
+=back
+
+The semantics of each C<KEY> defines which form of C<VALUE> is required.
+
+=head1 OPTIONS
+
+=head2 Mandatory Configuration Items
+
+The following key is mandatory for any cpupool:
+
+=over 4
+
+=item B<name="NAME">
+
+Specifies the name of the cpupool.  Names of cpupools existing on a
+single host must be unique.
+
+=back
+
+=head2 Optional Configuration Items
+
+The following options apply to guests of any type.
+
+=over 4
+
+=item B<sched="SCHED">
+
+Specifies the scheduler which is used for the cpupool. Valid
+values for C<SCHED> are:
+
+=over 4
+
+=item B<credit>
+
+the credit scheduler
+
+=item B<credit2>
+
+the credit2 scheduler
+
+=item B<rtds>
+
+the RTDS scheduler
+
+=back
+
+The default scheduler is the one used for C<Pool-0> specified as
+boot parameter of the hypervisor.
+
+=item B<nodes="NODES">
+
+Specifies the cpus of the NUMA-nodes given in C<NODES> (an integer or
+a list of integers) to be member of the cpupool. The free cpus in the
+specified nodes are allocated in the new cpupool.
+
+=item B<cpus="CPU-LIST">
+
+Specifies the cpus that will be member of the cpupool. All the specified
+cpus must be free, or creation will fail. C<CPU-LIST> may be specified
+as follows:
+
+=over 4
+
+=item ["2", "3", "5"]
+
+means that cpus 2,3,5 will be member of the cpupool.
+
+=item "0-3,5,^1"
+
+means that cpus 0,2,3 and 5 will be member of the cpupool. A "node:" or
+"nodes:" modifier can be used. E.g., "0,node:1,nodes:2-3,^10-13" means
+that pcpus 0, plus all the cpus of NUMA nodes 1,2,3 with the exception
+of cpus 10,11,12,13 will be memeber of the cpupool.
+
+=back
+
+If neither B<nodes> nor B<cpus> are specified only the first free cpu
+found will be allocated in the new cpupool.
+
+=back
+
+=head1 FILES
+
+F</etc/xen/CPUPOOL.cfg>
+
+=head1 BUGS
+
+This document is a work in progress and contains items which require
+further documentation and which are generally incomplete (marked with
+XXX).  However all options are included here whether or not they are
+fully documented.
+
+Patches to improve incomplete items (or any other item) would be
+gratefully received on the xen-devel@lists.xen.org mailing
+list. Please see L<http://wiki.xen.org/wiki/SubmittingXenPatches> for
+information on how to submit a patch to Xen.
+
diff --git a/docs/man/xlcpupool.cfg.pod.5 b/docs/man/xlcpupool.cfg.pod.5
deleted file mode 100644 (file)
index 792cf4f..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-=head1 NAME
-
-xlcpupool.cfg - XL Cpupool Configuration File Syntax
-
-=head1 SYNOPSIS
-
- /etc/xen/xlcpupool
-
-=head1 DESCRIPTION
-
-To create a Cpupool with xl requires the provision of a cpupool config
-file.  Typically these live in `/etc/xen/CPUPOOL.cfg` where CPUPOOL is
-the name of the cpupool.
-
-=head1 SYNTAX
-
-A cpupool config file consists of a series of C<KEY=VALUE> pairs.
-
-A value C<VALUE> is one of:
-
-=over 4
-
-=item B<"STRING">
-
-A string, surrounded by either single or double quotes.
-
-=item B<NUMBER>
-
-A number, in either decimal, octal (using a C<0> prefix) or
-hexadecimal (using an C<0x> prefix).
-
-=item B<[ VALUE, VALUE, ... ]>
-
-A list of C<VALUES> of the above types. Lists are homogeneous and are
-not nested.
-
-=back
-
-The semantics of each C<KEY> defines which form of C<VALUE> is required.
-
-=head1 OPTIONS
-
-=head2 Mandatory Configuration Items
-
-The following key is mandatory for any cpupool:
-
-=over 4
-
-=item B<name="NAME">
-
-Specifies the name of the cpupool.  Names of cpupools existing on a
-single host must be unique.
-
-=back
-
-=head2 Optional Configuration Items
-
-The following options apply to guests of any type.
-
-=over 4
-
-=item B<sched="SCHED">
-
-Specifies the scheduler which is used for the cpupool. Valid
-values for C<SCHED> are:
-
-=over 4
-
-=item B<credit>
-
-the credit scheduler
-
-=item B<credit2>
-
-the credit2 scheduler
-
-=item B<rtds>
-
-the RTDS scheduler
-
-=back
-
-The default scheduler is the one used for C<Pool-0> specified as
-boot parameter of the hypervisor.
-
-=item B<nodes="NODES">
-
-Specifies the cpus of the NUMA-nodes given in C<NODES> (an integer or
-a list of integers) to be member of the cpupool. The free cpus in the
-specified nodes are allocated in the new cpupool.
-
-=item B<cpus="CPU-LIST">
-
-Specifies the cpus that will be member of the cpupool. All the specified
-cpus must be free, or creation will fail. C<CPU-LIST> may be specified
-as follows:
-
-=over 4
-
-=item ["2", "3", "5"]
-
-means that cpus 2,3,5 will be member of the cpupool.
-
-=item "0-3,5,^1"
-
-means that cpus 0,2,3 and 5 will be member of the cpupool. A "node:" or
-"nodes:" modifier can be used. E.g., "0,node:1,nodes:2-3,^10-13" means
-that pcpus 0, plus all the cpus of NUMA nodes 1,2,3 with the exception
-of cpus 10,11,12,13 will be memeber of the cpupool.
-
-=back
-
-If neither B<nodes> nor B<cpus> are specified only the first free cpu
-found will be allocated in the new cpupool.
-
-=back
-
-=head1 FILES
-
-F</etc/xen/CPUPOOL.cfg>
-
-=head1 BUGS
-
-This document is a work in progress and contains items which require
-further documentation and which are generally incomplete (marked with
-XXX).  However all options are included here whether or not they are
-fully documented.
-
-Patches to improve incomplete items (or any other item) would be
-gratefully received on the xen-devel@lists.xen.org mailing
-list. Please see L<http://wiki.xen.org/wiki/SubmittingXenPatches> for
-information on how to submit a patch to Xen.
-