Files
document-haness/docs/virtualization/final/assets/diagrams/vm-exit-handling-cycle/vm-exit-handling-cycle.alt.md
T

2.1 KiB
Raw Blame History

VM Exit 은 KVM 에서 끝나기도 하고 QEMU userspace 까지 가기도 한다

Alternative text

Guest 에서 VM Exit 으로 KVM 에 닿은 뒤 커널 처리와 QEMU 처리 두 갈래로 갈라졌다가 VM Entry 로 다시 Guest 실행 재개에 모이는 흐름도.

Long description

왼쪽에서 오른쪽으로 읽는다. 왼쪽 끝에 Guest 가 있고 VM Exit 이 KVM 으로 제어권을 넘긴다. KVM 은 Exit Reason 을 확인해 두 갈래 중 하나를 고른다. 커널 안에서 처리할 수 있는 Exit 은 Kernel 쪽 KVM 커널 처리로 가고, userspace 처리가 필요한 Exit 만 KVM_RUN 이 반환되면서 Userspace 쪽 QEMU 로 간다. QEMU 는 필요한 장치 동작을 처리한 뒤 KVM_RUN 을 다시 호출한다. 두 갈래는 오른쪽 끝에서 다시 만나며 어느 쪽이든 VM Entry 를 지나 Guest 실행 재개로 돌아온다. 무엇이 Exit 을 부르는지와 Exit 이 잦을 때 무엇을 함께 보는지는 본문의 표와 문단이 맡는다.

Elements and evidence

  • Guest (service): VM Exit 이 나기 직전까지 실행 중이던 Guest. Evidence: L498L501.
  • KVM (service): VM Exit 을 받아 Exit Reason 을 확인하고 갈래를 고르는 자리. Evidence: L495L495, L502L504.
  • KVM 커널 처리 (service): 커널 안에서 끝낼 수 있는 Exit 을 처리하는 갈래. QEMU 까지 올라가지 않는다. Evidence: L508L510, L531L531.
  • QEMU (service): userspace 처리가 필요한 Exit 에서만 개입하는 갈래. Evidence: L510L516, L533L533.
  • Guest 실행 재개 (service): 두 갈래가 다시 만나는 자리. VM Exit 은 VM 종료가 아니라 여기로 돌아온다. Evidence: L521L524, L529L529.

Relationships

  • Guest → KVM: VM Exit. Evidence: L495L495, L498L502.
  • KVM → KVM 커널 처리: 커널 처리 가능. Evidence: L504L510, L531L531.
  • KVM 커널 처리 → Guest 실행 재개: VM Entry. Evidence: L518L524, L531L531.
  • KVM → QEMU: KVM_RUN return. Evidence: L508L512, L533L533.
  • QEMU → Guest 실행 재개: VM Entry. Evidence: L514L524, L533L533.