雷锋网按:本文根据包云岗教授近日在 CNCC 2016 上所做的大会特邀报告《云计算与标签化冯诺依曼体系结构》编辑整理而来,在未改变原意的基础上略作了删减。
包云岗,于2003年获南京大学理学学士,2008年获中科院计算所博士学位,现为中科院计算所研究员,博士生导师,先进计算机系统研究中心副主任。研究方向主要是计算机系统结构。主要工作包括:(1)博士期间带领小组设计与实现了在国际上具有独特优势的访存监控系统HMTT (Sigmetrics’08),为斯坦福大学、EPFL、清华大学、华为、韩国Hynix等十几个机构提供超过2TB的访存踪迹数据;(2)提出了基于路划分的DMA Cache技术 (HPCA’10),在2014年发布的Intel Xeon处理器中采用相同技术路线:(3)在普林斯顿大学开展博士后研究,发布多核基准测试集PARSEC 3.0版本 (ACM Computer Architecture News 2016),下载已逾7000次,被三大体系结构国际顶级会议上70%以上的论文使用;(4)提出软件定义服务器新架构PARD (ASPLOS'15),作为华为全球合作五个代表性成果之一入选华为2015年报,并受邀参加2015年国际计算机顶级论坛德国Dagstuhl Seminar。包云岗在国际一流计算机系统会议期刊发表了10余篇论文,曾两次获计算所优秀论文一等奖,获2013年CCF-Intel青年学者奖。同时担任CCF普及工作委员会主任,《中国计算机学会通讯》编委。
我今天的话,围绕一个目标,想把三个关键词串起来,目标是希望降低云计算数据中心的成本,三个关键词是云计算、冯诺依曼结构以及标签化。
首先看2014年,百度这个最高奖,当时我的学生实习所在的团队拿到这个最高奖,成为非常少有的在百度两次获得这个奖的,非常少有的现象,但他们的工作和贡献却值得两次获奖,他们以提高数据中心的利用率为点,为百度节省了上10亿的成本。
所以,提到数据中心的话,我们很多人会觉得好像离自己很远,实际上现在的数据中心已经和发电厂,自然水厂一样,成为了我们社会的基础设施。比如打开微信,在这个等待的过程中,一半时间都是数据中心帮我们在处理请求,数据中心现在实际上是互联网公司的核心竞争力。
微软前CEO鲍尔默在2013年时曾骄傲地说——全世界没有几个公司懂云计算,懂公有云。真正能理解并管理这种大规模数据中心的企业,在全世界非常非常少。
事实上,微软它是有资本去骄傲的,你们可以看到微软过去在数据中心领域投资了150亿美元,包括上次国庆节我和微软的一位杰出工程师,他负责数据中心的未来规划,他表示到今年年底微软在数据中心的投资会达到300亿美元,我们知道一艘航母大概是100-150亿美元,所以这些互联网公司几乎每年都要造“一艘航母”。
实际上数据中心是我们一个国家在工业信息各方面综合实力的一个体现,好在我们中国国内的企业也不甘示弱。我们看到阿里上个月在张北数据中心启用,这个数据中心耗资180亿,但是它们已经感到了成本的压力。
所以它在最近在7月份的时候专门去成立了一个部门去降低数据中心的开销。但是另外一边,我们来看看数据中心利用率怎么样?
这是盖特纳和麦肯锡的调研数据:全球的服务器利用率只有6%到12%,即使是亚马逊利用虚拟云计算把这个利用率提升了这个利用率还是只有7%-17%,所以可以看到大部分资源和成本其实是被浪费的,那怎么提高?
可以去共享,在一个服务器上去跑多个应用,这样的话可以一定时期内把服务器的利用率提高到几倍。实际上谷歌也是这么做的,目前它们数据中心可以分成两类:一类跑在线应用,另外一类跑批处理(作业)。
我们可以看到,可以通过这种共享可以把批处理作业的这种数据中心提升到75%以上的CPU利用率, 但是对于在线应用(服务),还是只有30%。所以问题是为什么不把所有数据中心的利用率到提升到70%以上呢?
这里有一个在线服务的例子。
如果我们把CPU利用率从30%提升到70%,响应时间就会提高10倍。
这个例子其实在我们的生活中也会常见,在北京四环如果要去南站,如果是早上6:00,只需要22分钟就可以到,如果是下午3:00的话,我就需要一个小时,还不一定能到,如果要在车流量多的时候,要让救护车顺利通过这是难事,都出过好几次这样的新闻。
事实上数据中心也面临着这样的难题,就是我们怎么去保障用户数据体验,同时又能提高资源的利用率,这一点现在只能是二选一, 对于很多互联网公司来说,保障用户体验往往是第一位的。
谷歌做过一个例子,它们搜索引擎的响应时间从0.4秒增加到0.9秒,广告的收入就会下降20%,这对于谷歌来说,是上百亿美元的损失。
所以我们可以这样理解,这种情况下它宁可让数据中心利用率低一些,即使损失几十亿,但可以保障用户的体验。但谁也不想这样白白的浪费。像谷歌有世界上最顶尖的工程师,像Jeff Dean和 Luiz Barroso等, 他们在不断地从软件层次去优化数据中心,通过在虚拟化、在操作系统、在分布式架构上提出了很多新的技术。
所以经过10年的挣扎,到2015年,他们得出一个结论——需要硬件支持。
这是在去年Dick Sites,也是原来在Dec做CPU,现在在参与数据中心的。他提出,现在数据中心服务器跟以前传统PC不一样,有很多新的问题、新的挑战。包括怎么来消除多个应用间的竞争?怎么来实现很好的隔离?这些都很难,需要硬件去做支持,软件都已经做了很多工作,已经尽力了。但是硬件上怎么来支持?
那我们来回顾冯诺依曼结构,这是一个非常优美的结构,但是它还不是完美。1978年图灵奖获得者John Backus,在他的演说当中直接指出冯诺依曼结构中,连接CPU和存储的通道会成为瓶颈,我们称之为冯诺依曼瓶颈。
事实上正如Backus预言,从1980年开始,CPU很完美的增长速度就开始出现不一致,所以出现了CPU每年50%速度的增长,而Memory只有7%,这样的话导致了内存墙的问题,体系结构界怎么来解决?
体系结构界就是不断地增长层次,一层、二层、三层,这样来弥补CPU和内存间速度的匹配。所以到今天,我们存储的层次已经变成这样,有很多层。但是2000年之后,多核又出现了。多核的出现,把整个存储层次又分成了两块,一块把它放在核内、一块把它放在核外,核内的话,随着核的数目增加,它可以不断地复制。
但这个时候,我们如果要运行两个应用程序,跑在不同的核上面,我们可以看到,当它们的请求都送到核外共享的这些存储层次的话,对于这些存储层次来说,它们并不知道这些应用,谁更优先,谁更紧急,所以以第三级为例的话,它属于一种无需共享的状态,没有办法去区分到底哪个是来自更紧急的应用,但这种无序共享实际上会导致性能无法保障。
这里Intel做过一项实验,如果在一个CPU上面我只跑一个应用程序,可以把任务填满到三级cache里面去,每一个应用都可以跑地很好,但只要两个应用程序一起,性能就会下降超过三倍以上,对于云计算环境来说,这样的用户体验就非常糟糕。
如果回顾技术发展史的话,就会知道,今天数据中心遇到的问题,很多个应用,很多用户,他们开始共享一个基础设施,但他们的需求又不一样,有的要求延迟,有的要求吞吐,所以带来一些Qos的保障问题。但是谷歌的处理办法是非常粗放式的,直接把它分成两类(在线分离,离线分离两类)。
但如果我们回顾一下因特网的话,90年代它也遇到这样的问题,但因特网用了另外一套解决方案,它们就是标签化网络的机制。
什么是标签化网络?我的理解是4个方面。
第一个是细粒度对象,每一个网络包增加一个标签。
第二个是关联语义,标签的值是和用户的需求直接相关的。
第三个是携带传播,也就是这个标签会在这个网络包的的生命周期中去传播。
第四个是转发控制(见下)。所以某种程度上,实际上标签代表了一种接口,它是把用户的要求,通过标签,传到了底层的网络设备。
事实上,在体系结构界,也意识到了,我们现在传统的接口,体系结构界的接口,指令,虚拟内存,实际上它自己也意识到了自己的局限性。所以在2012年的时候发出了白皮书,在白皮书中明确指出,我们需要新的更高层次的抽象接口,来把程序员,来把编译器的信息传递到底层硬件,这信息包括Qos,包括Security等等。
那么的我们的一个疑问是,有没有可能网络界的标签化也用到体系结构内呢,答案是可以的。因为我们观察到今天的计算机,实际上它本质上就是一个网络,内部不同的部件之间,它们的通信都是通过包的形式传播的。比如我们要传一个DMA,从网卡把数据送到内存,这是一个典型的PCIe包,PCIe包就会通过网络传到I/O的桥上面,再转成内部的包,再送到内存上去,线上网络也是一样。
所以我在2012年的时候当时就有这个想法,但一直没有更深入的理解,后来回到计算所后,和各位老师多次交流,我们把它总结为标签化冯诺依曼结构,它不是对冯诺依曼结构的革新,它只是在冯诺依曼结构上的一个扩展。它的特点,我想也是可以包括四方面:
第一个是细粒度对象(见下);
第二个是关联语义(见下);
第三个是携带传播(见下);
第四个是软件定义的(或者可编程的)标签控制逻辑,这一点的话我们可以通过这种方式,来实现对整个内部请求的一个区分化的服务。
这是一个基本的idea。
所以,这个结构是希望在云计算的环境下,保证用户的体验,然后再把现在CPU的速度提升到翻一倍。我们经过实践发现,这在排队模型里面,有很好的支持,这样做,通过优先权队列,我们可以做到,在保证高优先级应用的响应时间,把整个系统负载提高,所以标冯结构实际上是通过标签化机制实现了优先权对列。
不过这带来了很多开放性问题。
比如说理论上,这种结构,对于RAM,PRAM等计算模型有没有影响,我们是不是要发展新的计算模型?我们在硬件体系上来实现它呢?我们怎么来编程,怎么把用户的需求来表达?……这有很多问题。
比较幸运的是,我们刚刚收到了科技部的支持,所以我们在未来在这个领域会有更进一步的研究,在过去几年,实际上我们在体系结构层次上探索,下面我们简单介绍一下我们在这方面探索的结果。
这是一个传统的体系结构工作,我们做的工作实际上就是,我们做了一种新的结构,名字叫PARD,实际上
它首先就是把内部的请求都进行标签化。
第二个在共享的部件上,我们加上控制、逻辑,同时把控制逻辑通过一个网络的连接,形成一个控制平面。
再一个我们会增加一个编程接口(管理模块),然后把所有的控制平面,控制逻辑,把它抽象成成一个树形来进行操作。
所以想法很简单,但我们把它真的实现,花了我们三年的时间,我们实现了两个模拟器,一个软件的模拟器,一个基于FPGA的原型,这些都可以开源,在网上可以下载到。
这是一个基于FPGA的原型(如下图),它已经实现了这种基本的标冯结构。同时我们设计出了这么一个可编程逻辑的模版,它可以放到不同的部件里面去,所以在这个基础上我们可以看看它是怎么用的?
我们可以看第一个例子,可以在标签控制逻辑里面加上一点地址映射,那么我们就可以实现一个硬件实现的虚拟化,Hypervisor。我们不需要软件的Hypervisor, 就可以把整个硬件标签将计算机直接隔离成多个独立的子机器,然后每个独立的子机器(亦称为分区)可以运用独立的操作系统。
这一点在我们FPGA平台上已经可以实现,我们有4core, 就可以把它隔成个分区,每个分区可以运行独立的OS,而不需要Hypervisor。
而且分区之间的资源可以去动态地调节,通过对控制逻辑进行一个重编程,同时我们也可以做到在控制逻辑里面加上优先权队列,优先权的控制,那么我们就可以去做一些性能的隔离,去做一些性能QoS的保障。比如我们的一个实验,如果在缓存带宽50%的情况下,加上优先权队列,那么内存控制器的排队时间,对于高优先级(任务)可以下降5.6倍,对于低优先级的(任务)只会增加33%,这是非常好的一个结果。
基于这样的一种分配,我们可以做到CPU在满负荷的情况下,依然可以保证它较快的反应时间,这是产生的一个初步影响力,我们发表了一些论文,也是得到了华为的一些支持,工业界的一些支持,同时很幸运地被去年Dagstuhl Seminar论坛介绍这方面的工作,包括这个工作也是作为华为全球合作代表成果之一入选华为2015年报。
标签化冯诺依曼结构它的目标其实是:
去提高数据中心的资源利用率,降低数据中心的整个成本。
但是也有人问我?如果它以后真的会成为主流?关于数据中心成本降低了,对于设备商来说,他们愿意干吗?为什么他们有动力去做呢?因为他们的收入好像会下降。
这里我想提一点,其实在200年前,英国的经济学家杰文斯就问过这个问题,煤炭利用率提升了一倍,但会不会煤的产量下降呢?事实上,他发现,煤的产量增加了,因为更多的人会去用,所以技术的进步会去增加技术的消费量,我相信我们通过努力,去降低云计算的成本,也会进一步去促进云计算的快速发展。