首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

qemu-kvm中vcpu虚拟化到底是咋整的?

一句话总结 实例化一个vcpu就是在hostOS中创建了一个线程,线程里有个while循环,循环里不停的调用kvm_cpu_exec方法,kvm_cpu_exec方法调用通过kvm_vcpu_ioctl...背景 vcpu初始化的时候(qemu_init_vcpu)是启动了一个线程,也就是说vcpu其实就是一个线程.线程运行方法是qemu_kvm_cpu_thread_fn ?...kvm_init_vcpu调用KVM_CREATE_VCPU创建了vcpu返回vm_fdvcpu的运行是在kvm_cpu_exec里面的,这里调用如下命令进入kvm run_ret = kvm_vcpu_ioctl...>vcpu_run(kvm/x86.c)-->vcpu_enter_guest(kvm/x86.c)在qemu中kvm_vcpu_ioctl(cpu, KVM_RUN, 0)调用kvm后代码层层调用最终核心实现的方法是...4.kvm_x86_ops->run(vcpu)-->vmx_vcpu_run(vmx.c)更新vmcs中的GUEST_RSP和 GUEST_RIP刷新vmcs中的HOST_CR4字段(其他寄存器在 kvm_arch_vcpu_ioctl_set_regs

4.5K101

【原创】Linux虚拟化KVM-Qemu分析(七)之timer虚拟化

指定对应的偏移,这种方式使得虚拟时间只会覆盖vCPU实际运行的那部分时间; 示例如下: 1771657-20201205235232851-53486309.png 6ms的时间段里,每个vCPU运行...相关的初始化,在创建vcpu时进行初始化设置: 1771657-20201205235255363-2105252369.png 针对vcpu的timer相关初始化比较简单,回到上边那张数据结构图看一眼就明白了...,所有的初始化工作都围绕着struct arch_timer_cpu结构体; vcpu_timer:用于获取vcpu包含的struct arch_timer_cpu结构; vcpu_vtimer/vcpu_ptimer...让vcpu睡眠时,需要先启动bg_timer,bg_timer到期时再将vcpu唤醒; kvm_hrtimer_expire:vtimer和ptimer的到期执行函数,最终通过调用kvm_timer_update_irq...vcpu后,可以通过vcpu的文件描述符来进行寄存器的读写操作; 以ARM为例,ioctl通过KVM_SET_ONE_REG/KVM_GET_ONE_REG将最终触发寄存器的读写; 如果操作的是timer

1.5K20
领券