大型/HPC系统设计要点和最终思路
大型系统和TLP
计算机集群和大型SMP(对称多处理器)系统之间的区别的确很难确定,而且将来确定这种区别也不容易。一台“大型机器”的说法确实没有准确地表达其真正的含义,因为从应用程序的角度看,一个刀片式服务器系统与一些1U服务器是一样的。SMP这个词汇最近有些显得多余,但是,这个词汇的基本意思是:相同的并且都能够直接硬件访问所有的物理主内存和I/O的一组处理器。对于软件开发人员来说,这是一种最简单的模式。大型SMP系统不采用一个计算机主板而是采用很多“CPU/内存”主板,这种主板一般都配置4个处理器芯片。后面的要点就是不同的“CPU/内存”主板之间如何相互通信。由于有很多数据库应用程序在大型SMP系统上运行,大约50%的主内存需求是向远程“CPU/内存”主板提出来的,即使有数据布局优化也是如此。这是一种海量的通信,确实需要一种定制的硬件解决方案--“背板”。以太网的速度大约慢100倍。甚至Infiniband也不能处理那个通信量,仅管Infiniband有更好的延迟和带宽并且需要较少的操作系统的额外开销。
大多数HPC程序具有更多的本地性,因此,远程内存的需求要少得多,所以更容易升级。但是,这种程序需要更多地按照用户的需求进行开发,以便使软件算法具有更多的本地性。很多大型HPC项目的成本并不是硬件成本而是软件开发的成本。换句话说,“大型计算机对计算机集群”更像是“昂贵的硬件对昂贵的软件”。
总的来说,我的论点是高度TLP优化的处理器将得到更多的处理逻辑电路和较少的缓存,显著提高内存带宽的需求。然而,对于大型系统来说,情况也许不是这样,因为CPU/内存主板之间的带宽需求已经很大了。除非使用激进的新技术,否则很难把整个系统的带宽提高到每个处理器带宽的同样水平。因此,在大型系统中很可能使用大容量缓存以减少带宽的需求。
目前,大多数处理器都有一个单独的缓存(在芯片上的缓存或者直接附加的缓存)。然而,对于大型系统来说,最好是在芯片组中配置大容量缓存,专门用于减少远程内存的需求。对于本地内存访问来说,处理器的延迟敏感度要差一些,并且应该有较大的带宽,从而减少本地内存缓存的需求。这将使设计适用于小型系统和大型系统的处理器更加容易。
那么,这些远程数据的共享缓存容量应该有多大呢?这将取决于系统有多大的带宽、处理器的速度有多快、处理器的最大数量、系统需要有多大的伸缩性以及需要有多大的可升级性。最后一点是非常重要的,因为大型系统至少要在生产中使用五年时间,与低端系统相比,用户更愿意升级大型系统。考虑到很高的开发和测试成本,使用寿命越长越好。一个有帮助的方法是一开始就拥有大量的系统带宽,减少对大型远程缓存的需求,并且随着速度更快的处理器的推出迅速增加缓存容量。这些大型系统还将做好充分的准备以便配置更大容量的缓存。到2010年,看到1GB缓存我也不会感到意外。
正如上述例子介绍的那样,使用多芯片模块会使生产更加简单,大型缓存将成为多芯片模块的一部分。更高端的系统可以应用更高级的封装技术,也许每个多芯片模块可以配置几个高速处理器芯片,并且让每个“CPU/内存板”只配置一个这种多芯片模块可能是最佳的选择,如下图所示。

用于高端服务器的大型多芯片模块
对于在大型系统上运行的商业应用程序来说,主内存延迟是影响目前的可伸缩性的头号问题。在大型系统中解决这个问题是特别困难的,因为延迟主要是由元件之间的距离引起的,大型系统的各个元件之间的距离较大。目前的大型系统的伸缩性都非常好,但是,价格也非常昂贵。为采用大量TLP优化的处理器设计的大型系统的每个处理器(或者CPU/内存主板)的价格也不会很便宜,但是,速度会更快。




