[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] xm, xend: Make cpus parameter available
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1252506810 -3600 # Node ID 71c7c3994b19d5fb38371c25d299f1ac37841430 # Parent 67201ec9ed798037a3c06195a0fe241652694362 xm,xend: Make cpus parameter available When I started a VM by using xm create command, cpus parameter in VM configuration files was ignored. The problem occurred only when I used XenAPI. This patch makes the parameter available. Signed-off-by: Masaki Kanno <kanno.masaki@xxxxxxxxxxxxxx> --- tools/python/xen/xend/XendConfig.py | 56 +++++++++++++++++--------------- tools/python/xen/xend/XendDomainInfo.py | 14 +++++++- tools/python/xen/xm/xenapi_create.py | 17 +++++++++ 3 files changed, 61 insertions(+), 26 deletions(-) diff -r 67201ec9ed79 -r 71c7c3994b19 tools/python/xen/xend/XendConfig.py --- a/tools/python/xen/xend/XendConfig.py Wed Sep 09 15:32:30 2009 +0100 +++ b/tools/python/xen/xend/XendConfig.py Wed Sep 09 15:33:30 2009 +0100 @@ -547,7 +547,28 @@ class XendConfig(dict): if 'handle' in dominfo: self['uuid'] = uuid.toString(dominfo['handle']) - + + def _convert_cpus_to_list(self, s): + # Convert the following string to list of ints. + # The string supports a list of ranges (0-3), + # seperated by commas, and negation (^1). + # Precedence is settled by order of the string: + # "0-3,^1" -> [0,2,3] + # "0-3,^1,1" -> [0,1,2,3] + l = [] + for c in s.split(','): + if c.find('-') != -1: + (x, y) = c.split('-') + for i in range(int(x), int(y)+1): + l.append(int(i)) + else: + # remove this element from the list + if c[0] == '^': + l = [x for x in l if x != int(c[1:])] + else: + l.append(int(c)) + return l + def parse_cpuid(self, cfg, field): def int2bin(n, count=32): return "".join([str((n >> y) & 1) for y in range(count-1, -1, -1)]) @@ -692,27 +713,6 @@ class XendConfig(dict): # Convert 'cpus' to list of list of ints cpus_list = [] if 'cpus' in cfg: - # Convert the following string to list of ints. - # The string supports a list of ranges (0-3), - # seperated by commas, and negation (^1). - # Precedence is settled by order of the string: - # "0-3,^1" -> [0,2,3] - # "0-3,^1,1" -> [0,1,2,3] - def cnv(s): - l = [] - for c in s.split(','): - if c.find('-') != -1: - (x, y) = c.split('-') - for i in range(int(x), int(y)+1): - l.append(int(i)) - else: - # remove this element from the list - if c[0] == '^': - l = [x for x in l if x != int(c[1:])] - else: - l.append(int(c)) - return l - if type(cfg['cpus']) == list: if len(cfg['cpus']) > 0 and type(cfg['cpus'][0]) == list: # If sxp_cfg was created from config.sxp, @@ -736,7 +736,7 @@ class XendConfig(dict): # ["0-3,^1","1-4,^2"] -> [[0,2,3],[1,3,4]] try: for c in cfg['cpus']: - cpus = cnv(c) + cpus = self._convert_cpus_to_list(c) cpus_list.append(cpus) except ValueError, e: raise XendConfigError('cpus = %s: %s' % (cfg['cpus'], e)) @@ -752,7 +752,7 @@ class XendConfig(dict): # "1" -> [[1],[1]] # "0-3,^1" -> [[0,2,3],[0,2,3]] try: - cpus = cnv(cfg['cpus']) + cpus = self._convert_cpus_to_list(cfg['cpus']) for v in range(0, cfg['vcpus']): cpus_list.append(cpus) except ValueError, e: @@ -1020,7 +1020,13 @@ class XendConfig(dict): self['vcpus_params']['weight'] = \ int(self['vcpus_params'].get('weight', 256)) - self['vcpus_params']['cap'] = int(self['vcpus_params'].get('cap', 0)) + self['vcpus_params']['cap'] = \ + int(self['vcpus_params'].get('cap', 0)) + + for key, val in self['vcpus_params'].items(): + if key.startswith('cpumap'): + self['vcpus_params'][key] = \ + ','.join(map(str, self._convert_cpus_to_list(val))) def cpuid_to_sxp(self, sxpr, field): regs_list = [] diff -r 67201ec9ed79 -r 71c7c3994b19 tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Wed Sep 09 15:32:30 2009 +0100 +++ b/tools/python/xen/xend/XendDomainInfo.py Wed Sep 09 15:33:30 2009 +0100 @@ -2538,7 +2538,19 @@ class XendDomainInfo: return True return False - if has_cpus(): + def has_cpumap(): + if self.info.has_key('vcpus_params'): + for k, v in self.info['vcpus_params'].items(): + if k.startswith('cpumap'): + return True + return False + + if has_cpumap(): + for v in range(0, self.info['VCPUs_max']): + if self.info['vcpus_params'].has_key('cpumap%i' % v): + cpumask = map(int, self.info['vcpus_params']['cpumap%i' % v].split(',')) + xc.vcpu_setaffinity(self.domid, v, cpumask) + elif has_cpus(): for v in range(0, self.info['VCPUs_max']): if self.info['cpus'][v]: xc.vcpu_setaffinity(self.domid, v, self.info['cpus'][v]) diff -r 67201ec9ed79 -r 71c7c3994b19 tools/python/xen/xm/xenapi_create.py --- a/tools/python/xen/xm/xenapi_create.py Wed Sep 09 15:32:30 2009 +0100 +++ b/tools/python/xen/xm/xenapi_create.py Wed Sep 09 15:33:30 2009 +0100 @@ -1094,6 +1094,23 @@ class sxp2xml: = str(get_child_by_name(config, "cpu_cap", 0)) vcpu_params.append(vcpu_param) + cpus = get_child_by_name(config, "cpus", []) + if type(cpus) == list: + vcpu = 0 + for cpu in cpus: + if cpu: + vcpu_param = document.createElement("vcpu_param") + vcpu_param.attributes["key"] = "cpumap%i" % vcpu + vcpu_param.attributes["value"] = str(cpu) + vcpu_params.append(vcpu_param) + vcpu = vcpu + 1 + else: + for vcpu in range(0, int(get_child_by_name(config, "vcpus", 1))): + vcpu_param = document.createElement("vcpu_param") + vcpu_param.attributes["key"] = "cpumap%i" % vcpu + vcpu_param.attributes["value"] = str(cpus) + vcpu_params.append(vcpu_param) + return vcpu_params _eths = -1 _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |