云计算与虚拟化技术核心是什么?
我们知道云计算平台上面的云主机实际上都是虚拟机,但我们感觉不出来,用起来和一台真实的服务器没什么区别,这都要归功于虚拟化技术(virtualization)。可以说虚拟化技术是实现云计算基础架构层面(iaas)的核心技术。那么这种虚拟化技术究竟是怎么回事?
云计算所使用的虚拟化技术,其实并不是一项新技术。1998年成立的vmware(威睿)公司就是做虚拟机软件的,后来被数据存储技术公司emc(易安信)收购了,再后来emc又被dell收购了。
我们先不谈vmware公司的历史,重点说一下他们的虚拟机软件:vmwareworkstation。这个软件允许多个x86虚拟机同时被创建和运行。每个虚拟机实例可以运行其自己的客户机操作系统(guestos),如windows、linux、bsd等。说白了就是,vmwareworkstation允许一台真实的计算机同时运行好几个操作系统。
从底层操作系统来看,每个虚拟机都是一个用户进程;从虚拟机中的的guestos来看,自己拥有整个计算机。
一、虚拟机的类型
虚拟机软件解决了一个关键的技术问题:就是如何让guestos认为自己正运行在一个真实的计算机上。
服务器虚拟化有两种常见的类型
1、寄居架构(hostedarchitecture)
作为应用安装在os之上
基于现有操作系统
兼容性好
性能较差
功能单一
2、裸金属架构(baremetalarchitecture)
直接安装在硬件之上,本身就是os
基于裸机(baremetal)
硬件兼容性要求高
性能好
有许多高级功能。
二、多个操作系统虚拟机如何管理?
在没有vmm的时候,系统中有两种内存地址:虚拟地址(virtualaddress)和物理地址(physicaladdress)。从虚拟地址到物理地址的转换有两种方式。方式一:在tlb(translatelooksidebuffer,硬件实现)查找。方式二:在页表(pagetable)中查找,找到之后把结果放到tlb中去。系统会先尝试方式一,要是找不到(tlbmiss),就用方式二。
在有了vmm之后,系统中有三种内存地址:虚拟地址(virtualaddress),物理地址(physicaladdress)和机器地址(machineaddress)。机器地址才是真正与内存条上的地址一一对应的。物理地址只是操作系统认为的物理地址。
当操作系统试着要使用特权指令来完成一个虚拟地址到物理地址的转换时(tlbmiss),vmm就介入了(vmm监视着所有对特权寄存器的操作)。vmm会先使用操作系统内的代码来先完成虚拟地址到物理地址的转化(因为vmm并不知道这个映射关系)。然后,操作系统认为自己已经完成了转化,尝试去更新tlb(特权操作)。这个时候,vmm会介入,用一个叫个pmap的映射表找到物理地址对应的机器地址,用机器地址替换掉物理地址,然后把tlb更新为虚拟地址到机器地址的映射。之后,所有对这个虚拟地址的访问都会被转换为对相应机器地址的访问。(注意,mips用的是softwarereloadedtlb,x86用的是hardwarereloadedtlb)
多个vm之间是怎么分享资源的?或者说,1gb内存怎么当2gb用?
我们知道,每一个虚拟机都要占用大量的内存空间。在内存有限的情况下,怎么在一台机器运行更多的虚拟机?幸运的是,不用的虚拟机之间在内存中数据可能会完全一致(比如,系统文件在内存中的缓存)。如要我们可以只在内存中保留一份数据,我们就行节省很多空间。disco使用虚拟io设备和虚拟网络设备来节省内存空间。
虚拟io设备:当两个虚拟机从同一个磁盘上读同一个文件时,vmm会interceptdma,然后就会发现这两个vm在使用同样的数据。这份数据只需要在机器内存里保存一份,然后修改pmap,使得两个vm的物理地址指向同一个机器地址就可以了。当任何一个vm更新这份数据,vmm会给它一份新的拷贝,原来的那份不做更改(copyonwrite机制)。
虚拟网络设备:当使用nfs从vm1向vm2复制文件时,文件并没有被真正地复制。虚拟网络设备会更新vm2上的pmap,使之指向在内存中的文件,使得vm2上的操作系统认为自己已经有了这个文件。后来,vmware还有用hash来找相同的内存页然后再共享的技术
原文链接: