**Поддержка StratoVirt для горячего подключения и отключения CPU к работающей виртуальной машине** StratoVirt поддерживает горячее подключение и отключение CPU к работающей ВМ. Эта функция позволяет динамически регулировать ресурсы CPU виртуальной машины. В настоящее время поддерживается только стандартная виртуальная машина с архитектурой x86_64, архитектура NUMA не поддерживается. **Создание виртуальной машины** Сначала создаём виртуальную машину StratoVirt: ```shell $ ./stratovirt \ -machine q35 \ -smp [cpus=]<n>,maxcpus=<max_cpus> \ -m 512 \ -kernel path/to/kernel \ -append "console=ttyS0 root=/dev/vda reboot=k panic=1" \ -drive file=path/to/OVMF_CODE.fd,if=pflash,unit=0,readonly=true \ -device pcie-root-port,port=0x0,addr=0x1.0x0,bus=pcie.0,id=pcie.1 \ -drive file=path/to/rootfs,id=rootfs,readonly=true \ -device virtio-blk-pci,drive=rootfs,bus=pcie.1,addr=0x0.0x0,id=blk-0 \ -qmp unix:path/to/api/socket,server,nowait \ -serial stdio ``` * *cpus*: Устанавливает количество процессоров равным n (по умолчанию 1). Все процессоры будут доступны после загрузки виртуальной машины, и их нельзя отключить. * *maxcpus*: Задаёт общее количество процессоров, включая онлайн и офлайн процессоры. Количество офлайн процессоров также является количеством процессоров, поддерживающих горячее подключение. Значение *maxcpus* должно быть не меньше *cpus*. **Горячее подключение процессора** После загрузки виртуальной машины подключите процессор с помощью QMP: ```shell $ ncat -U path/to/api/socket {"QMP":{"version":{"qemu":{"micro":1,"minor":0,"major":5},"package":"StratoVirt-2.4.0"},"capabilities":[]}} -> {"execute": "device_add","arguments": { "id": "device-id", "driver": "generic-x86-cpu", "cpu-id": cpuid }} <- {"return":{}} <- {"event":"CPU_RESIZE","data":{},"timestamp":{"seconds":seconds, "microseconds":microseconds}} ``` * *id*: Идентификатор устройства процессора, который должен быть уникальной строкой. * *cpu-id*: Номер процессора, который может быть целым числом в диапазоне от *cpus* до *maxcpus*. **Горячее отключение процессора** Отключите процессор с помощью QMP: ```shell $ ncat -U path/to/api/socket {"QMP":{"version":{"qemu":{"micro":1,"minor":0,"major":5},"package":"StratoVirt-2.4.0"},"capabilities":[]}} -> {"execute": "device_del", "arguments": { "id": "device-id"}} <- {"return":{}} <- {"event":"CPU_RESIZE","data":{},"timestamp":{"seconds":seconds, "microseconds":microseconds}} ``` **Ограничения** Поддержка горячего подключения и отключения процессоров ограничена типом машины: * *q35* (на платформе x86_64). Некоторые устройства и функции пока не поддерживают горячее подключение процессоров: * архитектура *numa*.