计算机虚拟化
什么是虚拟化?
-
物理资源(CPU、硬盘)通过中间的软件层转化成虚拟资源(Vcpu、虚拟内存、虚拟硬盘)虚拟化资源会给虚拟机使用,虚拟化的优势
- 提高资源利用率
- 虚拟机可移植性强(实现对虚拟机的迁移也就是去迁移磁盘文件和配置文件)
-
虚拟级的底层形式文件(主要:磁盘文件、配置文件)
- 磁盘文件 虚拟机啊的磁盘在底层的存放形式,不同的虚拟化的格式
- 配置文件 虚拟机的配置信息(网卡信息、cpu信息、系统的信息)
计算虚拟化发展史
物理服务器的架构和虚拟机的架构
虚拟化的分类
- 1型虚拟化(裸金属型):是在应将之上直接虚拟化层在虚拟化层之上运行虚拟机(vmm(虚拟化层)高于硬件之上),比如Fusioncompute(华为),通常用于服务器上
- 2型虚拟化(宿主型虚拟化): 虚拟化层是在操作系统之上(软件实现)比如:VMware Workstation virtbox(甲骨文)软件,通常用于个人PC上
计算虚拟化
CPU虚拟化
- CPU虚拟化 内存虚拟化 I/O设备的虚拟化
- CPU虚拟化:硬件–>VMM(虚拟机监视程序)–>Guest os(虚拟机操作系统)–>app
- 当Guest OS执行到特殊指令的时候,系统会切换到VMM,让VMM来处理特殊指令
- 经典虚拟化:基于Power pc cpu架构
- Power pc cpu架构和传统的X86架构不同的是指令集的不同,有部分指令无法被虚拟化层拦截(X86架构的16条指令),没有通过虚拟化层的转译,硬件无法识别指令从而会引发一些错误,因此CPU虚拟化分为:全虚、半虚、硬虚
- CPU虚拟化:硬件–>VMM(虚拟机监视程序)–>Guest os(虚拟机操作系统)–>app
- CPU虚拟化分为全需、半虚、硬虚
- 全需:将所有指令都收集到虚拟化层进行处理
- 优势:不需要修改Guest os
- 劣势:虚拟化层开销大,从而导致CPU虚拟化的效率不高
- 半虚:设计理念是将16条指令,由VMM(虚拟化层)移向Guest OS(虚拟机操作系统)自身
通过主动的方式由Guest OS去处理这些指令,而不是被移交给VMM做处理。在这种设计理念下,就需要修改Guest OS内核。
使其在虚拟化进程中捕捉到特殊指令,并直接通过Guest os内核对CPU进行操作,因为中间少了VMM的虚拟化封装解码等等操作,所以对CPU性能的损耗会非常低从而使虚拟机效率高- 优点:虚拟化层的开销小
- 劣势:需要修改虚拟机操作系统
- 因为一般Guet os虚拟机操作系统,是不会直接交给虚拟化层,需要修改Guest os内核(目前支持x86、mips、arm这些内核版本)
- 硬虚(硬件辅助虚拟化):Guest OS执行到特殊指令可以直接下达到计算机系统硬件去处理,而不需要通过VMM去处理
- 优点:虚拟化效率最高
- 缺点:需要CPU支持硬件辅助虚拟化
- 如:Intel基于x86架构的硬件辅助虚拟化技术Intel VT(Intel Virtualization Technology)和Amd的and-v。
- 全需:将所有指令都收集到虚拟化层进行处理
内存虚拟化
- KVM(基于内核的虚拟机)是一种内建于Linux中的开源虚拟化技术,可将Linux转变为虚拟机监控程序,使主机计算机能够运行多个隔离的虚拟环境,即虚拟pc机或虚拟机(VM)。
- 由标准的Linux程序进行调度,并且使用专门的虚拟硬件,如网卡、图形适配器、CPU、内存和磁盘等。
- 要实现内存虚拟化,让客户机使用一个隔离的、从零开始且具有连续的内存空间,KVM引入一层新的地址空间,即虚拟pc机物理地址空间(GPA)。
- 这个地址空间并不是真正的物理地址空间,它只是宿主机虚拟地址空间在虚拟PC机地址空间的一个映射。
对虚拟PC机来说,PC机物理地址空间都是从零开始的连续的地址空间,但分布在宿主机上的物理内存来说这并不是连续的
I/o虚拟化
- I/O设备是可对数据进行输入输出的如:磁盘、网卡
- I/o虚拟化分为全虚、半虚、I/o透传
- Qemu I/o虚拟化 是个软件
后续 会继续完善!