反思过去,改变未来—记 Chuck Thacker的“21世纪的计算”大会演讲

来源:百度文库 编辑:神马文学网 时间:2024/04/29 20:08:03
反思过去,改变未来—记 Chuck Thacker的“21世纪的计算”大会演讲 (2010-11-25) 

             

Improving the Future by Examining the Past

    对计算机领域的人来说,Chuck Thacker绝对是个无人不知无人不晓的名字。他是以太局域网的发明者之一,也是世界是第一台激光打印机发明者之一。2009年,图灵奖颁给Chuck Thacker以表彰他对第一台现代个人计算机——施乐帕克(Xerox PARCAlto的先驱性设计,以及在局域网(包括以太网)、多处理器工作站、窥探高速缓存一致性协议和平板PC等方面的杰出成就与贡献。比尔·盖茨曾毫不掩饰地表达对他的敬意并说道:“就对计算机科学的贡献而言,我想不出有谁能够抵得上Chuck Thacker。”2010年,在第12届二十一世纪计算机大会上,这位计算机大师再次与世人分享了他对计算机过去和未来的一些思考,让我们一起来听听智者的声音吧!

    很高兴今天有机会来上海与中国的大学生做交流。我在刚刚得图灵奖的时候甚为惊讶因为在过去的40年里这个神圣的奖项基本上都是颁给真正做计算机的,而不是像我这样的研究者。我读了一下之前获奖者的论文,看一下他们都在想什么。我发现他们基本上分成两类,其中一类人的职业生涯一般都一帆风顺,另外一类是为未来带来很大挑战的人。但是我不属于这两类中的任何一种,所以我想从另外一种做法讨论,我想研究一篇论文,这篇论文最近也在讨论,我希望能够找出一种谈论问题的方式,通过这样的方式帮助我们更好地理解这个问题,了解这个问题的解决方案。

    我跟大家讲未来设计系统的时候是要考虑过去做的哪些决策对于现在带来哪些影响,当时做的决策在当时可能是很好的决策,可是到了今天它的重要性就不如几十年前了。我们过去做的一些选择到了今天已经不再有价值、不再有意义。如果回到过去做另外的选择,这不是说过去选错了,我想说的是我们需要仔细分析一下过去做的决策,今天我们把它们当成一些公理,除了这些公理之外还有哪些道路更为合适,我会给大家举六个例子证明我所提出的理论是有价值的。

    在这之前我们先来看一下过去十年在电脑、计算机方面有什么发展,这个列表对于两个机器进行对比,第一个机器是Alto,是1972年我研究的电脑,那个时候的CPU处理能力是6兆,到2010年变成了2.8G,但是要乘以4,我电脑里面有4CPU,三个CPU大多数处于空闲状况,增长了1900倍,这个增长速度是非常快的。内存的容量由128K变成6GB,内存现在越来越成为一个瓶颈。另外显示器的象素只增长了150倍,这个问题倒不大,因为现在我们的显示屏已经超过了人类肉眼所能够承受的级别,或者人类肉眼所能够辨别的级别。现在对于显示屏可能并不是简简单单提高象素,而是通过3D,或者其他的方式为视频提供突破。另外网络速度过去是3兆,现在是1G,增长了300倍。硬盘容量是很有意思的,存取容量增长了28万倍,这对我们来说也带来了挑战。

    所以我们说计算机迅速增长的动力有哪些呢?最上面首先有一个28万,就是我们所讲的磁存储器。我们可以把一辈子获得所有的信息在几张盘上面完全储存。第二是大家都没有考虑到的,我们可以对玻璃的纯度进一步的提升。如果我们在过去加上一些路由,会使这个时间增长,但是不管怎么样我想说的是带宽现在不再是稀缺的资源了,这种延迟的时间可以通过我们更好的设计进行改善。第三个动力是大家经常考虑到的是半导体和摩尔定律,往往大家对摩尔定律有着错误的观点,并没有说电脑越来越便宜,但是电脑确实变得越来越便宜了,但是也变得越来越热了。摩尔说,也许对于一个固定的晶片上面所放的半导体会越来越多,每过24个月会翻一倍,他本来预测的区间是未来几年,但是他的预测对于未来半个世纪都是有效的。

    接下来看一些具体的例子,已经发明出来的一些东西,今天没有带来很大的影响力,因为技术的现实还不能够大规模地采纳这些发明

    首先是虚拟内存,大家对虚拟内存这个概念都非常了解,这一台机器非常小,又非常快,有一个磁内核的内存,还有一个磁骨,我讲的这个发展是在上世纪60年代早期实现的,他们想法非常简单,把内核的内存看起来和磁骨一样大,怎么做呢?把内核分成32512磁的页(Divide  core  into  32  512—word  pages),然后映射到实际内核地址当中,同时还有一种非常初级的,他们叫做学习计划,通过学习计划决定32页当中哪一页到骨上去。这样的技术除了超级计算机以外,所有计算机都用到了。因为超级计算机不希望再增加这些内存的访问。可瑞(音译)曾经谈过真正的项目需要真正的内存,不需要虚拟内存。在你们手机当中嵌入式的系统,MP3当中嵌入式的东西也不使用虚拟内存。除了上述两样东西,所有的东西都用虚拟内存。      第二个问题是内存的一致性。一致内存这个想法是非常重要的。比方说我的程序是写,然后另外一个程序是读。读的程序是应该提取出我写的值,而不是过去的值。只要我们在一台计算机上面,如果没有缓存跑程序,这个问题实际上是在程序和IO系统、输入、输出系统当中的问题,比如往磁盘上面写了内容,写到内存当中,然后让磁盘控制器把这个信息从内存当中提出来,而对于多处理器系统而言,我们可以使这种机理发挥作用。让这样的系统用到多处理器系统当中。一开始我们发现需要比原来协议更加复杂的协议,因为不能在总线上面像以前那样传送数据了,所有用总线连接在一起的,我们需要点到点的连接,使得这样的协议复杂。后来英特尔通过以前的数学办法去进一步改进了这种协议,消除了协议过多的复杂性。

    为什么使用一致内存呢?这个问题我想了很多。实际上主要是两个可能性,首先我们要想让编程更加容易的话,对于内存有一个统一的视图的话,就更加的容易。第二个可能性,我们能够确保在很小的规模上就能够运行,而且不需要去预见在更大的规模上才有可能带进来的复杂性。其实一致内存当中跑的讯息是能够解决问题的,但是我们今天是不是能够做出这样的选择呢?因为我们看到要让一致内存的系统,特别是当中有许多处理器行得通的话确实有很大的难度,是不是今天就能做这样的选择。    第三个例子,线程和锁,这是指并发性编程,是很难做的一项工作,哪怕是最优秀的人在做,或者是失败的,或者是付出代价才取得的一点成功。当然是指单处理器的计算机,一下子加进去两个处理器。实际上基于锁的编程到今天是非常难的,单的锁保护对所有数据访问,这是可以的,但是效率是非常低下的。如果做一个精细力度的划分,这样更有可能做好。更多时候是有不确定性的,是你无法预知的。即使有人告诉你怎么样做才对,编程员仍然碰到了很多困难,而且在许多核系统的时代,程序不是说有最好的人就能写出来,我们需要有很多的编程员,而且在我们领域当中碰到很多具体实际的挑战,所以我们需要有更多的编程员,他们是超级编程员。我说了先要正确,才能说并发性。今天前面一位讲演者说了在性能和正确性之间的取舍,我认为取舍都没有,必须要正确。一个计算机程序如果带来错误的答案,没有用,不管跑得多快都没有用,所以下一次想优化的时候,是需要正确的答案还是很快就能得到的答案,如果你选更快的得到答案,那么你错了。当然还有一些备选的方案可以想让这个工作更加好做,比方说交易内存,交易内存这一块把数据库系统的一些技术拿过来,然后把数据库的技术、数据库资产的技术,一致性隔离和耐用性拿过来,在一个交易当中所有的操作,或者是在交易的末端自制发生,或者什么都不会发生。

    第四个例子是复杂CPU,这一块做一些历史的介绍。上世纪50年代、60年代我叫它做实验的年代,看到很多不同类型的CPU被创建出来,有一些只能用于像Lisp、Fortran、Algol这样的语言,还有对战机,出现了很多新的计算机架构。70年代、80年代架构围绕这两个趋势得到了整合,多多少少有一点像宗教运动,之间还打仗。首先由IBM斯坦福和伯克利主推的RISC架构,以CICS为架构,无论是RISC还是CICS,从对方阵营偷他们的想法。今天RISC已经没有什么区别了。所以到了90年代,我们现在对这些基本的架构已经有明确的认识了,所以这样一来使得ILP越来越多,就是指令的实用性,就是ILP,觉得是单线程的对战,但是现在有一些聪明的人是可以找到另外一种方式可以进行更好的实施。我们也尝试了一下,发现在这个架构的团队里面有着多种的缓存可以加快你的速度。实际上就可以预测未来的价值在什么地方可以出现。这就会使得绩效有了逐渐的改善,而且也使得复杂性极大的增加,其中一个复杂性带来很大的功率、能源消耗。很多人花了好多时间,但是研究来研究去没有好的结果。对于线性程序并没有阐述出很多的ILP,所以当时很多的工作基本上白费了。

    对于CPU未来的发展有几个可能的路线,在英特尔我们讲到叫单核云电脑,里面包括很多简单的核,没有内核的一致性,而且有着非常高效的英特尔核心网络。我们现在做的很多事情,现在电脑速度已经够快了,我经常拿的电脑,包括我做幻灯片的电脑,电池可以用13个小时,因为我放PPT的时候不用使用100瓦的功率。

    第五个例子,很多人觉得中断对于电脑是重要的,觉得中断的系统确实能够有很好的特色,中断过去是一个很好的想法,因为中断刚刚出现的时候,当时的电脑效率非常之低,而且价格很高。如果你没有这样一种中断的系统,一旦你现在的计算突然停止了,或者说你的时间到了的话,那么你是不可能进行方便的转化的。但是这已经是过去的事了,过去的电脑价格很贵,现在电脑在同一款芯片上面,你可能只需要花一块钱,所以说把这样一种空隙留在那边,没有什么问题。今天我们开始担心这样的情况,是软件,不是硬件。硬件而言,如果这个硬件没有软件,像石头一样,没有任何的作用。作为架构师需要把编程师、程序人员的工作变得简单化,我们现在可以在没有中断的情况下面建立我们系统的,比如说1972年的一个BBN  Pluribus,这样体系就使用这样的方式,对于多任务处理的时候,可以在路由器上面进行实施。

    第六个例子,可能很多人并不认同,我们管它叫做分组交换网。在过去几年我们可以看到架构以及网络的学术群体,尤其是研究机构,他们现在正在逐渐的展开合作,合作比过去进行得更多了,如果对于单个芯片里面有很多线程的话,组合起来就像网络一样。对于那些架构师却忽视了电话公司,所以需要把所有的一切进一步的合并。我们其实是有机会在整个的大型数据中心进行大的实验,但是现在做的人并不多,或者说了解的人不多,这个数据中心本身并不是英特网,甚至不是微型的英特网,可以说这边的差别是非常明显的。对于数据中心的拓扑现在是明确的,因为是我们人为的把它设定好的,各个机器的名称也是确定的,整个网络也是了解的,我们不需要这样一种新的方式进行命名,而英特网并非如此。另外整个网络也是比较少,延迟也比较短,因为数据中心可能从一个地方到另外一个地方就几百米,而且它的节点更少,大概是几万条节点,不是几亿点。

    同时对于各种各样的连接也可以增加流程,现在仍然可以做到。对于英特网协议不满意的,就是它使用损失来评估拥挤,其实损失和拥挤是两回事,应该通过不同方式处理。在过去损失是可以接受的,损失可能是拥挤带来的,因为整个网络规模比较小,比较拥挤再次传输是可以实现的。对于世界上每一个设备确定一个地址,在当时并不是一个问题,因为当时的设备比较少,分配的地址也不多,但是随着网络,就像CPU一样发展得越来越快,网络也是越来越快、越来越可靠,给我们带来很多问题。随着速度越来越快,发现犯的错误越来越少,与此同时交换以及路由需要很大的内存作为缓存,可以说路由器里面包括的缓存越来越多,一般来说没有得到良好的应用,一旦有拥挤,就会出现一种延迟,制造商会说我的路由器在400纳秒就可以实现,他说得没错,如果出现拥挤整个服务就没有办法保证它的质量。为什么呢?因为在每一个交换器上面的路由都是非常复杂的,必须加一个处理器。所以你现在所购买的路由器里面其实里面包括很多的内存地也包括几千个微型的电脑。在未来,如果网络连接速度越来越快,会带来巨大的问题,因为现在没有足够的时间关注每个分包、每个分组。    最后讲几点,其实前面也提到了,今天的系统和过去是完全不一样了,和过去50年完全不一样了。根据我们现在所面对的现实,我们现在可以说是既有机会,也有一种必要性。我们需要重新的考虑过去做的一些决策,可以把过去的决策以另外的方式实现,我们需要一种新的创新,对于过去的做法重新来分析一下,因为现在电脑并没有能够完成我们所需要做的所有事情,因此仍然有很多挑战。在这样的演讲中,我很难不讲到巨大的挑战,我只是把未来的挑战列了下来。第一个挑战就是电脑可以帮我开车,甚至开得比我还好,不至于说开车撞到右边,把车也撞坏了。我也希望我的电脑能够更好的了解我本人,现在的电脑就像是我的奴隶一样,对于我他们没有任何的信息不了解,我希望我的信息能够了解我的喜好,像我的同事,而不是我的奴隶。希望我的电脑能够帮助教育我的孙子,比如说电脑在教育方面起到很好的作用,它说的有道理,但不全对。

    计算机所做的事情是使得这种文本变成了动画。我们想想文本处理器是什么呢?就是打字机。最开始发明列表或者图表的人,他其实是知道图表有很大的作用,今天我们仍然面临很多新的挑战,就是用电脑做那些不是那么容易自动化的事情。但是如果解决了今天的问题,未来会有新的问题出现,这些新的问题会要求有新的程序,这些新的程序也会需要有新的计算机架构,未来会有很多的挑战存在。像和学生交流的时候,我通常会说非常羡慕各位,因为各位在学习计算机的时候现在已经到了反思的时刻,现在你们可以有机会帮助我们改变未来,就像是电脑改变过去50年代那样。所以我是特别羡慕大家,也祝大家在未来一切顺利。谢谢各位!

    点击观看Chuck Thacker精彩演讲视频