如何在虛擬機器中熱插拔啟用新的 CPU 和 RAM?

如何在虛擬機器中熱插拔啟用新的 CPU 和 RAM?

我在虛擬機器中運行 Ubuntu,我想在不重新啟動設備的情況下添加 CPU 和 RAM。如何熱插拔這個新的虛擬硬體?

答案1

這些可以透過使用/sysroot 憑證使用檔案系統來啟用。

對於 CPU,您將模式的對應檔案中的變更0為: 。1/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 上測試。

Debian 7 因未知原因崩潰。需要進一步測試。

答案3

您可以執行這一行命令,而不是建立和保留腳本(如果需要,它也可以是腳本)。我剛剛輸入了一個內存(也可以通過 Easyline 將其更改為 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

相關內容