kvm虚拟机的vcpu实现,虚机在宿主机角度看就是一个应用进程,而虚机的vcpu就是该进程中的线程,qemu代码里面用for循环来根据用户创建虚机时配置的vcpu数来调用kvm设置vmcs数据结构中的状态值,kvm模块加载时会创建/dev/kvm设备文件,qemu通过ioctl操作这个文件句柄来和kvm通信,用于维护vcpu的寄存器值,当数据结构设置好时会创建线程,等待宿主机cpu的调度执行,其中关键点在于虚机进程的运行模式,分为根模式和非根模式,当处理特权指令时需要由非根模式切换到根模式,这个切换需要上下文的保存和加载,如果有大量的切换就会影响虚机的cpu性能,尤其是windows,在win8之前的虚机性能在kvm下相比于Linux较差,主要原因就是没有适配kvm虚拟化环境,存在大量的VMexit这种切换。