CPU虚拟化简单来说就是通过虚拟化技术把一个物理的cpu分割成多个虚拟的cpu,用以分配给虚拟桌面来使用,这种虚拟化技术可以是虚拟cpu看起来完全像一个独立的物理cpu一样,早先的X86桌面型cpu并不支持虚拟化,后来由于虚拟化的市场应用不断扩张,intel和AMD都分别在自家的x86架构上进行了调整,比如intel就加入了INTEL-VT技术,让X86的cpu可以很好支持虚拟化应用。
想要了解CPU的虚拟化,先要知道CPU在执行指令过程中的对于指令的分类,CPU指令的运行级别可以分成ring0--ring3,ring0是最高级,拥有最高权限,一般来说是用于执行操作系统的内核代码,用来控制中断,修改页表,访问设备等,ring1和ring2用于设备的驱动调用,而我们常用的应用程序则运行在ring3这一层。在实际运行中,CPU的运行级别会根据需要不断的在ring0和ring3中来回切换。
由于这种ring0到ring3的切换给虚拟化带来的挑战,host(宿主)操作系统是工作在ring0上,而guest(用户)的操作系统是虚拟出来的镜像,是不能运行在ring0上的,但是对于guest的操作系统确并不知道自己运行在ring0上,如果guest操作系统还是和平常一样运行,就会出错,因为权限不够,这时就需要一套复杂的错误处理机制进行处理,这对性能是严重的损耗。
半虚拟化就是用来解决这种对性能有这严重损耗的情况,比如Xen的半虚拟化技术,为guest操作系统专门定制一个内核,这个定制就是告诉guest操作系统自己是运行在ring3上的,这样一来就不会有一些列的异常捕获,错误处理,翻译,模拟等过程。不过正是由于Xen需要对操作系统内核进行修改,所以只能支持linux,而不能支持windows,因为不能修改windows的代码。
随着CPU厂商对虚拟化的支持,intel加入了INTEL-VT技术,AMD加入了AMD-V技术,随着这些新技术的加入,完全解决了ring0--ring3的运行界别限制,采用root operation和non-root operation两种运行模式来取代,这样一来,全虚拟化的性能就大幅提升,再加上全虚拟化不需要修改操作系统内核,Xen这种半虚拟化就逐渐被KVM所取代了。
KVM是一种全虚拟化技术,在RedHat Linux 6.0版本之后开始成为主流。
CPU的虚拟化有多种形式,在KVM虚拟化中,一般我们把CPU虚拟化分成:完全虚拟化,半虚拟化和硬件辅助虚拟化。看下表:
全虚拟化 | 硬件辅助虚拟化 | 半虚拟化 | |
实现技术 | BT和直接执行 | 遇到特权指令转到root模式执行 | Hypercall |
客户操作系统修改/兼容性 | 无需修改客户操作系统,最佳兼容性 | 无需修改客户操作系统,最佳兼容性 | 客户操作系统需要修改来支持hypercall,因此它不能运行在物理硬件本身或其他的hypervisor上,兼容性差,不支持Windows |
性能 | INTEL-VT和AMD-V加持下,性能已经逼近半虚拟化 | 全虚拟化下,CPU需要在两种模式之间切换,带来性能开销;但是,其性能在逐渐逼近半虚拟化。 | 好。半虚拟化下CPU性能开销几乎为0,虚机的性能接近于物理机。 |
作者:禹龙云 上传时间:2021-06-15 16:41:55
上一篇:<< 云桌面系统详解之三:KVM虚拟化的前世今生 | 下一篇:云桌面GPU虚拟化视频处理实况测试 >>