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@us.ibm.com>
Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
This commit is contained in:
cl349@firebug.cl.cam.ac.uk committed 2005-09-16 19:08:36 +00:00
1 parent 87371321cc
commit 71a28c9e9d
4 files changed
+22 -28

No files matched your search

+1
View File
@@ -155,6 +155,7 @@ class XendDomain:
if not dom0:
dom0 = self.domain_unknown(0)
dom0.dom0_init_store()
dom0.dom0_enforce_cpus()
def close(self):
pass
+20
View File
@@ -1120,6 +1120,26 @@ class XendDomainInfo:
# 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.
-27
View File
@@ -298,7 +298,6 @@ class Daemon:
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 @@ class Daemon:
#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:
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.