返回Henry2017的回答

Henry2017Henry2017研发工程师金融行业

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

金融其它 · 2017-10-23
浏览2891
  • vcpu的运行需要等待宿主机的调度,如果宿主机cpu负载较高,则vcpu执行的频率会下降,进而影响到虚机的cpu性能,这也是为什么提到虚机性能优化时首先想到的是绑核操作,对于核心业务的虚机,将物理机的单独的一个核留出来专门用于调度执行某个vcpu线程,这样会大大提升虚机计算能力和响应速度。
    2017-10-24

回答者

Henry2017
研发工程师金融行业
擅长领域: 云计算云管平台私有云

Henry2017 最近回答过的问题

回答状态

  • 发布时间:2017-10-23
  • 关注会员:2 人
  • 回答浏览:2891
  • X社区推广