Execution flow of vCPU

Finally, we are into the vCPU execution flow which helps us to put everything together and understand what happens under the hood.

I hope you didn't forget that the QEMU creates a posix thread for a vCPU of the guest and ioctl(), which is responsible for running a CPU and has the KVM_RUN arg (#define KVM_RUN_IO(KVMIO, 0x80)). vCPU thread executes ioctl(.., KVM_RUN, ...) to run the guest code. As these are posix threads, the Linux kernel can schedule these threads as with any other process/thread in the system.

Let us see how it all works:

Qemu-kvm User Space: kvm_init_vcpu () kvm_arch_init_vcpu() qemu_init_vcpu() qemu_kvm_start_vcpu() qemu_kvm_cpu_thread_fn() while (1) { if (cpu_can_run(cpu)) { r = kvm_cpu_exec(cpu); } } kvm_cpu_exec ...

Get Mastering KVM Virtualization now with the O’Reilly learning platform.

O’Reilly members experience live online training, plus books, videos, and digital content from nearly 200 publishers.