Под капотом · Виртуализация · Работа и остановка
Пауза и продолжение
Пользователь ставит ВМ на паузу и снимает её. Для этого нужны две команды:
Команда
virsh suspend vm1 virsh resume vm1
После выполнения команд процессоры гостя замирают, а память остаётся занятой:
- Команда suspend снимает vCPU с квантов, гость перестаёт исполняться;
- Команда resume возвращает их к работе с той же инструкции;
- Память при этом не освобождается.
-
пользователь 1. Пользователь вводит команду паузы
virDomainSuspend(dom)
Нужно «заморозить на минуту», не теряя состояние и не трогая диск.
-
libvirt 2. Демон отправляет stop
{"execute":"stop"}Ответ - пустой return: остановка синхронная, ждать нечего.
-
KVM 3. Потоки vCPU выходят из KVM_RUN
vCPU не получают квантов RAM остаётся выделенной
Процесс жив, память занята - это главное отличие от сохранения состояния.
-
пользователь 4. Пользователь видит «paused»
virsh domstate vm1 → paused
Гость не знает о паузе: для него просто остановилось время.
-
libvirt 5. Пользователь продолжает работу
virDomainResume(dom) QMP: {"execute":"cont"}Гость продолжает с той же инструкции, без перезагрузки.