虚拟化技术简述

虚拟化简介

  • 前言
  • 一、虚拟化简介
  • 二、软件虚拟化和硬件虚拟化
    • 2.1 软件虚拟化技术
    • 2.2 硬件虚拟化
    • 2.3 QEMU
  • 三、全虚拟化和半虚拟化
    • 3.1 全虚拟化
    • 3.2 半虚拟化
    • 3.3 敏感指令
    • 3.4 小结
  • 四、Type1和Type2虚拟化
    • 4.1 Type 1
    • 4.2 Type 2
  • 总结
  • 参考资料

前言

这周开始研究 Intel 的虚拟化技术了,写写这周学的一些知识吧,算是入门的吧,因为我也是刚学习虚拟化技术,可能描述的不太准备,但是文章还是要写的。

关于虚拟化我们早就接触到了,大家在学习linux时候的开始阶段,通常都会再window平台下安装vmware workstation(或virtualbox),然后在这两个桌面虚拟化软件上面安装linux内核镜像,运行一个完整的Linux内核,这样我们就可以在windows系统上面使用linux系统了,进行学习了。如果没有虚拟化,那我们只能在我们的电脑上安装双系统,每次在开机启动时选择是windows系统还是linux 系统,这非常不方便。
比如大家在vmware workstation上安装linux时,得配置linux的一些硬件资源,这些硬件资源由我们用户自定义,并且还可以随时更改,非常方便,如下图:

Virtual Machine Monitor(VMM,虚拟机监控器,也称为Hypervisor)层,充当主机,完全控制处理器和其他平台硬件,并为客户软件提供虚拟处理器的抽象,并允许它直接在逻辑处理器上执行,VMM能够保留对处理器资源、物理内存、中断管理和I/O的选择性控制。简单点说就是为了达到虚拟化而引入的一个软件层。它向下管理实际的物理资源,向上给虚拟机提供逻辑资源。

二、软件虚拟化和硬件虚拟化

2.1 软件虚拟化技术

软件虚拟化:就是通过软件模拟来实现VMM层,通过纯软件的环境来模拟执行客户机里的指令。
比如QEMU:在没有启用硬件虚拟化辅助的时候,它通过软件的二进制翻译仿真出目标平台呈现给客户机,客户机的每一条目标平台指令都会被QEMU截取,并翻译成宿主机平台的指令,然后交给实际的物理平台执行。
客户机完全不知道自己运行在虚拟化环境中,还以为自己运行在原生环境里。

缺点:每一条目标指令都会被QEMU截取,翻译成宿主机平台的指令,然后交给实际的物理平台执行,其虚拟化性能是比较差的,同时其软件复杂度也大大增加。

优点:可以呈现各种平台给客户机,只要其二进制翻译支持。每个虚拟器都可以仿真一个不同架构的处理器,比如在Intel x86的处理器架构上虚拟化的处理器架构可以是ARM架构的的(即:物理CPU是x86的,而guest是基于ARM的)。

以虚拟化CPU来说:CPU是计算机系统最核心的模块,我们的程序执行到最后都是翻译为机器语言在CPU上执行的。在没有CPU硬件虚拟化技术之前,通常使用指令的二进制翻译(binary translation)来实现虚拟客户机中CPU指令的执行,很早期的VMware就使用这样的方案,其指令执行的翻译比较复杂,效率比较低。所以Intel最早发布的虚拟化技术就是CPU虚拟化方面的。

2.2 硬件虚拟化

硬件虚拟化技术就是指计算机硬件本身提供能力让客户机指令独立执行,不完全需要VMM截获重定向(大部分指令集就可以在自己的逻辑处理器上执行,即在自己的VM上进行处理大部分的指令集,只有少部分特权指令才需要被VMM截获并做相应处理,VMM需要监控这些特权指令)。

这里简单的介绍下Intel的VMX技术:
VMX(virtual-machine extensions):从硬件层面上来为多个软件运行环境提供处理器硬件虚拟化支持:即Intel 的VT-x技术( AMD 相应的虚拟技术称为: AMD-V )。
VT:Virtualization Technology。

VMX主要支持两种类型的软件:
(1)Virtual-machine monitors (VMM):虚拟机监控器。
(2)Guest software(VM):虚拟机。

VMX提供了有两种类型的处理器的操作(VMX operation):
(1)VMX root operation: VMM运行在root mode。
(2)VMX non-root operation:VM运行在 non-root mode。

注意:
CPU厂商没有支持硬件虚拟化前:Guest OS的特权指令无法直接下达到计算机系统硬件执行,需要经过VMM的捕获和模拟执行(部分难以虚拟化的指令需要通过二进制翻译技术进行转换),由于所有的特权指令都会导致 trap,所以在虚拟环境下特权指令的执行开销要远远高于在 原生环境下。
即:guest os特权指令->捕获异常->翻译->模拟
Guest OS 一条简单的特权指令要通过复杂的异常处理过程,性能开销很大。

CPU厂商开始支持硬件虚拟化后::即Intel 的VT-x技术( AMD : AMD-V ),引入了VMX root operation和VMX non-root operation,这样host os 和 guest 都有了ring 0和ring 3,硬件这层做了些区分,这样全虚拟化下,有些guest os的特权指令的“捕获异常-翻译-模拟”实现就不需要了,性能得到很大的提升。

KVM、VMware一直都是全虚拟化技术(目前都是基于硬件辅助的全虚拟化技术)。

3.2 半虚拟化

半虚拟化(Para-Virtualization):客户机意识到自己是运行在虚拟化环境里,并做相应修改以配合VMM。
一方面,可以提升性能和简化VMM软件复杂度;另一方面,也不需要太依赖硬件虚拟化的支持,从而使得其软件设计(至少是VMM这一侧)可以跨平台且是优雅的。
本质上,半虚拟化弱化了对虚拟机特殊指令的被动截获要求,将其转化成客户机操作系统的主动通知。但是,半虚拟化需要修改客户机操作系统的源代码来实现主动通知。

3.4 小结

目前主流的CPU厂商都支持了硬件虚拟化技术,硬件辅助的全虚拟化技术的性能逐渐逼近半虚拟化,甚至超过了半虚拟化,同时全虚拟化不需要修改客户操作系统,目前越来越受欢迎。

以virtio为代表的半虚拟化技术也一直在演进发展,性能上只是略逊于全虚拟化,加之其较少的平台依赖性,依然受到广泛的欢迎。

四、Type1和Type2虚拟化

从软件框架的角度上,根据虚拟化层(VMM)是直接位于硬件之上还是在一个宿主操作系统之上,将虚拟化划分为Type1和Type2。

4.1 Type 1

Type1 Hypervisor也叫 bare-metal Hypervisor。这类虚拟化层直接运行在硬件之上,没有所谓的宿主机操作系统。它们直接控制硬件资源以及客户机。如下图所示:

(2)Linux系统里,如KVM。
KVM在上面已经介绍过一次了,现在梅开二度:
KVM全称是Kernel-based Virtual Machine,即基于内核的虚拟机,是采用硬件虚拟化技术的全虚拟化解决方案。由于KVM是在硬件虚拟化支持下的完全虚拟化技术,所以它能支持在相应硬件上能运行的几乎所有的操作系统,如:Linux、Windows、FreeBSD、MacOS等。
这里以QEMU+Linux举例,如下图所示:
PS:由于我也是这周才开始看虚拟化,描述的可能不太准确,请见谅。

虚拟化技术简述

CPU和内存:
Qemu 将 KVM 整合进来,将有关 CPU 指令的部分交由内核模块来做,就是 qemu-kvm。
Guest QMEU + host Linux kernel KVM内核模块用来实现CPU的虚拟化、内存的虚拟化。
KVM 内核模块通过 /dev/kvm 暴露接口,Guest QMEU 可以通过 ioctl 来访问这个接口。来提升CPU性能。
只有对性能要求很高的虚拟设备才需要由KVM内核模块来负责。

络和硬盘:
如果采用全虚拟化的方式会影响这些设备的性能。
QMEU 采取半虚拟化的方式,让 Guest OS 加载驱动VirtIO。然后数据会直接发送给半虚拟化设备,经过处理,最终发送给真正的物理硬件。
Guest QMEU中的半虚拟化的驱动程序允许虚拟机使用优化的I/O接口而不使用模拟的设备,从而为 络和块设备提供高性能的I/O。

这部分内容后面还会详细介绍,这篇文章就到这里结束了。

总结

结束了,画图画的好辛苦…

参考资料

Intel官方手册 vol3
KVM实战:原理、进阶与性能调优
深度探索Linux系统虚拟化
极客时间:趣谈操作系统
https://www.cnblogs.com/LoyenWang/p/13510925.html
https://www.vmware.com/cn/products/esxi-and-esx.html
https://zhuanlan.zhihu.com/p/69629212
https://blog.csdn.net/u011389746/article/details/79948514
https://blog.csdn.net/tony_vip/article/details/105890376

文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux24962 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐