- fate#310510 - fix xenpaging
This change reverses the task of xenpaging. Before this change a fixed number of pages was paged out. With this change the guest will not have access to more than the given number of pages at the same time. The xenpaging= config option is replaced by actmem= A new xm mem-swap-target is added. The xenpaging binary is moved to /usr/lib/xen/bin/ xenpaging.HVMCOPY_gfn_paged_out.patch xenpaging.XEN_PAGING_DIR.patch xenpaging.add_evict_pages.patch xenpaging.bitmap_clear.patch xenpaging.cmdline-interface.patch xenpaging.encapsulate_domain_info.patch xenpaging.file_op-return-code.patch xenpaging.guest-memusage.patch xenpaging.install-to-libexec.patch xenpaging.low_target_policy_nomru.patch xenpaging.main-loop-exit-handling.patch xenpaging.misleading-comment.patch xenpaging.page_in-munmap-size.patch xenpaging.print-gfn.patch xenpaging.record-numer-paged-out-pages.patch xenpaging.reset-uncomsumed.patch xenpaging.stale-comments.patch xenpaging.target-tot_pages.patch xenpaging.use-PERROR.patch xenpaging.watch-target-tot_pages.patch xenpaging.watch_event-DPRINTF.patch xenpaging.xc_interface_open-comment.patch - xen.spec: update filelist package /usr/lib*/xen with wildcard to pickup new files remove duplicate /usr/sbin/xen-list from filelist OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=157
This commit is contained in:
@@ -1,4 +1,7 @@
|
||||
xenpaging: start xenpaging via config option
|
||||
# HG changeset patch
|
||||
# Parent 659ee31faec91ac543578db7c9b2849fb7367419
|
||||
|
||||
xenpaging: xend: start xenpaging via config option
|
||||
|
||||
Start xenpaging via config option.
|
||||
|
||||
@@ -8,10 +11,14 @@ TODO: parse config values like 42K, 42M, 42G, 42%
|
||||
Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
||||
|
||||
---
|
||||
v5:
|
||||
use actmem=, xenpaging_file=, xenpaging_extra=
|
||||
add xm mem-swap-target
|
||||
|
||||
v4:
|
||||
add config option for pagefile directory
|
||||
add config option to enable debug
|
||||
add config option to set polic mru_size
|
||||
add config option to set policy mru_size
|
||||
fail if chdir fails
|
||||
force self.xenpaging* variables to be strings because a xm new may turn some
|
||||
of them into type int and later os.execve fails with a TypeError
|
||||
@@ -26,35 +33,34 @@ v2:
|
||||
allows hardlinking for further inspection
|
||||
|
||||
---
|
||||
tools/examples/xmexample.hvm | 12 ++++
|
||||
tools/python/README.XendConfig | 4 +
|
||||
tools/python/README.sxpcfg | 4 +
|
||||
tools/python/xen/xend/XendConfig.py | 12 ++++
|
||||
tools/python/xen/xend/XendDomainInfo.py | 12 ++++
|
||||
tools/python/xen/xend/image.py | 87 ++++++++++++++++++++++++++++++++
|
||||
tools/python/xen/xm/create.py | 20 +++++++
|
||||
tools/python/xen/xm/xenapi_create.py | 4 +
|
||||
8 files changed, 155 insertions(+)
|
||||
tools/examples/xmexample.hvm | 9 +++
|
||||
tools/python/README.XendConfig | 3 +
|
||||
tools/python/README.sxpcfg | 3 +
|
||||
tools/python/xen/xend/XendConfig.py | 9 +++
|
||||
tools/python/xen/xend/XendDomain.py | 15 +++++
|
||||
tools/python/xen/xend/XendDomainInfo.py | 22 ++++++++
|
||||
tools/python/xen/xend/image.py | 85 ++++++++++++++++++++++++++++++++
|
||||
tools/python/xen/xm/create.py | 15 +++++
|
||||
tools/python/xen/xm/main.py | 14 +++++
|
||||
tools/python/xen/xm/xenapi_create.py | 3 +
|
||||
10 files changed, 178 insertions(+)
|
||||
|
||||
Index: xen-4.1.2-testing/tools/examples/xmexample.hvm
|
||||
===================================================================
|
||||
--- xen-4.1.2-testing.orig/tools/examples/xmexample.hvm
|
||||
+++ xen-4.1.2-testing/tools/examples/xmexample.hvm
|
||||
@@ -127,6 +127,18 @@ disk = [ 'file:/var/lib/xen/images/disk.
|
||||
@@ -127,6 +127,15 @@ disk = [ 'file:/var/lib/xen/images/disk.
|
||||
# Device Model to be used
|
||||
device_model = 'qemu-dm'
|
||||
|
||||
+# number of guest pages to page-out, or -1 for entire guest memory range
|
||||
+xenpaging=42
|
||||
+# the amount of memory in MiB for the guest
|
||||
+#actmem=42
|
||||
+
|
||||
+# directory to store guest page file
|
||||
+#xenpaging_workdir="/var/lib/xen/xenpaging"
|
||||
+# Optional: guest page file
|
||||
+#xenpaging_file="/var/lib/xen/xenpaging/<domain_name>.<domaind_id>.paging"
|
||||
+
|
||||
+# enable debug output in pager
|
||||
+#xenpaging_debug=0
|
||||
+
|
||||
+# number of paged-in pages to keep in memory
|
||||
+#xenpaging_policy_mru_size=1024
|
||||
+# Optional: extra cmdline options for xenpaging
|
||||
+#xenpaging_extra=[ 'string', 'string' ]
|
||||
+
|
||||
#-----------------------------------------------------------------------------
|
||||
# boot on floppy (a), hard disk (c), Network (n) or CD-ROM (d)
|
||||
@@ -63,14 +69,13 @@ Index: xen-4.1.2-testing/tools/python/README.XendConfig
|
||||
===================================================================
|
||||
--- xen-4.1.2-testing.orig/tools/python/README.XendConfig
|
||||
+++ xen-4.1.2-testing/tools/python/README.XendConfig
|
||||
@@ -120,6 +120,10 @@ otherConfig
|
||||
@@ -120,6 +120,9 @@ otherConfig
|
||||
image.vncdisplay
|
||||
image.vncunused
|
||||
image.hvm.device_model
|
||||
+ image.hvm.xenpaging
|
||||
+ image.hvm.xenpaging_workdir
|
||||
+ image.hvm.xenpaging_debug
|
||||
+ image.hvm.xenpaging_policy_mru_size
|
||||
+ image.hvm.actmem
|
||||
+ image.hvm.xenpaging_file
|
||||
+ image.hvm.xenpaging_extra
|
||||
image.hvm.display
|
||||
image.hvm.xauthority
|
||||
image.hvm.vncconsole
|
||||
@@ -78,14 +83,13 @@ Index: xen-4.1.2-testing/tools/python/README.sxpcfg
|
||||
===================================================================
|
||||
--- xen-4.1.2-testing.orig/tools/python/README.sxpcfg
|
||||
+++ xen-4.1.2-testing/tools/python/README.sxpcfg
|
||||
@@ -51,6 +51,10 @@ image
|
||||
@@ -51,6 +51,9 @@ image
|
||||
- vncunused
|
||||
(HVM)
|
||||
- device_model
|
||||
+ - xenpaging
|
||||
+ - xenpaging_workdir
|
||||
+ - xenpaging_debug
|
||||
+ - xenpaging_policy_mru_size
|
||||
+ - actmem
|
||||
+ - xenpaging_file
|
||||
+ - xenpaging_extra
|
||||
- display
|
||||
- xauthority
|
||||
- vncconsole
|
||||
@@ -93,37 +97,77 @@ Index: xen-4.1.2-testing/tools/python/xen/xend/XendConfig.py
|
||||
===================================================================
|
||||
--- xen-4.1.2-testing.orig/tools/python/xen/xend/XendConfig.py
|
||||
+++ xen-4.1.2-testing/tools/python/xen/xend/XendConfig.py
|
||||
@@ -147,6 +147,10 @@ XENAPI_PLATFORM_CFG_TYPES = {
|
||||
@@ -147,6 +147,9 @@ XENAPI_PLATFORM_CFG_TYPES = {
|
||||
'apic': int,
|
||||
'boot': str,
|
||||
'device_model': str,
|
||||
+ 'xenpaging': str,
|
||||
+ 'xenpaging_workdir': str,
|
||||
+ 'xenpaging_debug': str,
|
||||
+ 'xenpaging_policy_mru_size': str,
|
||||
+ 'actmem': str,
|
||||
+ 'xenpaging_file': str,
|
||||
+ 'xenpaging_extra': str,
|
||||
'loader': str,
|
||||
'display' : str,
|
||||
'fda': str,
|
||||
@@ -516,6 +520,14 @@ class XendConfig(dict):
|
||||
@@ -516,6 +519,12 @@ class XendConfig(dict):
|
||||
self['platform']['nomigrate'] = 0
|
||||
|
||||
if self.is_hvm():
|
||||
+ if 'xenpaging' not in self['platform']:
|
||||
+ self['platform']['xenpaging'] = "0"
|
||||
+ if 'xenpaging_workdir' not in self['platform']:
|
||||
+ self['platform']['xenpaging_workdir'] = "/var/lib/xen/xenpaging"
|
||||
+ if 'xenpaging_debug' not in self['platform']:
|
||||
+ self['platform']['xenpaging_debug'] = "0"
|
||||
+ if 'xenpaging_policy_mru_size' not in self['platform']:
|
||||
+ self['platform']['xenpaging_policy_mru_size'] = "0"
|
||||
+ if 'actmem' not in self['platform']:
|
||||
+ self['platform']['actmem'] = "0"
|
||||
+ if 'xenpaging_file' not in self['platform']:
|
||||
+ self['platform']['xenpaging_file'] = ""
|
||||
+ if 'xenpaging_extra' not in self['platform']:
|
||||
+ self['platform']['xenpaging_extra'] = []
|
||||
if 'timer_mode' not in self['platform']:
|
||||
self['platform']['timer_mode'] = 1
|
||||
if 'extid' in self['platform'] and int(self['platform']['extid']) == 1:
|
||||
Index: xen-4.1.2-testing/tools/python/xen/xend/XendDomain.py
|
||||
===================================================================
|
||||
--- xen-4.1.2-testing.orig/tools/python/xen/xend/XendDomain.py
|
||||
+++ xen-4.1.2-testing/tools/python/xen/xend/XendDomain.py
|
||||
@@ -2022,6 +2022,21 @@ class XendDomain:
|
||||
log.exception(ex)
|
||||
raise XendError(str(ex))
|
||||
|
||||
+ def domain_swaptarget_set(self, domid, mem):
|
||||
+ """Set the memory limit for a domain.
|
||||
+
|
||||
+ @param domid: Domain ID or Name
|
||||
+ @type domid: int or string.
|
||||
+ @param mem: memory limit (in MiB)
|
||||
+ @type mem: int
|
||||
+ @raise XendError: fail to set memory
|
||||
+ @rtype: 0
|
||||
+ """
|
||||
+ dominfo = self.domain_lookup_nr(domid)
|
||||
+ if not dominfo:
|
||||
+ raise XendInvalidDomain(str(domid))
|
||||
+ dominfo.setSwapTarget(mem)
|
||||
+
|
||||
def domain_maxmem_set(self, domid, mem):
|
||||
"""Set the memory limit for a domain.
|
||||
|
||||
Index: xen-4.1.2-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
===================================================================
|
||||
--- xen-4.1.2-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||
+++ xen-4.1.2-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
@@ -2291,6 +2291,8 @@ class XendDomainInfo:
|
||||
@@ -1503,6 +1503,16 @@ class XendDomainInfo:
|
||||
break
|
||||
xen.xend.XendDomain.instance().managed_config_save(self)
|
||||
|
||||
+ def setSwapTarget(self, target):
|
||||
+ """Set the swap target of this domain.
|
||||
+ @param target: In MiB.
|
||||
+ """
|
||||
+ log.debug("Setting swap target of domain %s (%s) to %d MiB.",
|
||||
+ self.info['name_label'], str(self.domid), target)
|
||||
+
|
||||
+ if self.domid > 0:
|
||||
+ self.storeDom("memory/target-tot_pages", target * 1024)
|
||||
+
|
||||
def setMemoryTarget(self, target):
|
||||
"""Set the memory target of this domain.
|
||||
@param target: In MiB.
|
||||
@@ -2291,6 +2301,8 @@ class XendDomainInfo:
|
||||
self.info['name_label'], self.domid, self.info['uuid'],
|
||||
new_name, new_uuid)
|
||||
self._unwatchVm()
|
||||
@@ -132,7 +176,7 @@ Index: xen-4.1.2-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
self._releaseDevices()
|
||||
# Remove existing vm node in xenstore
|
||||
self._removeVm()
|
||||
@@ -2965,6 +2967,9 @@ class XendDomainInfo:
|
||||
@@ -2965,6 +2977,9 @@ class XendDomainInfo:
|
||||
|
||||
self._createDevices()
|
||||
|
||||
@@ -142,7 +186,7 @@ Index: xen-4.1.2-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
self.image.cleanupTmpImages()
|
||||
|
||||
self.info['start_time'] = time.time()
|
||||
@@ -2989,6 +2994,8 @@ class XendDomainInfo:
|
||||
@@ -2989,6 +3004,8 @@ class XendDomainInfo:
|
||||
self.refresh_shutdown_lock.acquire()
|
||||
try:
|
||||
self.unwatchShutdown()
|
||||
@@ -151,7 +195,7 @@ Index: xen-4.1.2-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
self._releaseDevices()
|
||||
bootloader_tidy(self)
|
||||
|
||||
@@ -3073,6 +3080,7 @@ class XendDomainInfo:
|
||||
@@ -3073,6 +3090,7 @@ class XendDomainInfo:
|
||||
self.image = image.create(self, self.info)
|
||||
if self.image:
|
||||
self._createDevices(True)
|
||||
@@ -159,7 +203,7 @@ Index: xen-4.1.2-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
self.console_port = console_port
|
||||
self._storeDomDetails()
|
||||
self._registerWatches()
|
||||
@@ -3214,6 +3222,8 @@ class XendDomainInfo:
|
||||
@@ -3214,6 +3232,8 @@ class XendDomainInfo:
|
||||
# could also fetch a parsed note from xenstore
|
||||
fast = self.info.get_notes().get('SUSPEND_CANCEL') and 1 or 0
|
||||
if not fast:
|
||||
@@ -168,7 +212,7 @@ Index: xen-4.1.2-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
self._releaseDevices()
|
||||
self.testDeviceComplete()
|
||||
self.testvifsComplete()
|
||||
@@ -3229,6 +3239,8 @@ class XendDomainInfo:
|
||||
@@ -3229,6 +3249,8 @@ class XendDomainInfo:
|
||||
self._storeDomDetails()
|
||||
|
||||
self._createDevices()
|
||||
@@ -181,38 +225,34 @@ Index: xen-4.1.2-testing/tools/python/xen/xend/image.py
|
||||
===================================================================
|
||||
--- xen-4.1.2-testing.orig/tools/python/xen/xend/image.py
|
||||
+++ xen-4.1.2-testing/tools/python/xen/xend/image.py
|
||||
@@ -122,6 +122,11 @@ class ImageHandler:
|
||||
@@ -122,6 +122,10 @@ class ImageHandler:
|
||||
self.vm.permissionsVm("image/cmdline", { 'dom': self.vm.getDomid(), 'read': True } )
|
||||
|
||||
self.device_model = vmConfig['platform'].get('device_model')
|
||||
+ self.xenpaging = str(vmConfig['platform'].get('xenpaging'))
|
||||
+ self.xenpaging_workdir = str(vmConfig['platform'].get('xenpaging_workdir'))
|
||||
+ self.xenpaging_debug = str(vmConfig['platform'].get('xenpaging_debug'))
|
||||
+ self.xenpaging_policy_mru_size = str(vmConfig['platform'].get('xenpaging_policy_mru_size'))
|
||||
+ self.actmem = str(vmConfig['platform'].get('actmem'))
|
||||
+ self.xenpaging_file = str(vmConfig['platform'].get('xenpaging_file'))
|
||||
+ self.xenpaging_extra = vmConfig['platform'].get('xenpaging_extra')
|
||||
+ self.xenpaging_pid = None
|
||||
|
||||
self.display = vmConfig['platform'].get('display')
|
||||
self.xauthority = vmConfig['platform'].get('xauthority')
|
||||
@@ -392,6 +397,88 @@ class ImageHandler:
|
||||
@@ -392,6 +396,87 @@ class ImageHandler:
|
||||
sentinel_fifos_inuse[sentinel_path_fifo] = 1
|
||||
self.sentinel_path_fifo = sentinel_path_fifo
|
||||
|
||||
+ def createXenPaging(self):
|
||||
+ if not self.vm.info.is_hvm():
|
||||
+ return
|
||||
+ if self.xenpaging == "0":
|
||||
+ if self.actmem == "0":
|
||||
+ return
|
||||
+ if self.xenpaging_pid:
|
||||
+ return
|
||||
+ xenpaging_bin = auxbin.pathTo("xenpaging")
|
||||
+ args = [xenpaging_bin]
|
||||
+ args = args + ([ "%d" % self.vm.getDomid()])
|
||||
+ args = args + ([ "%s" % self.xenpaging])
|
||||
+ env = dict(os.environ)
|
||||
+ if not self.xenpaging_debug == "0":
|
||||
+ env['XENPAGING_DEBUG'] = self.xenpaging_debug
|
||||
+ if not self.xenpaging_policy_mru_size == "0":
|
||||
+ env['XENPAGING_POLICY_MRU_SIZE'] = self.xenpaging_policy_mru_size
|
||||
+ args = args + ([ "-f", "/var/lib/xen/xenpaging/%s.%d.paging" % (str(self.vm.info['name_label']), self.vm.getDomid())])
|
||||
+ if self.xenpaging_extra:
|
||||
+ args = args + (self.xenpaging_extra)
|
||||
+ args = args + ([ "-d", "%d" % self.vm.getDomid()])
|
||||
+ self.xenpaging_logfile = "/var/log/xen/xenpaging-%s.log" % str(self.vm.info['name_label'])
|
||||
+ logfile_mode = os.O_WRONLY|os.O_CREAT|os.O_APPEND|os.O_TRUNC
|
||||
+ null = os.open("/dev/null", os.O_RDONLY)
|
||||
@@ -230,24 +270,26 @@ Index: xen-4.1.2-testing/tools/python/xen/xend/image.py
|
||||
+ os.dup2(null, 0)
|
||||
+ os.dup2(logfd, 1)
|
||||
+ os.dup2(logfd, 2)
|
||||
+ os.chdir(self.xenpaging_workdir)
|
||||
+ try:
|
||||
+ env = dict(os.environ)
|
||||
+ log.info("starting %s" % args)
|
||||
+ os.execve(xenpaging_bin, args, env)
|
||||
+ except Exception, e:
|
||||
+ log.warn('failed to execute xenpaging: %s' % utils.exception_string(e))
|
||||
+ os._exit(126)
|
||||
+ except:
|
||||
+ log.warn("starting xenpaging in %s failed" % self.xenpaging_workdir)
|
||||
+ log.warn("starting xenpaging failed")
|
||||
+ os._exit(127)
|
||||
+ else:
|
||||
+ osdep.postfork(contract, abandon=True)
|
||||
+ self.xenpaging_pid = xenpaging_pid
|
||||
+ os.close(null)
|
||||
+ os.close(logfd)
|
||||
+ self.vm.storeDom("xenpaging/xenpaging-pid", self.xenpaging_pid)
|
||||
+ self.vm.storeDom("memory/target-tot_pages", int(self.actmem) * 1024)
|
||||
+
|
||||
+ def destroyXenPaging(self):
|
||||
+ if self.xenpaging == "0":
|
||||
+ if self.actmem == "0":
|
||||
+ return
|
||||
+ if self.xenpaging_pid:
|
||||
+ try:
|
||||
@@ -286,52 +328,85 @@ Index: xen-4.1.2-testing/tools/python/xen/xm/create.py
|
||||
===================================================================
|
||||
--- xen-4.1.2-testing.orig/tools/python/xen/xm/create.py
|
||||
+++ xen-4.1.2-testing/tools/python/xen/xm/create.py
|
||||
@@ -495,6 +495,22 @@ gopts.var('nfs_root', val="PATH",
|
||||
@@ -495,6 +495,18 @@ gopts.var('nfs_root', val="PATH",
|
||||
fn=set_value, default=None,
|
||||
use="Set the path of the root NFS directory.")
|
||||
|
||||
+gopts.var('xenpaging', val='NUM',
|
||||
+gopts.var('actmem', val='NUM',
|
||||
+ fn=set_value, default='0',
|
||||
+ use="Number of pages to swap.")
|
||||
+
|
||||
+gopts.var('xenpaging_workdir', val='PATH',
|
||||
+ fn=set_value, default='/var/lib/xen/xenpaging',
|
||||
+ use="Number of pages to swap.")
|
||||
+gopts.var('xenpaging_file', val='PATH',
|
||||
+ fn=set_value, default=None,
|
||||
+ use="pagefile to use (optional)")
|
||||
+
|
||||
+gopts.var('xenpaging_debug', val='NUM',
|
||||
+ fn=set_value, default='0',
|
||||
+ use="Number of pages to swap.")
|
||||
+
|
||||
+gopts.var('xenpaging_policy_mru_size', val='NUM',
|
||||
+ fn=set_value, default='0',
|
||||
+ use="Number of pages to swap.")
|
||||
+gopts.var('xenpaging_extra', val='string1,string2',
|
||||
+ fn=append_value, default=[],
|
||||
+ use="additional args for xenpaging (optional)")
|
||||
+
|
||||
gopts.var('device_model', val='FILE',
|
||||
fn=set_value, default=None,
|
||||
use="Path to device model program.")
|
||||
@@ -1095,6 +1111,10 @@ def configure_hvm(config_image, vals):
|
||||
@@ -1095,6 +1107,9 @@ def configure_hvm(config_image, vals):
|
||||
args = [ 'acpi', 'apic',
|
||||
'boot',
|
||||
'cpuid', 'cpuid_check',
|
||||
+ 'xenpaging',
|
||||
+ 'xenpaging_workdir',
|
||||
+ 'xenpaging_debug',
|
||||
+ 'xenpaging_policy_mru_size',
|
||||
+ 'actmem',
|
||||
+ 'xenpaging_file',
|
||||
+ 'xenpaging_extra',
|
||||
'device_model', 'display',
|
||||
'fda', 'fdb',
|
||||
'gfx_passthru', 'guest_os_type',
|
||||
Index: xen-4.1.2-testing/tools/python/xen/xm/main.py
|
||||
===================================================================
|
||||
--- xen-4.1.2-testing.orig/tools/python/xen/xm/main.py
|
||||
+++ xen-4.1.2-testing/tools/python/xen/xm/main.py
|
||||
@@ -115,6 +115,8 @@ SUBCOMMAND_HELP = {
|
||||
'Set the maximum amount reservation for a domain.'),
|
||||
'mem-set' : ('<Domain> <Mem>',
|
||||
'Set the current memory usage for a domain.'),
|
||||
+ 'mem-swap-target' : ('<Domain> <Mem>',
|
||||
+ 'Set the memory usage for a domain.'),
|
||||
'migrate' : ('<Domain> <Host>',
|
||||
'Migrate a domain to another machine.'),
|
||||
'pause' : ('<Domain>', 'Pause execution of a domain.'),
|
||||
@@ -1667,6 +1669,17 @@ def xm_mem_set(args):
|
||||
mem_target = int_unit(args[1], 'm')
|
||||
server.xend.domain.setMemoryTarget(dom, mem_target)
|
||||
|
||||
+def xm_mem_swap_target(args):
|
||||
+ arg_check(args, "mem-swap-target", 2)
|
||||
+
|
||||
+ dom = args[0]
|
||||
+
|
||||
+ if serverType == SERVER_XEN_API:
|
||||
+ err("xenapi not supported")
|
||||
+ else:
|
||||
+ swap_target = int_unit(args[1], 'm')
|
||||
+ server.xend.domain.swaptarget_set(dom, swap_target)
|
||||
+
|
||||
def xm_usb_add(args):
|
||||
arg_check(args, "usb-add", 2)
|
||||
server.xend.domain.usb_add(args[0],args[1])
|
||||
@@ -3926,6 +3939,7 @@ commands = {
|
||||
# memory commands
|
||||
"mem-max": xm_mem_max,
|
||||
"mem-set": xm_mem_set,
|
||||
+ "mem-swap-target": xm_mem_swap_target,
|
||||
# cpu commands
|
||||
"vcpu-pin": xm_vcpu_pin,
|
||||
"vcpu-list": xm_vcpu_list,
|
||||
Index: xen-4.1.2-testing/tools/python/xen/xm/xenapi_create.py
|
||||
===================================================================
|
||||
--- xen-4.1.2-testing.orig/tools/python/xen/xm/xenapi_create.py
|
||||
+++ xen-4.1.2-testing/tools/python/xen/xm/xenapi_create.py
|
||||
@@ -1085,6 +1085,10 @@ class sxp2xml:
|
||||
@@ -1085,6 +1085,9 @@ class sxp2xml:
|
||||
'acpi',
|
||||
'apic',
|
||||
'boot',
|
||||
+ 'xenpaging',
|
||||
+ 'xenpaging_workdir',
|
||||
+ 'xenpaging_debug',
|
||||
+ 'xenpaging_policy_mru_size',
|
||||
+ 'actmem',
|
||||
+ 'xenpaging_file',
|
||||
+ 'xenpaging_extra',
|
||||
'device_model',
|
||||
'loader',
|
||||
'fda',
|
||||
|
Reference in New Issue
Block a user