Hot add cpu to supported Linux guestOSes using vSphere ESX(i) 4.0

Hot add cpu to supported Linux guestOSes using vSphere ESX(i) 4.0

Summary

This document will demonstrate how to hot add CPU to a live running Linux VM (Ubuntu 9.04 x86-64) using vSphere ESX(i) 4.0, this feature is only supported on certain guestOSes, check vSphere documentation for more information.

Resources

Requirements

ESX(i) 4.0

Ubuntu running kernel 2.6.14+ 64bit

Instructions

1. Hot add CPU requires a VM to be running hardware version 7, you'll need to first right click on the VM and upgrade to hardware 7 before powering on the VM if it's not already. You will also need to enable hot add cpu which is a new configuration item once you've upgraded to HW7 under OPTIONS->Memory/CPU Hotplug and just select 'enable'

2. Power on Linux VM

3. Let's verify the default cpu available within the VM (this can be done using /proc/cpuinfo,top,etc)

root@ubuntu-test:~# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 26
model name      : Intel(R) Xeon(R) CPU           E5504  @ 2.00GHz
stepping        : 5
cpu MHz         : 2000.072
cache size      : 4096 KB
fpu             : yes
fpu_exception   : yes
cpuid level     : 11
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc up arch_perfmon pebs bts rep_good xtopology tsc_reliable pni ssse3 cx16 sse4_1 sse4_2 hypervisor lahf_lm
bogomips        : 4000.14
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

Default installation of our Ubuntu Server is 1 vCPU, we'll increase this to 4 vCPU

4. You will now use the vSphere Client and edit the VM's cpu and change it from 1vCPU to 4vCPU

5. Download and copy online_hotplug_cpu.sh to the VM

root@ubuntu-test:~# chmod +x online_hotplug_cpu.sh

7. Execute the script which will find any new cpu cores allocated to VM and online the core

root@ubuntu-test:~# ./online_hotplug_cpu.sh
Found cpu: "/sys/devices/system/cpu/cpu0" ...
        cpu0 already configured prior to hot-add
Found cpu: "/sys/devices/system/cpu/cpu1" ...
        cpu1 is new cpu, onlining cpu ...
Found cpu: "/sys/devices/system/cpu/cpu2" ...
        cpu2 is new cpu, onlining cpu ...
Found cpu: "/sys/devices/system/cpu/cpu3" ...
        cpu3 is new cpu, onlining cpu ...

As you can see from the script output cpu[0] was already allocated and cpu[1-3] was the newly added cpu which needed to be brought online before the OS can use it.

8. Let's verify the new cpu that has been allocated while the VM was running

root@ubuntu-test:~# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 26
model name      : Intel(R) Xeon(R) CPU           E5504  @ 2.00GHz
stepping        : 5
cpu MHz         : 2000.072
cache size      : 4096 KB
fpu             : yes
fpu_exception   : yes
cpuid level     : 11
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology tsc_reliable pni ssse3 cx16 sse4_1 sse4_2 hypervisor lahf_lm
bogomips        : 4000.14
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 26
model name      : Intel(R) Xeon(R) CPU           E5504  @ 2.00GHz
stepping        : 5
cpu MHz         : 2000.072
cache size      : 4096 KB
fpu             : yes
fpu_exception   : yes
cpuid level     : 11
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology tsc_reliable pni ssse3 cx16 sse4_1 sse4_2 hypervisor lahf_lm
bogomips        : 3999.24
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor       : 2
vendor_id       : GenuineIntel
cpu family      : 6
model           : 26
model name      : Intel(R) Xeon(R) CPU           E5504  @ 2.00GHz
stepping        : 5
cpu MHz         : 2000.072
cache size      : 4096 KB
fpu             : yes
fpu_exception   : yes
cpuid level     : 11
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology tsc_reliable pni ssse3 cx16 sse4_1 sse4_2 hypervisor lahf_lm
bogomips        : 4004.59
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor       : 3
vendor_id       : GenuineIntel
cpu family      : 6
model           : 26
model name      : Intel(R) Xeon(R) CPU           E5504  @ 2.00GHz
stepping        : 5
cpu MHz         : 2000.072
cache size      : 4096 KB
fpu             : yes
fpu_exception   : yes
cpuid level     : 11
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology tsc_reliable pni ssse3 cx16 sse4_1 sse4_2 hypervisor lahf_lm
bogomips        : 4002.75
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

Attachments
Comments

Thanks for the resource link

I would suggest a little change in the online_hotplug_cpu.sh script: replace the grep -v idle by egrep -v "idle|freq"

Version history
Revision #:
1 of 1
Last update:
‎08-09-2009 01:21 PM
Updated by: