# HG changeset patch
# User cl349@xxxxxxxxxxxxxxxxxxxx
# Node ID 8cba45a77249ee2da7f694b2467fb66392a6e4b1
# Parent a4cf3e17bb25e03a02f1c2e0a90c73402d5c2af8
Make dom0_enforce_cpus() use vcpu_hotplug rather than directly modifying the
sysfs entries.
Directly modifying the sysfs entries causes the xenstore state of
a cpu's availability to be incorrect. Also slightly modify the
dom0-cpus description in the xend-config. Rather than specifying which
dom0 vcpus are to be used, it is now a target of how many vcpus to use
as pinvcpu ops are the preferred method for setting which physical cpu a
vcpu uses.
Signed-off-by: Ryan Harper <ryanh@xxxxxxxxxx>
Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx>
diff -r a4cf3e17bb25 -r 8cba45a77249 tools/examples/xend-config.sxp
--- a/tools/examples/xend-config.sxp Fri Sep 16 18:59:59 2005
+++ b/tools/examples/xend-config.sxp Fri Sep 16 19:08:36 2005
@@ -49,6 +49,6 @@
# If dom0-min-mem=0, dom0 will never balloon out.
(dom0-min-mem 0)
-# In SMP system, dom0 will use only CPUs in range [1,dom0-cpus]
+# In SMP system, dom0 will use dom0-cpus # of CPUS
# If dom0-cpus = 0, dom0 will take all cpus available
(dom0-cpus 0)
diff -r a4cf3e17bb25 -r 8cba45a77249 tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py Fri Sep 16 18:59:59 2005
+++ b/tools/python/xen/xend/XendDomain.py Fri Sep 16 19:08:36 2005
@@ -155,6 +155,7 @@
if not dom0:
dom0 = self.domain_unknown(0)
dom0.dom0_init_store()
+ dom0.dom0_enforce_cpus()
def close(self):
pass
diff -r a4cf3e17bb25 -r 8cba45a77249 tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py Fri Sep 16 18:59:59 2005
+++ b/tools/python/xen/xend/XendDomainInfo.py Fri Sep 16 19:08:36 2005
@@ -1120,6 +1120,26 @@
# get run-time value of vcpus and update store
self.configure_vcpus(dom_get(self.domid)['vcpus'])
+ def dom0_enforce_cpus(self):
+ dom = 0
+ # get max number of cpus to use for dom0 from config
+ from xen.xend import XendRoot
+ xroot = XendRoot.instance()
+ target = int(xroot.get_dom0_cpus())
+ log.debug("number of cpus to use is %d" % (target))
+
+ # target = 0 means use all processors
+ if target > 0:
+ # count the number of online vcpus (cpu values in v2c map >= 0)
+ vcpu_to_cpu = dom_get(dom)['vcpu_to_cpu']
+ vcpus_online = len(filter(lambda x: x >= 0, vcpu_to_cpu))
+ log.debug("found %d vcpus online" % (vcpus_online))
+
+ # disable any extra vcpus that are online over the requested target
+ for vcpu in range(target, vcpus_online):
+ log.info("enforcement is disabling DOM%d VCPU%d" % (dom, vcpu))
+ self.vcpu_hotplug(vcpu, 0)
+
def vm_field_ignore(_, _1, _2, _3):
"""Dummy config field handler used for fields with built-in handling.
diff -r a4cf3e17bb25 -r 8cba45a77249 tools/python/xen/xend/server/SrvDaemon.py
--- a/tools/python/xen/xend/server/SrvDaemon.py Fri Sep 16 18:59:59 2005
+++ b/tools/python/xen/xend/server/SrvDaemon.py Fri Sep 16 19:08:36 2005
@@ -298,7 +298,6 @@
return self.cleanup(kill=True)
def run(self, status):
- _enforce_dom0_cpus()
try:
log.info("Xend Daemon started")
event.listenEvent(self)
@@ -323,32 +322,6 @@
#sys.exit(rc)
os._exit(rc)
-def _enforce_dom0_cpus():
- dn = xroot.get_dom0_cpus()
-
- for d in glob.glob("/sys/devices/system/cpu/cpu*"):
- cpu = int(os.path.basename(d)[3:])
- if (dn == 0) or (cpu < dn):
- v = "1"
- else:
- v = "0"
- try:
- f = open("%s/online" %d, "r+")
- c = f.read(1)
- if (c != v):
- if v == "0":
- log.info("dom0 is trying to give back cpu %d", cpu)
- else:
- log.info("dom0 is trying to take cpu %d", cpu)
- f.seek(0)
- f.write(v)
- f.close()
- log.info("dom0 successfully enforced cpu %d", cpu)
- else:
- f.close()
- except:
- pass
-
def instance():
global inst
try:
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|