Intel的竞争对手早在2005年发布的K8处理器中就集成了内存控制器,但是Intel认为在CPU中集成内存控制器为时尚早, 坚持将内存控制器集成在北桥中,通过前端总线访问内存控制器。一时间,究竟是内置内存控制器更好还是外置内存控制器更优秀成为大家在对比AMD和Intel产品时广泛争论的热点。
从设计角度讲,内置内存控制器可以获得对内存访问更低的延迟,有助于提升实际应用时的存储带宽;同时内置内存控制器将使得主板的设计更加简单,有利于降低系统整体成本。但是内置内存控制器同样也带来一些问题。首先是处理器封装的问题。内置内存控制器需要更多的针脚与内存互联,如何在很小的PAD上摆放这么多接口信号,并外联到PIN就是一个问题。然后是处理器的性能。内置内存控制器必然会带来处理器布局布线的困难,同时在运行时内存控制器也必然会产生热量,如果Intel在早先Netburst微架构中集成内存控制器,那么处理器的功耗将非常恐怖,也会影响处理器的热设计以及性能提升。第三个方面是灵活性。如果集成内存控制器,那么将限定只能使用内存控制器支持的内存,如果需要支持其他类型的内存则需要对处理器进行重新设计。所以虽然集成内存控制器是发展的趋势,但是在什么时候集成内存控制器,更多的成为一种设计取舍时的感觉而非明确的优劣参考。
Nehalem中内置了内存控制器
如今,Intel终于认为时机已经成熟,在Nehalem中弃用了前端总线,并且将内存控制器集成在CPU中。内存控制器被设计在非核心部分,可以针对不同的应用领域更换甚至省略,增强了灵活性。并且,为了表示技术上领先于竞争对手,Nehalem中的内存控制器具有三个通道,支持三通道DDR3 1333内存。对于三条通道全部启用的情况下,内存带宽将高达32GB/s。对此,AMD表示Intel是追随AMD的创新,学习AMD的做法。笔者个人对此不以为然。在芯片中集成内存控制器并不是近些年来才出现的技术创新,早在上世纪,很多面对嵌入式系统的微处理器中就集成了内存控制器。从技术上来说,集成内存控制器对于Intel这种芯片巨头只是小菜一碟。但是什么时间在片内集成内存控制器,才是需要谨慎考虑的,这是一种设计时的折衷,更是一种设计哲学与态度。
Intel内置内存控制器后,内存控制器的性能表现成为大家关注的焦点。很遗憾Intel并没有给出Nehalem中内存控制器一些重要的设计规格,例如内存控制器的延迟、与三级高速缓存连接的位宽等等。我们在后续测试中,将尽可能的为大家揭晓Nehalem内存控制器的表现。
Nehalem中的另一个重要改变是取消了沿用多年的前端总线FSB,转而支持QPI(QuickPath Interconnect)进行系统间互联。在之前的设计中,FSB一直是基于Intel架构的系统中的瓶颈所在。即便当前FSB的频率已经可以高达1600MHz,其带宽也只有12.8GB/s。而对于只采用一条FSB总线的多处理器系统而言,系统间互联和可可扩展性无疑很差。与传统的总线不一样的是,QPI是一种点对点的传输协议,也就是QPI只能挂接两个设备。对于多处理器系统而言,需要多条QPI进行数个芯片间的互联。相对于传统的总线方式,QPI提高了系统的整体成本,却可以大大提升系统互联速度,以及平台的可扩展性。
QPI是一种基于包传输的串行式高速点对点连接协议,采用差分信号与专门的时钟进行传输。在延迟方面,QPI与FSB几乎相同,却可以提升更高的访问带宽。一组QPI具有具有20条数据传输线,以及发送(TX)和接收方(RX)的时钟信号。一个QPI数据包包含80位,需要两个时钟周期或四次传输完成整个数据包的传送(QPI的时钟信号速率是传输速率的一半)。在每次传输的20bit数据中,有16bit是真实有效的数据,其余四位用于循环冗余校验,以提高系统的可靠性。这样子,每个QPI总线单向传输的带宽为每次传输的有效数据×每秒传输次数=102.4Gb/s=12.8GB/s。由于QPI是双向的,在发送的同时也可以接收另一端传输来的数据,因此一组QPI的总带宽为25.6GB/s。QPI同样是非核心的一部分。这说明Intel可以比较灵活的修改处理器中集成的QPI的数量。在针对多路服务器的系统中,可能在CPU中集成四组甚至更多QPI;在针对双路处理器的系统中,将集成两组QPI;而在针对高端桌面平台的Nehalem处理器中,只包含一组QPI。需要特别说明的是,QPI只是Intel用来实现多处理器间互联、以及处理器与芯片组间互联的系统连接协议,而并非一种I/O接口。在I/O接口方面,例如显卡以及其他一些外设,Intel仍然采用PCI-Express来处理I/O通讯问题。
研发代号为Dunnington的Xeon MP处理器,每芯片集成6核心
需要注意的是,QPI取代FSB虽然对桌面用户有一些帮助,但是最大的提升还是在科学计算等需要海量数据处理的领域。由于基于FSB的系统受限于系统互联,系统可扩展性较差。例如Xeon MP在8路以上就会出现性能损失,基于4路/24核/24线程Xeon E7450 的系统SPECint_rate和SPECfp_rate得分只有243分和139分,而基于IBM Power 6处理器的Power 595系统则在32路的情况下依然保持非常良好的可扩展性(包含32路/64核/128线程,每个CPU为5.0GHz Power6的Power 595系统SPECint_base和SPECfp_rate分值分别为2080分和2110分)。从另外一个角度看,TPC-C目前最高的系统为32路/64核/128线程的Power 595系统,其得分为超过6百万分,而Intel自家的系统得分最高的是64路/128核/256线程的基于1.6GHz 24MB L3 Itanium2的HP Integrity Superdome系统,其TPC-C分值只有400万分。目前从Intel取消前端总线而采用QPI,同时QPI具有循环冗余校验功能来看,Intel可能很想凭借基于Nehalem微架构的处理器组成具有更高可扩展性和更高可靠性的系统,来在小型机和高端服务器领域取得一些突破。
随着内存控制器的内置和QPI的诞生,包含Nehalem处理器的系统中对内存的访问也和之前不太一样。在之前我们所见到的Xeon系统中,往往是用多路处理器共享内存和总线的方式进行互联,任意处理器访问任意内存的延迟都是一样的,也就是所说的SMP(对称多处理)。SMP是一种UMA(一致内存访问)模式的一种实现。而在基于Nehalem的系统中支持的是NUMA(非一致内存访问)的存储技术。也就是每个处理器具有自己的本地内存,同时也可以访问其他处理器的远程内存,访问本地内存和远程内存的延迟不相等。在访问本地内存时,CPU向本地内存发出访问请求,并侦听其他CPU以检查数据是否存在。本地内存访问返回数据,而远程CPU返回侦听响应。对本地内存的访问延迟即为两者中的较大值。Intel对本地内存访问进行了优化,使得远程侦测访问时间和访问内存的时间差异不会太大,以免造成瓶颈。
对远程内存的访问就要复杂一些。CPU通过QPI先向远程CPU发起访问请求,远程CPU的内置内存控制器发起自己的内存访问,内存的数据返回到远程CPU的三级缓存中,远程CPU再通过QPI将数据返回。由于QPI延迟不高,内置的内存控制器延迟也很小,因此即便对远程内存访问,整体的访问延迟仍然会保持在一个较好的水平。