diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2009-11-25 14:11:02 +0000 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2009-11-25 14:11:02 +0000 |
commit | 68a94cf528e6235d8c6ff3a1882118e03b2e4f19 (patch) | |
tree | 2bb625ddf479f8db77cec5e26e894db5d0b0ba62 /tools/python | |
parent | 7d5eee4f2c1424142790c944c8e083d13a295a37 (diff) | |
download | xen-68a94cf528e6235d8c6ff3a1882118e03b2e4f19.tar.gz xen-68a94cf528e6235d8c6ff3a1882118e03b2e4f19.tar.bz2 xen-68a94cf528e6235d8c6ff3a1882118e03b2e4f19.zip |
xm: Add maxvcpus support
this is patch to add maxvcpus support to xen xm command. It's using
vcpu_avail bitmask and sets the number of vcpus to maxvcpus if
present. If it's not present, old behavior is preserved.
In domain config file you can define it as follows:
maxvcpus = 4
vcpus = 2
this automatically sets vcpus to 4 and corresponding bitmask to
present 2 vcpus in the guest with option to increase it up to 4
vcpus. If maxvcpus is not present, the old behavior for vcpus is
preserved, ie. you can set vcpus to some number of vcpus to be used
and the vcpu_avail is set appropriately to use all of them. Only when
you use maxvcpus and vcpus new vcpu_avail value is calculated to show
PV guest the desired number of vcpus only.
It's been tested using RHEL-5 32-bit PV guest with maxvcpus = 4 and
vcpus = 2 and also the previous setup of vcpus = 2 only... In both
cases I was able to use 'xm vcpu-set {domainId} {numberOfVCPUs}' to
increase move vcpu count from 0 to maxvcpus/vcpus so it was working as
designed.
Signed-off-By: Michal Novotny<minovotn@redhat.com>
Diffstat (limited to 'tools/python')
-rw-r--r-- | tools/python/xen/xm/create.py | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/tools/python/xen/xm/create.py b/tools/python/xen/xm/create.py index 32b19235e1..b13e3b559a 100644 --- a/tools/python/xen/xm/create.py +++ b/tools/python/xen/xm/create.py @@ -1029,6 +1029,24 @@ def make_config(vals): config = ['vm'] + def vcpu_conf(): + maxvcpus = False + vcpus = False + if hasattr(vals, 'maxvcpus'): + maxvcpus = getattr(vals, 'maxvcpus') + if hasattr(vals, 'vcpus'): + vcpus = getattr(vals, 'vcpus') + + if maxvcpus and not vcpus: + config.append(['vcpus', maxvcpus]) + if maxvcpus and vcpus: + config.append(['vcpu_avail', (1 << vcpus) - 1]) + + # For case we don't have maxvcpus set but we have vcpus we preserve + # old behaviour + if not maxvcpus and vcpus: + config.append(['vcpus', vcpus]) + def add_conf(n): if hasattr(vals, n): v = getattr(vals, n) @@ -1037,10 +1055,11 @@ def make_config(vals): map(add_conf, ['name', 'memory', 'maxmem', 'shadow_memory', 'restart', 'on_poweroff', 'tsc_mode', 'nomigrate', - 'on_reboot', 'on_crash', 'vcpus', 'vcpu_avail', 'features', - 'on_xend_start', 'on_xend_stop', 'target', 'cpuid', - 'cpuid_check', 'machine_address_size', 'suppress_spurious_page_faults']) + 'on_reboot', 'on_crash', 'features', 'on_xend_start', + 'on_xend_stop', 'target', 'cpuid', 'cpuid_check', + 'machine_address_size', 'suppress_spurious_page_faults']) + vcpu_conf() if vals.uuid is not None: config.append(['uuid', vals.uuid]) if vals.cpu is not None: |