关于虚拟化的思考
作者 kernelchina | 2011-03-07 06:57 | 类型 行业动感 | 19条用户评论 »
虚拟化是当前的一个热门话题,但它并不是一个新名词,虚拟化的历史由来已久。 举一个简单的例子,比如说操作系统。操作系统是做什么的哪?操作系统是管理 设备的,是为进程提供一个虚拟的执行环境,使得每个进程都感觉自己拥有整个 系统。操作系统至少为进程提供了以下假象: 1) CPU是自己独占的,可以随便用 2) 32bits或者64bits的内存空间,基本上可以认为是没有限制 3) 文件系统,以及设备操作等 4) 网络,没有限制的缓存以及连接等 可以想象,操作系统提供了进程执行的虚拟环境,简化了进程编写的工作。但是, 在这个虚拟执行环境里面,操作系统还要保证: 1) 公平,由于不是一个进程在执行,所以不能厚此薄彼,操作系统要调度 2) 保护,为进程提供保护,使得一个进程崩溃,不会影响到其他进程 3) 资源管理,虽然资源表面上是无限的,但需要操作系统来管理,分配,调度,映射 从上面的例子,我们可以看出虚拟化的几个重要的特性 1) 资源的管理和映射。虚拟化提供了虚拟的执行环境,好像资源是无限的。但是 真正的物理硬件是有限的,只不过大家轮流使用而已;或者是把大块的物理资 源分割成多个小块,然后分配给虚拟系统。 从这个角度来说,虚拟化最重要的工作就是资源的调度和向上层提供虚拟接口。 具体怎么实施,参考操作系统的实现就可以。资源管理应该由提供虚拟 环境的实体来施行。一个简单的例子,preemptive和cooperative的多任务。 显然cooperative是不能很好地支持多任务的,而preemptive就可以。 2) 空间隔离和保护。虚拟环境是给多个虚拟系统使用的。要在多个虚拟系统之间 提供隔离和保护的功能,使得各虚拟系统之间不要相互影响。最简单的,比如 数据的保护。还有就是一个系统崩溃不能影响其他系统。从这一点来看,很多 虚拟环境是不合格的,比如基于web server的虚拟主机,虚拟ftp服务器等等。 3) QoS。之所以要把这个单拿出来说,是因为如果虚拟环境不能提供与非虚拟环境 同等质量的服务的话,那虚拟环境就没有什么竞争力。这里有很多例子,比如以 太网里面的VLAN或者是路由器里面的MPLS。网络里面有很多虚拟化的例子,虽 然它们的初衷是为了资源共享,但是在实现的时候,特别强调QoS。与QoS 相关的资源预留或者资源调度等等,都是为了保证虚拟系统的服务质量。这里面有 很多门道。 虚拟化可以简单这样分类 1) 1:1,虚拟系统切分物理系统,多个虚拟系统加起来,正好等于物理系统,或者 物理系统提供一定的冗余量以保证QoS。这样的系统有多大的价值?这里只有资源 的分割,有可能不提供虚拟接口,也不提供空间保护。 2) 1:N,虚拟系统的能力加起来要比物理系统大,如果只有一个虚拟系统,那就是1:1,但通常是不会这样用。 虚拟化至少应该提供以下好处: 1) 虚拟化可以有效的利用资源,一个假设就是用户不会同时都在peak点上,所以可 以把多余的资源拿出来分享。或者某个通道容量特别大,可以承载多个用户。 2) 提供虚拟执行环境,用起来就像是一个系统。比如常见的cluster,把多个机器统 一管理,向上提供一致的虚拟执行环境;或者像vmware这种,可以在一台机器上, 提供多个虚拟机,使用虚拟机就像使用物理机一样。 3) 节约成本。如果不能做到这一点,虚拟化就没有必要。 思路有点乱,希望能有点启发。 参考资料: 1: http://en.wikipedia.org/wiki/Operating_system 2: http://en.wikipedia.org/wiki/Vlan 3: http://en.wikipedia.org/wiki/Multiprotocol_Label_Switching | |
雁过留声
“关于虚拟化的思考”有19个回复
虚拟化是天然的层次结构。
写的太简单了。。。
我倒是对虚拟化的技术在嵌入式领域的应用很感兴趣,貌似现在通信厂商在无线接入网元上也号称要部署虚拟化支撑;
个人感觉,从某些单点技术来看,多核OS的挑战及演进与虚拟化技术有殊途同归之妙
抛砖引玉而已,弯曲的重点是评论,高人都在潜水。说到演进,倒让我想起了,“天下大势,合久必分,分久必合”,不管是多核,还是虚拟化,都挺符合的。
kernelchina, 以后自己preview一下格式,换行。。。我容易吗我。我这么高的工资给你排版,你太给力了你。。。
实在是抱歉,一是在弯曲,我的帐号没法用live writer,报401,没有权限,这是个老问题了;还有就是我发现用list不太好,没法对齐行。
其实弯曲这里用google chrome写的话,换行和空行会被吃掉,后来我都是用ie来发文章的
云+虚拟化,齐飞?
有个问题想请教一下,目前的虚拟化产品是否可以实现在多台物理机器上成功调度资源,如A机器的20%资源+B机器的20%资源=满足需求的物理机。
楼上说的就是aggregation的应用,不过据说效率比较低,性能下降一半以上;
Cloud os? 虚拟化要隐藏底层细节,为上层提供统一接口。虚拟化不能仅局限于虚拟机怎么搞,在更高层次需要抽象,否则Cloud是用不起来的。
终极概念……分布式操作系统
将多台计算机资源汇聚在一起是HPC吗?vmware好像做不到。两个方向的问题
虚拟化内部通信也是很重要的一块啊
这篇文章类似于大哲学家们在餐桌上用餐巾纸写的一些随笔。。。:-)。当然,都是真知灼见:-)
@土人,如果能把底层硬件都统一成一样的虚拟接口,应该能做到的。
将多台计算机资源汇聚在一起,在vmware中叫做资源池。
我曾想用kernelchina的这个话题也写篇文章,但是发现不好写。最近事比较多,头脑比较乱。等闲下来的时候再来细细的琢磨下。
对这方面我也有一些思考和总结,不过都写到《大话存储2》里了,兄弟们,4月初大概就出版了,还望大家支持
@EE HPC好像靠的是算法,还有一个牌子的服务器是模块化的 实在想不起来了 他好像是这样做的
@deltali 一台虚拟机好像无法同时使用两台物理机的资源,即使是一个资源池。还是两个方向的东东
冬瓜头,等你这本书已经很久了