本文主要讨论虚拟化技术的“实质”。
1. 什么是虚拟化?
虚拟化本身并不是一个新的概念,它是一个广泛应用的技术。其关键在于“接口”(Interface)和“复用”(Multiplexing)。
举一个“接口”的栗子。我们运行一个仿真器,在PC上运行小霸王学习机上的游戏。这个仿真器就把PC的接口转化成了小霸王学习机的接口,从而能无缝支持为小霸王开发的游戏。这种接口转化几乎的万能的,我们总可以写一套软件在一个接口上模拟出另外一种接口。
这种技术最大的问题就是,慢!
举一个“复用”的栗子。我们的ADSL网络连接,在同一个物理线路上可以支持多个用户的网络连接。更重要的是,假设物理带宽是10M,每个用户用2M,利用虚拟化技术我们可以支持多于5个的用户。因为所有用户同时使用最大带宽的情况很少见。可见,虚拟化技术可以用使有限的物理资源支持更多的用户。
代价是什么?性能不稳定。如果卖得用户太多,大家需求总和超过物理极限的时候,大家的性能都会受影响。因此,挑剔的用户和应用会选择预留专用资源,不跟其他人共享。
2. 平台虚拟化概念?
云计算中的虚拟化为“平台虚拟化(Platform Virtualization)”,因为其虚拟化对象是x86平台。
刚刚提到了“接口”与“复用”。那么云计算中的虚拟化实际就是要在一台x86机器的物理接口上,虚拟出多个x86的虚拟接口,在每个虚拟接口上运行一个操作系统,卖给不同的用户。可见,实现了多个虚拟x86接口,我们就可以实现复用,可以实现平台虚拟化。
注意要实现多个虚拟接口,我们必须要分隔开每个虚拟接口后边的“状态”。
举一个简单的栗子,假设我们开一个连锁银行,接口就是窗口柜台服务员,整个银行只有一个人会记账。在没有虚拟化时,记账的哥们站前台,来一个用户处理一个用户。假如本地客户很少,这哥们大部分时间就得闲着。于是我们在另一个城市开分店!分店里有若干窗口和前台服务员,所有记账请求都通过电话、网络传给记账帝,让他处理。这样记账帝就会忙一点了。
对用户来说,它们只跟窗口(接口)打交道,并不在乎有几个人记账。对银行来说,只要把每个客户的账(状态)分开就好了,这样整个银行里一个记账帝(CPU)就够用了。
所以,平台虚拟化实质就是一个物理设备,多个虚拟接口,状态分离。
3. 平台虚拟化实现
虚拟化技术的演变基本从纯软件,到paravirtualization,到hardware assisted virtualization。现如今广泛使用的实际是hardware assisted和paravirtuliazation的结合。
预知每个技术的详情,请分享点赞。。。不然实在没动力写。。。
关于作者
欧阳马上毕业,中国科学技术大学学士,美国匹兹堡大学在读博士生,研究方向操作系统,虚拟化。2013,2014年暑假作为实习生在美国VMware, Palo Alto ESX内核组从事CPU调度研发工作。