August 2016
Intermediate to advanced
468 pages
9h 53m
English
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 ...Read now
Unlock full access