가상 머신에서 새 CPU 및 RAM을 핫플러그 방식으로 활성화하려면 어떻게 해야 합니까?

가상 머신에서 새 CPU 및 RAM을 핫플러그 방식으로 활성화하려면 어떻게 해야 합니까?

가상 머신에서 Ubuntu를 실행하고 있으며 장치를 재부팅하지 않고 CPU와 RAM을 추가하고 싶습니다. 이 새로운 가상 하드웨어를 어떻게 핫플러그할 수 있나요?

답변1

이는 루트 자격 증명을 사용하여 파일 시스템을 사용하여 활성화할 수 있습니다 /sys.

CPU의 경우 01패턴의 적절한 파일로 변경합니다: /sys/devices/system/cpu/cpu*/online.

RAM의 경우 파일에서 상태를 찾아 /sys/devices/system/memory/memory*/state내용을 오프라인에서 온라인으로 변경합니다.

아래 스크립트는 모든 CPU와 RAM을 온라인으로 전환합니다.

#!/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

답변2

커널 매개변수를 작동하는 대신 udev 규칙을 사용하여 핫플러그된 CPU 또는 메모리를 자동으로 활성화할 수 있습니다.

/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"

CentOS 6/7, Ubuntu 14에서 테스트되었습니다.

데비안 7이 알 수 없는 이유로 충돌했습니다.추가 테스트가 필요합니다.

답변3

스크립트를 생성하고 유지하는 대신 이 한 줄 명령을 실행할 수 있습니다(원하는 경우 스크립트일 수도 있음). 나는 방금 메모리용으로 하나를 입력했습니다(이것을 CPU로 쉽게 변경할 수도 있습니다):

grep line /sys/devices/system/memory/*/state |grep offline |awk -F '\/' '{print $6}' |while read xx; do echo online >/sys/devices/system/memory/$xx/state ; done

관련 정보