Files

26 lines
2.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.