How to Hot Add/Remove VCPUs from a Xen Domain
Tags: gnu, howto, linux, RHEL, sysadmin, Xen
Overview
Xen supports vcpu hot add and remove, which allows you to add and remove CPUs from a running system without downtime.
How it works
Inside your domU config, you’ll need to set the “maxvcpus” setting to the maximum number of VCPUs that this domU will be allowed to have. If you don’t define this, it defaults to the value of “vcpus”, so you’ll always be able to hot remove, but wouldn’t be able to hot-add anything more than what it was booted with.
#vcpus - number of VCPUs to boot the system with. vcpus = 2; #maxvcpus - maximum number of VCPUs (total) that can be hot added later. maxvcpus = 8; |
VCPU Hot Add Example
Lets say I have a virtual machine named foo which I’ve given 1 VCPU. One day I notice that the system is struggling to keep up with a CPU heavy load. So, I want to add another VCPU to the VM, but I can’t afford a downtime. No problem (as long as I configured the maxvcpus value above).
Here’s the system with one 1 VCPU:
# xm list Name ID Mem(MiB) VCPUs State Time(s) foo 11 4096 1 -b---- 23.7 |
To resize we use the ‘xm vcpu-set’ command. For example, to re-size our 1 VCPU domain to 2 VCPUs, execute the following.
# xm vcpu-set foo 2 # xm list Name ID Mem(MiB) VCPUs State Time(s) foo 11 4096 2 -b---- 31.6 |
VCPU Hot Remove Example
Similarly, we can hot remove VCPUs from a domain using the ‘xm vcpu-set’ command.
Here’s the system with one 2 VCPUs:
# xm list Name ID Mem(MiB) VCPUs State Time(s) foo 11 4096 2 -b---- 52.5 |
To hot remove VPCUs simply execute ‘xm vcpu-set’, specifying a lower number than what is currently assigned.
# xm vcpu-set foo 1 # xm list Name ID Mem(MiB) VCPUs State Time(s) comlag 11 4096 1 -b---- 56.7 |
And that’s it. As you can see it’s very straightforward, and as long as you’ve taken the time to set your ‘maxvcpus’ setting in the domU config before booting the machine you’ll be able to adjust your VCPU assignments as load varies.
March 14th, 2013 at 12:37 pm
For some hours I’ve been trying to get he cpus back in the VM with no success. I could hot remove the CPUs, but not add them back to the system. The problem was due to missing udevadm rules for hot plugging cpus. It’s described in detail here: http://wiki.xen.org/wiki/Paravirt_Linux_CPU_Hotplug
[Reply]
Garry Reply:
April 9th, 2015 at 2:34 am
Hi,
Can i remove cpus in the middle order, for example cpu3 and cpu4 out of 8 cpus.
[Reply]