本节书摘来自异步社区《思科UCS服务器统一计算》一书中的第2章,第2.1节,作者 【美】Silvano Gai , Tommi Salli , Roger Andersson,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.1 处理器的演变
思科UCS服务器统一计算
现代处理器或*处理器(Central Processing Unit,CPU)都采用了最新的硅技术,一个晶片(包含一个处理器的半导体材料块)上有数百万个晶体管和数兆内存。
多个晶片焊接到一起就形成了一个硅片(硅晶圆),每个晶片都是独立切块、测试和用陶瓷封装的。这个过程包括安装晶片、将晶片衬垫连接到陶瓷封装的插脚上,然后密封晶片。至此,封装好的处理器就可以上市并在服务器上安装它们了。图2-1显示了封装好的Intel Xeon 5500处理器。
2.1.1 插槽
处理器是使用称为“插槽”的装配/互联结构安装到主板上的。图2-2显示了用于Intel处理器的插槽。用户可根据自己的需要,安装不同时钟频率和功耗的处理器到服务器主板。
服务器主板上插槽的数量决定了可安装的处理器数量。最初,服务器都只有一个插槽,但最近,为了提高服务器的性能,市场上已经出现了包含2个、4个和8个插槽的服务器。
在处理器架构的演变过程中,在很长一段时间里,性能的改善都与提高时钟频率紧密相关。时钟频率越高,完成一次计算需要的时间就越短,因此性能就越高。
随着时钟频率接近几个GHz,处理器的物理材料明显限制了时钟频率的进一步提高,因此必须找出提高性能的替代方法。
2.1.2 核心
晶体管尺寸不断缩小(Nehalem使用45nm技术,Westmere使用32nm技术),可以在单块晶片上集成数百万个晶体管。利用这个优势,可在一块晶片上多次复制基本的CPU(核心)。
现在市场上多核处理器(参见图2-3)已经随处可见,每个处理器(即插槽)包含多个CPU核心(通常是2、4、6或8个),每个核心都与一级缓存(L1)关联。缓存是用于减少访问主内存平均时间的小型快速内存。通常,所有的核心会共享一个较大的二级(L2)或三级缓存(L3)、总线接口和外部晶片连接。
在现代服务器中,核心的数量等于插槽数量与每个插槽核心数量的乘积。例如,基于Intel Xeon处理器5500系列(Nehalem-EP)的服务器通常使用两个插槽,每个插槽四个核心,总共八个核心。对于Intel Xeon7500系列(Nehalem-EX),服务器通常包含8个插槽,每个插槽8个核心,总共可容纳64个核心。
图2-4显示了更详细的双核处理器视图。CPU的主要组件(指令提取、解码和执行)都被复制,但访问系统总线是公用的。
2.1.3 线程
为了更好地理解多核架构的含义,我们先看一下程序是如何执行的。服务器会运行一个内核(比如Linux、Windows)和多个进程。每个进程可进一步细分为“线程”。线程是分配给核心的最小工作单元,一个线程需要在一个核心上执行,不能进一步分割到多个核心上执行(参见图2-5)。
进程可以是单线程也可以是多线程的。单线程进程同一时间只能在一个核心上执行,其性能取决于核心本身。多线程进程同一时间可在多个核心上执行,因此它的性能就超越了单一核心上的性能表现。
由于许多应用程序都是单线程的,因此在多进程环境中多插槽、多核心架构通常会带来方便。在虚拟化环境中,这个道理一样正确,Hypervisor允许在一台物理服务器上整合多个逻辑服务器,创建一个多进程和多线程的环境。
2.1.4 Intel超线程技术
虽然线程不能再拆分到两个核心上运行,但有些现代处理器允许同一时间在同一核心上运行两个线程。每个核心有多个可并行工作的执行单元,很难看到单个线程能让所有资源繁忙起来。
图2-6展示了Intel超线程技术的工作方式。同一时间在同一核心上执行两个线程,它们使用不同的资源,因此提高了吞吐量。
2.1.5 前端总线
在存在多插槽和多核心的情况下,理解如何访问内存以及两个不同核心之间是如何通信的非常重要。
图2-7显示了过去许多Intel处理器使用的架构,被称为前端总线(Front-Side Bus,FSB)。在FSB架构中,所有流量都是通过一个单一的、共享的双向总线发送的。在现代处理器中,64位宽的总线以4倍的总线时钟速度运行。在某些产品中,FSB信息传输速率已经达到1.6GT/s(12.8GB/s)。
FSB将所有处理器连接到芯片组的叫做北桥(也称为MCH,内存控制器中枢)。北桥连接所有处理器共享访问的内存。
这种架构的优点是,每个处理器都可以访问系统中其他所有处理器可以访问的所有内存。每个处理器都实现了缓存一致性算法,从而使其内部缓存与外部内存,以及其他所有处理器的缓存保持同步。
但以这种方式设计的平台要争夺共享的总线资源。随着总线上信号传输速度的加快,要连接新设备就变得越来越困难了。此外,随着处理器和芯片组性能的提升,FSB上的流量也会随之上升。由于总线是共享资源,因此这会导致FSB变得拥挤不堪,成为瓶颈。
2.1.6 双独立总线(DIB)
为了进一步提高带宽,单一共享总线演变成了双独立总线(Dual Independent Bus,DIB)架构,如图2-8所示,可用带宽基本上提高了一倍。
但在双独立总线架构中,缓存一致性流量必须广播到两条总线上,从而减少了总有效带宽。为了缓解这个问题,在芯片组中引入了“探听过滤器(snoop filter)”来减少带宽负载。
如果缓存未被命中,最初的处理器会向FSB发出一个探听命令。探听过滤器拦截探听,确定是否需要将其传递给其他FSB。如果同一FSB上的其他处理器能满足读取请求,就会取消探听过滤器访问。如果同一FSB上其他处理器不满足读取请求,探听过滤器就会确定下一步的行动。如果读取请求忽略了探听过滤器,则会直接从内存返回数据。如果探听过滤器表示请求的目标缓存行在其他FSB上存在,它将向其他部分反映探听情况。如果其他部分仍然具有缓存行,就会将请求路由到该FSB。如果其他部分不再有目标缓存行,数据还是直接从内存返回。因为协议不支持写请求,所以必须始终将写请求传送到上述具有缓存行副本的所有FSB上。
2.1.7 专用高速互联
在双独立总线之后又出现了如图2-9所示的专用高速互联(Dedicated High-Speed Interconnect,DHSI)。
基于DHSI的平台使用4个独立的FSB,每个处理器各使用一个FSB。引入探听过滤器实现了更好的带宽扩展。
FSB本身没有多大变化,只是现在变成点对点的配置了。
使用这种方法设计的平台仍然需要应对快速FSB上电子信号传输的挑战,DHSI也增加了芯片组上的针脚数量,需要扩展PCB路线,才能为所有FSB建立好连接。
2.1.8 Intel QuickPath互联
随着Intel酷睿i7处理器的引入,许多Intel产品已经采用了一种新的系统架构。这就是著名的Intel QuickPath互联(Intel QuickPath Interconnect,QPI)。这个架构使用了多个高速单向链接,将处理器和芯片组互联。使用这种架构,使我们认识到了:
多插槽和多核心共用的内存控制器是一个瓶颈;
引入多个分布式内存控制器将最符合多核处理器的内存需求;
在大多数情况下,在处理器中集成内存控制器有助于提升性能;
提供有效的方法来处理多插槽系统的一致性问题,对大规模系统至关重要。
图2-10显示了一个多核处理器,集成了内存控制器和多个链接到其他系统资源的Intel QPI的功能示意图。
在这个架构中,插槽中的所有核心共享一个可能具有多个内存接口(也就是内存总线)的集成内存控制器(Integrated Memory Controller,IMC)。
IMC可能具有不同的外部连接。
DDR 3内存通道:在这种情况下,DDR 3 DIMM(参见下一节)直接连接到插槽,如图2-12所示。Nehalem-EP(Xeon 5500)和Westmere-EP(Xeon 5600)使用了这种架构。
高速串行内存通道:如图2-11所示。在这种情况下,外部芯片(可扩展内存缓存,Scalable Memory Buffer)创建DDR 3内存通道,DDR 3 DIMM通过这些通道连接。Nehalem-EX(Xeon 7500)使用了这种架构。
不同插槽中的IMC和核心使用Intel QPI相互通信。
实现了Intel QPI的处理器也可以完全访问其他处理器的内存,同时还保持缓存的一致性。这个架构也称为“缓存一致性非统一内存架构(Non-Uniform Memory Architecture,NUMA)”——也就是,内存互联系统保证内存和所有可能缓存的副本始终保持一致。
Intel QPI是一个点对点的互联和消息传递方案,它使用点对点的差动电流信号传输模式。在当前的实现中,每个链接由每个方向最高速度可达25.6 GB/s或6.4 GT/s的20条线路组成(参见本章的“平台架构”部分)。
Intel QPI使用点对点的链接,因此在插槽中需要一个内部交叉路由器(参见图2-10),以提供全局内存访问。这种路由直通能力使得不需要完整的连接拓扑结构就可以构建系统。
图2-12显示了四插槽的Intel Nehalem-EX配置,每个处理器有4个QPI,并与其他3个处理器和Boxboro-EX芯片组互联(还有SMB组件,但是没有显示)。