设为首页 收藏本站
查看: 1117|回复: 0

[经验分享] KVM基本原理及架构三-CPU虚拟化

[复制链接]

尚未签到

发表于 2015-12-24 14:58:40 | 显示全部楼层 |阅读模式
3 CPU虚拟化 3.1 基本原理
CPU虚拟化是VMM中最核心的部分,由于内存和IO访问的指令都是敏感指令,所以内存和IO虚拟化都依赖于CPU虚拟化的实现。CPU虚拟化的目标是让虚拟机中执行的所有敏感指令都能产生异常而“陷入”,并由VMM进行模拟。VMM的陷入是通过CPU的保护机制、中断或异常来完成的。通常,VMM的陷入方式有如下3种:
1、  CPU的保护机制触发。CPU在执行敏感指令之前,会检查执行条件是否满足,执行条件主要包括:当前特权级别、运行模式、内存映射关系等,只要有任一条件不满足,就会VM-Exit陷入到VMM进行进一步处理。
2、  异步中断。包括处理器内部的中断源和外设的中断源,当中断信号到达CPU时,CPU会强行中断Guest OS当前执行的指令,然后VM-ExitVMM注册的中断服务程序进行进一步处理。
3、  虚拟机主动触发的异常,也就是通常所说的陷阱。虚拟机可以通过陷阱指令主动VM-ExitVMM中。
KVM虚拟化解决方案中,利用了硬件的虚拟化特性(比如Intel VT-xAMD SVM)实现CPU的虚拟化。如之前介绍,VT-x提供了一套称作VMX的新的工作模式,工作在该模式下的处理器又具有两类操作模式:VMX root operationVMX non-root operation。对操作系统来说,VMX non-root operation模式与传统的x86处理器兼容,最大的差别在于当虚拟机执行一些访问全局资源的指令时将导致虚拟机退出操作(VM-Exit),从而使虚拟机监控器获得控制权,以便对访问全局资源的指令进行模拟。以后,虚拟机监控器可以通过虚拟机进入操作(VM-Entry)使虚拟机重新获得控制权。
其次,VT-x为系统编程接口状态的切换提供硬件支持。VT-x为每个虚拟机维护至少一个VMCSVirtual Machine Control Structure)结构,其中保存了虚拟机和虚拟机监控器的系统编程接口状态。当执行VM exitVM entry操作时,VT-x自动根据VMCS中的内容完成虚拟机和虚拟机监控器间的系统编程接口状态切换。另外,VT-x还提供了一组指令,使得虚拟机监控器通过一条指令就可以完成虚拟机间的切换。
3.2 VCPU
硬件虚拟化使用VCPU(Virtual CPU)描述符来描述虚拟CPUVCPU描述符与OS中进程描述符类似,本质是一个结构体,其中包含如下信息:
ü  VCPU标识信息,如VCPUID号,VCPU属于哪个Guest等。
ü  虚拟寄存器信息,在VT-x的环境中,这些信息包含在VMCS中。
ü  VCPU状态信息,标识白VCPU当前所处的状态(睡眠、运行等),主要供调度器使用。
ü  额外的寄存器/部件信息,主要指未包含在VMCS中的寄存器或CPU部件,比如:浮点寄存器和虚拟的LAPIC等。
ü  其他信息:用户VMM进行优化或存储额外信息的字段,如:存放该VCPU私有数据的指针。
总体来说,VCPU可以划分为两部分:
1、  VMCS为主,由硬件来使用和更新的部分,主要是虚拟寄存器。
2、  VMCS之外,由VMM来使用和更新的部分。如VCPU标识、状态信息等。
VMM创建虚拟机时,首先要为虚拟机创建VCPU,整个虚拟机的运行实际上可以看做VMM调度不同的VCPU运行。
3.3 中断虚拟化
在物理平台上,中断架构和外部中断处理流程如下图所示:

大致处理过程为:
ü  IO设备通过中断控制器(IO APICPIC)CPU发送中断请求
ü  IO APIC将中断转发至目标CPULocal APIC
ü  目标APIC对该中断进行处理
在虚拟化环境中,VMMGuest OS虚拟了一个与物理中断架构类似的虚拟中断架构,如下图所示:
                                     http://blog.iyunv.com/attachment/201404/10/14528823_1397104622500q.bmp


每个VCPU对应一个虚拟Local APIC,用于接收中断,同时还模拟了虚拟IO APIC(或虚拟PIC)用于接收外设(虚拟设备)发出的中断请求并进行转发。虚拟Local APIC、虚拟IO APIC、虚拟PIC等都是VMM中的软件实体(对应于相应的数据结构)。主要处理流程如下:
ü  当虚拟设备需要发送中断时,虚拟设备会调用虚拟IO APIC的接口发送中断;
ü  而虚拟IO APIC根据中断请求,选出适合的虚拟Local APIC,并调用其接口发送中断请求;
ü  虚拟Local APIC进一步利用CPU硬件虚拟化功能(Intel VT-xAMD SVM)的事件注入机制,将中断注入到相应的VCPU
ü  当相应VCPU得到调度时,即处理相应的中断。
3.4 调度
KVM虚拟化环境中,KVM虚拟机作为一个系统进程运行,因此虚拟机的的调度,实际上就是利用了Linux自身的调度器完成。本文不做详述。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-155812-1-1.html 上篇帖子: kvm和qemu的关系 下篇帖子: irq/nmi window (代码版本:kvm-kmod-3.10.1)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表