I am running Ubuntu in a virtual machine and I'd like to add CPU and RAM without rebooting the device. How can I hotplug this new virtual hardware?

up vote 11 down vote accepted

These can be enabled through the use of the /sys filesystem using root credentials.

For the CPU, you change the 0 to a 1 in to the appropriate file of the pattern: /sys/devices/system/cpu/cpu*/online.

For the RAM, you find the state in the files /sys/devices/system/memory/memory*/state and change the contents from offline to online.

The script below will turn all CPU and RAM online for you.

#!/bin/bash
# Based on script by William Lam - http://engineering.ucsb.edu/~duonglt/vmware/

# Bring CPUs online
for CPU_DIR in /sys/devices/system/cpu/cpu[0-9]*
do
    CPU=${CPU_DIR##*/}
    echo "Found cpu: '${CPU_DIR}' ..."
    CPU_STATE_FILE="${CPU_DIR}/online"
    if [ -f "${CPU_STATE_FILE}" ]; then
        if grep -qx 1 "${CPU_STATE_FILE}"; then
            echo -e "\t${CPU} already online"
        else
            echo -e "\t${CPU} is new cpu, onlining cpu ..."
            echo 1 > "${CPU_STATE_FILE}"
        fi
    else 
        echo -e "\t${CPU} already configured prior to hot-add"
    fi
done

# Bring all new Memory online
for RAM in $(grep line /sys/devices/system/memory/*/state)
do
    echo "Found ram: ${RAM} ..."
    if [[ "${RAM}" == *":offline" ]]; then
        echo "Bringing online"
        echo $RAM | sed "s/:offline$//"|sed "s/^/echo online > /"|source /dev/stdin
    else
        echo "Already online"
    fi
done
  • Are you sure you actually have to do this? I would think that once plugged in, they would be automatically turned on; the ability to turn them off is so you can unplug them, or leave them off to save power. – psusi Apr 28 '16 at 23:22
  • Yes, that script was proven necessary, and working. – flickerfly Apr 28 '16 at 23:23
  • 1
    I was also expecting Hotplug to work out of the box, but seems like it doesn't ... this is what you need to do, didn't test the script, but manually took care of it, the logic should work. Super Thanx – GeekRide Jun 9 '17 at 5:53

Instead of operating the kernel parameters, you can automatically enable hotplugged CPU or memory by using udev rules:

/etc/udev/rules.d/94-hotplug-cpu-mem.rules

ACTION=="add", SUBSYSTEM=="cpu", ATTR{online}=="0", ATTR{online}="1"

ACTION=="add", SUBSYSTEM=="memory", ATTR{state}=="offline", ATTR{state}="online"

Tested on CentOS 6/7, Ubuntu 14.

Debian 7 crashed for unknown reason. Further testing would be required.

  • Please put some more information into your answer to help others with less experience and understanding. – George Udosen Jan 4 '17 at 8:36

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.