仮想マシンで新しい CPU と RAM をホットプラグ対応にするにはどうすればよいですか?

仮想マシンで新しい CPU と RAM をホットプラグ対応にするにはどうすればよいですか?

仮想マシンで Ubuntu を実行していますが、デバイスを再起動せずに CPU と RAM を追加したいと考えています。この新しい仮想ハードウェアをホットプラグするにはどうすればよいでしょうか?

答え1

これらは、ルート資格情報を使用してファイルシステムを使用することで有効にできます/sys

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

スクリプトを作成して保存する代わりに、この 1 行のコマンドを実行できます (必要に応じてスクリプトにすることもできます)。私はメモリ用のコマンドを入力しました (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

関連情報