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.
ESX(i) 4.0
Ubuntu running kernel 2.6.14+ 64bit
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:
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"