Под капотом · Виртуализация · Работа и остановка

Пауза и продолжение

Пользователь ставит ВМ на паузу и снимает её. Для этого нужны две команды:

Команда
virsh suspend vm1
virsh resume vm1
libvirt API virDomainSuspend / virDomainResume QMP stop / cont

После выполнения команд процессоры гостя замирают, а память остаётся занятой:

  • Команда 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"}

    Гость продолжает с той же инструкции, без перезагрузки.