从CPU和OS到虚拟机和云计算

Sina WeiboBaiduLinkedInQQGoogle+RedditEvernote分享




关于这个话题,套用一句谚语就是三十年河东三十年河西,风水轮流转。软件和硬件一定是相互促进、相互拆台又相互搭台的。一些之前被诟病的上层架构,或许若干年之后会被发现成了最合适的选择,而再过若干年,又会变得不合适。软件定义亦或是硬件定义,同样也是这样,硬件定义的结果是性能够强但是不灵活,此时软件定义便会开始酝酿翻盘,但是任何事情都有惯性,软件“过度”定义之后,会发现很多事情搞不定,还得靠硬件来加速一下,此时开始进入硬件定义周期,然后循环往复。我们可以用几个例子来窥探一下这种规律。

 

CPUOS一对不离不弃的夫妻,阴抱阳,阳抱阴。一开始没有所谓中断,更没有所谓OS,只有顺序执行指令计算机和被写死的程序,很不灵活。后来才有了OS,CPU先执行OS这个大循环程序,然后载入所需要执行的用户程序执行,执行完退出,可以继续载入其他程序执行。哪怕最简单的OS要想玩转,CPU起码也得至少提供IO和时钟中断机制。OS呱呱坠地,就得不断长大,不断的进化,单任务不灵活,就得多任务分时执行,所有任务共享内存空间,导致了安全性问题,这就不得不引入虚拟内存技术,所以软件越来越复杂,性能逐渐就不行了。此时CPU出来说话了,我来搞定虚拟内存,提供页表极致,提供专用的控制寄存器,并提供专用的查表加速硬件部件。多任务分时OS的生产力被初步释放,但是性能还是较差,还得依靠CPU搞定。CPU继续发力,引入超线程技术,让多个线程的代码可以并发执行,这得益于流水线的设计;为了能够更好的实现线程并发执行,后来继续出现多核心多CPU的SMP技术, OS不得不做出改动。但是多CPU/核心并不是任何时候都很高效的并发多线程的,随着软件复杂度提升,线程同步、缓存一致性等问题导致需要大量状态和数据同步,传统的共享式的前端总线效率太低,所以不得不改为交换式Fabric比如Intel QPI,访问内存经过太多跳器件效率上不去,所以也改为直连CPU分布式共享架构,这也是当今的形态。再往后会怎么发展,应该可以顺着惯性往前推导一下,交换式Fabric的出现,意味着CPU和CPU之间可以离得越来越远,只要有足够高速的链路连接,这一形态其实就是大型NUMA计算机的形态了。这一形态的轮回意味着软件架构的变化,传统领域需要高性能的场景不得不使用大型机、小型机,但是他们是及其昂贵的,就是因为不开放,而他们又不可能像互联网领域一样投入开发资源在分布式系统上定制化自己的应用。而开放式大型NUMA系统出现之后,可能之前的被“过度”定义了的分布式系统生态又会沉寂下来,这个循环进入新的周期纪元,在这个纪元里,曾经光鲜的分布式系统可能会被新生代工程师/架构师认为是一种很不可思议的“野路子”:“你看,以前这种架构,好坑爹啊!”。这就像我们现在回头看之前的有些设计一样,也会感觉到不可思议,那时候的人都这么“脑残”么?恩,如果换了你回到那个时代,或许更脑残:)。不管谁脑残,一个事实是始终不变的,那就是硬件性能的绝对值是一直直线上升的,不管分布式还是集中式。

 

CPUVMM。VMM能发展到今天这个地步是无人始料的,一开始就是玩玩,没想到玩了个大的出来。有不少人持有上述观点,其实这个观点只是表象。虚拟机技术起源于大型机,中小型机上早已也使用了多年,所以VMM可并不是玩玩。大机小机都是封闭市场,技术也确实牛。开放市场领域很多技术其实都是源自大型机小型机。虚拟机显然是单机性能过剩,而多机整体资源又无法得到全局细粒度池化分配时代的产物。VMM虚拟CPU,虚拟IO设备,虚拟内存,一开始全用软件实现,每一条指令解释执行,后来优化了设计,但最终还是要监控和截获+虚拟那些敏感和特权指令,每个进程还要虚拟出额外页表从而虚拟内存,IO需要经历重重内存拷贝才能发出去一个包,要想商用的话,软件各方面开销实在是搞不定了,此时还得硬件出马,在CPU层面提供硬件辅助, IO设备也开始有了SRIOV/MRIOV的方案,我总感觉这次硬件反而有点“过度”定义了,被软件骗了一回。为什么呢?就因为硬件资源不能做到池化和细粒度切分,才会产生VMM这个尴尬的东西,而此时硬件仿佛走火入魔了,弄出一系列复杂的技术来支撑VMM。其实硬件还有另一条路可以走,同样可以实现VMM类似的效果,那就是让硬件变得可以切分,而不是用软件去切分。这条路在小机系统上曾经有人尝试过,采用总线级别的隔离开关来切分不同的CPU和内存以及IO槽位。要实现细粒度切分的前提是必须把硬件最小切分粒度降下来,单CPU使劲增加性能其实已经不是一条比较明智的路线了。近几年众核CPU不断冒出头来,单CPU128个核心已经不是什么惊讶之事了,但是由于生态尚未成熟,它们目前仍被局限在并行度高耦合度低的处理场景比如网络包处理等。另一个迹象就是ARM生态的崛起,种种迹象表明这很有可能是一条光明大道。但是如何将传统生态导向这个道路上就不那么简单了。我们看到Intel正在搞SiPh硅光方案,其致力于硬件资源的灵活拼搭,如果粒度足够细,VMM其实就可以退出舞台了,这将又是一场硬件拆台软件的血腥战斗。

 

 

虚拟机和云计算

虚拟机的发展催生硬件加速方案,也正是因为硬加速,又使得虚拟机可以大范围应用,也正是如此,才将云计算的概念带了出来,也就是硬件又反过来加速了软件的变革。而随着量的上升,会影响质变,人们会发现其实VM这种东西是非常低效的虚拟化,VMM个人理解其实是一股具有邪性的阳气,他看似光鲜实则非常损耗阴实的,体现为过多不必要的操作系统实例。操作系统本来就是利用线程/进程来虚拟化多任务多用户的运行,每一次系统调用的开销是非常高的,让一个CPU同时运行多个操作系统实例,无疑是极大的浪费,上文提到过这种模式是单机性能过剩,而整体资源又无法得到池化时代的产物。而云计算架构的出现,会打破这个矛盾。云计算可能初生的时候就是一个全局虚拟机资源调度管理软件框架,但是一个事物毕竟是不断在成长进化的,云计算会最终找到它的使命,那就是大范围全局资源的池化、分配调度管理监控,也就是数据中心级的OS,做的事情与单机OS如出一辙。既然如此,那么AAAS(Application As a Service)应该是云计算最终要实现的状态,这就相当于打开屏幕,就出现一堆应用图标,点进去完成你要的功能,退出,结束。既然用户不需要IAAS,不需要直接面对操作系统,那么搞那么多VM实例其实就是没有必要的,空耗资源。云计算需要实现一个全局的应用进程级别的调度中枢,而不是调度VM。再来思考一下大机为什么需要VM?因为大机那个时代并没有现在这种云计算的概念,xAAS这个思维,你可以说那时候人脑残,那时候软件技术是很封闭而且不发达的,所以进行资源细粒度切分,用VM也算是快刀斩乱麻的方案。我们也看到进程级虚拟机(比如Linux Container)业逐渐在受到关注。这些都是云计算这个软件框架、这个宏观的OS的定义,那么这种定义会对硬件有什么影响?我想那一定会催生两个硬件形态的变革,一个就是上面所说的单点的性能要足够低,力度要足够细,单点性能“足够低”,这可能让人大跌眼镜,不过将来可真说不准啊,众核CPU就是个很好的胚子;另一个是局部多层高速Fabric核间通信,由于CPU/核心可以任意切分和组合,他们之间一定需要一个高速总线相互连接,目前存在多种Fabric方案和产品,这块虽然比较低调冷门但是也还算成熟,加上硅光等技术会将Fabric隐身至机架外,这就为大范围池化提供了支撑。而这次硬件的变革很可能又会影响软件的架构,使得大规模并行计算不再需要MPI等远程消息传递机制,消息传递直接使用Fabric硬件加速的队列FIFO,会大大简化编程,有利于HPC的模式最终可以全面得到普及。

云计算,宏观操作系统,数据中心级的NUMA机,一切皆有可能。

 

张冬 2014-05-06 16:00

(6个打分, 平均:4.83 / 5)

雁过留声

“从CPU和OS到虚拟机和云计算”有24个回复

  1. anonymous1 于 2014-05-11 10:37 下午

    CPU再怎么发展,也不能代替VMM,虚拟化不仅仅是所谓的硬件资源的池化或者切分。所以VMM并不是一个尴尬的角色。相反,CPU如果想抛开VMM包办虚拟化的所有事情,那才是CPU的尴尬。

    这就如,CPU提供关键的虚拟内存支持,但无法提供完整的内存管理。

    硬件为软件提供支持和可发挥的空间,但无法想软件那样思考

  2. y.t.zhou 于 2014-05-12 6:52 上午

    “此时CPU出来说话了,我来搞定虚拟内存,提供页表极致,提供专用的控制寄存器,并提供专用的查表加速硬件部件。”其中“极致”应该是“机制”

  3. tasnrh 于 2014-05-12 8:27 上午

    VMM进行总体物理资源调度我认为是必不可少的组件,但是不要Windows操作系统这个可以有啊。我使用一个桌面的目的是什么?还是为了运行应用,而今后我的应用跑在云上或者将应用进行封装,不需要在Windows环境下运行。哄哄,干掉微软,天地大同。

  4. symantec 于 2014-05-13 2:11 上午

    冬瓜头,这文章的风格,从来如此。。。。科学!=小说。

  5. 冬瓜头 于 2014-05-13 2:48 上午

    symantec,就是在写小说啊,幻想瞎想+大话。我不是科学家,怎么能写得出科学来。你也写不出来,因为你也不是科学家啊。其实我还发了一篇更不合你口味的,首席不知道会不会通过审核了。走了,8

  6. slo 于 2014-05-13 7:10 上午

    “让一个CPU同时运行多个操作系统实例,无疑是极大的浪费,上文提到过这种模式是单机性能过剩,而整体资源又无法得到池化时代的产物。”

    认可这个说法,目前体现vm就是单个VM不能跨物理机,啥时候可以做到vm分布式,才是真正的虚拟化的云

  7. 青杨 于 2014-05-24 9:02 上午

    对于以业务应用为核心的VM,单点粒度细化,形成完全池化还是不错。但也不一定非得要VM跨主机运行, VM粒度做细可以池化,主机加粗也可以池化。对于以用户为核心的VM,没必要再去细化,除非破除个人OS。

  8. 青杨 于 2014-05-24 9:03 上午

    主机变虚拟机,已经让网络安全头疼不已了,要再去细分,安全工作会再复杂好几倍。回想过去,家门家户各自一扇大门就能防贼。后来大家聚到一起,形成了小区,每栋楼装门,每个住户装门,每个房间还有门,房间里面继续装防盗窗。一层一层细化,一层一层装门,要安全就得先隔离,似乎隔离了就能防贼。隔离,隔离…..直到有一天,大街小巷装了监控器,既方便又廉价,全国联网,贼走到哪儿都能被揪出来,送到执法局审判定罪。化被动为主动,自不然就天下少贼了。这个时候,有门无门只不过是个形式,门不再用来防盗,而是用来保护隐私。个人认为这才是未来的安全——云安全。中国的网络安全法都还没起步,如何取证,如何定罪都还是空白一片。两年前曾提过中国是缺乏网络安全意识,小痛小痒舍不得花大钱治病,后来终于等来了斯诺登,算是震了一震。但棱镜门不仅仅是在提醒要加强安全意识,更多的是在说明:在监控面前,门不堪一击。

  9. 哈哈, 于 2014-05-27 7:48 下午

    冬瓜,你还是写存储吧。为你好

  10. 冬瓜头 于 2014-06-03 6:49 上午

    9#,谢谢提醒。当时写存储的时候,也有人对我说过你还是去做化工老本行吧,对it基本没sense。

  11. b11934 于 2014-06-05 11:21 下午

    冬瓜兄,高才。

    搞那么多VM干啥,就一个地球,那么多国家。一个联合国就行了。

  12. afei 于 2014-06-21 6:12 下午

    觉得这个文章写的很好呀,有点分久必合合久必分的大局感,好好拜读一下

  13. Qingye Jiang (John) 于 2014-06-27 5:22 上午

    “硬件资源不能做到池化和细粒度切分,才会产生VMM这个尴尬的东西”这样的描述其实是将硬件和软件孤立起来看待了。问题在于硬件和软件之间的界限并不是这么清晰的,硬件需要固件才能够正常工作,软件需要通过驱动和硬件交互。固件和驱动这两个部分,是硬件和软件之间的模糊地带。以PC为例,在主板和操作系统之间的CMOS,就是这个模糊地带的代表。

    1974年Gerald J. Popek和Robert P. Goldberg提出了Type 1 Hypervisor和Type 2 Hypvervisor的概念。对于Type 1 Hypvervisor来说,典型的分层为硬件-CMOS-Hypvervior-虚拟机操作系统。对于Type 2 Hypervisor来说,典型的分层为硬件-CMOS-宿主机操作系统-Hypvervisor-虚拟机操作系统。在Type I Hypervisor这个应用场景,CMOS和Hypvervisor层都是很薄的。未来我们有可能会看到CMOS和Hypervisor的进一步融合。

    容器是VM是两个截然不同的发展方向。同样,由一台物理机虚拟出多个系统和由多台物理机虚拟出一个系统也是两个截然不同的发展方向。在多虚一这个领域,工程计算领域其实也有了很多积累,例如Hadoop、HTCondor、Sun Grid Engine等等,但是在易用性等方面还远远不如一虚多这个领域。我注意到有很多人在虚拟机上跑Grid,可见用户需求其实是多样化的。需求的多样化导致了解决方案的多样化,并不存在谁统一谁的问题。

  14. ayvuir 于 2014-06-29 7:25 下午

    同意冬瓜头的看法,用户关系的是Sevice,而不是VM,VM这层太厚重了,Container够用

  15. 哈哈 于 2014-07-15 10:56 下午

    不coding, 搞这些 high level的有毛用啊.

  16. 哈哈 于 2014-07-20 2:06 下午

    编码很牛吗?满大街都是能编码的,就差卖菜的了,编那么多码有多少有毛用的,coding的价值在于你在coding什么,不是你会coding

  17. 哈哈 于 2014-08-23 4:58 上午

    楼上你这个sb,老子看的paper比你多的多,

  18. 哈哈 于 2014-08-23 1:44 下午

    SB有骂人的自由,也有做自己老子的自由,还有看很多paper的自由,更有纸上谈兵的自由,年青人,不要那么激动,Jobs远比你NB,但远没你SB,你有一辈子不明白stay hungry,stay foolish的自由,但每天多刷刷牙漱漱口,再讲点道理,有益身心健康。骂人谁都会,但未必谁都会骂人。

  19. 陈怀临 于 2014-08-23 2:54 下午

    尼玛,还都是哈哈。懒的连哈哈-A,哈哈-B都不愿意分一下。有这个力气,奔一个文章,看看实力呗。

  20. 于 2014-08-23 3:29 下午

    人类至高的哲学道德经也不过5000言,一篇好文章需要多少字呢?技术的最高境界是艺术和哲学,编码是否可以体现一个人作品的性格和风格?拍拍马屁,陈首席的编码一定有自己的过人之处。作为众多的技术屌丝,对技术的追求是否就是养家糊口?其实技术和艺术本身在顶层并没有区别,我们要带给别人美妙的感觉,也许悲伤,也许幸福,但只有把技术赋予你的生命,你才能感觉到技术真正美的地方,如果有一个搞美学的博士生要写毕业论文,建议写一篇技术的美学,一定可以留名。做技术的人,首先当然要精通自己的技术,无论即使只是最简单的编码,然后呢?看看听定哪些真正让你动真心艺术作品,会让你对工作和生活受益匪浅,文章结束了,首先看还成吗?那位哈哈朋友,也纸上谈个兵吧。嘴上有德,留言无过。

  21. aaa 于 2014-08-23 3:30 下午

    人类至高的哲学道德经也不过5000言,一篇好文章需要多少字呢?技术的最高境界是艺术和哲学,编码是否可以体现一个人作品的性格和风格?拍拍马屁,陈首席的编码一定有自己的过人之处。作为众多的技术屌丝,对技术的追求是否就是养家糊口?其实技术和艺术本身在顶层并没有区别,我们要带给别人美妙的感觉,也许悲伤,也许幸福,但只有把技术赋予你的生命,你才能感觉到技术真正美的地方,如果有一个搞美学的博士生要写毕业论文,建议写一篇技术的美学,一定可以留名。做技术的人,首先当然要精通自己的技术,无论即使只是最简单的编码,然后呢?看看听定哪些真正让你动真心艺术作品,会让你对工作和生活受益匪浅,文章结束了,首先看还成吗?那位哈哈朋友,也纸上谈个兵吧。—-嘴上有德,留言无过。

  22. mll 于 2014-09-21 5:55 上午

    错别字太多,文章没有审核一下吗?

  23. 呵呵 于 2014-11-17 11:26 下午

    写的不错。技术发展也是边走边看,成本和效率的选择平衡。

  24. AA 于 2014-11-18 2:04 上午

    “我们也看到进程级虚拟机(比如Linux Container)业逐渐在受到关注。”

    基本概念理解有误.