内存子系统部分是Nehalem-EX中误会较多的地方。Nehalem-EX的HA0/HA1分别连接到MC0/MC1,一共两个内存控制器,普通的Nehalem处理器只有一个内存控制器。每个内存控制器提供一个SMI(Scalable Memory Interface),每个SMI界面提供了两个SMI Link,又称SMI Channel,它们可以运行于Lockstep模式(普通的Nehalem处理器也提供了这种模式)以提升性能和增强RAS。每个Nehalem-EX就提供了4个SMI Link。注意SMI Link和SMI本身的区别。
SMI Link看起来并不是一个串行界面(笔者之前的做法看起来并不正确)。SMI Link各方面和QPI Link都很像,例如它的传输速率是6.4GT/s,从这点来看它也不应该是串行总线,QPI也不是串行总线。然而,SMI Links的带宽还是个谜,因为它的位宽并不清楚,Intel没有公布这个数据。
Nehalem-EX:2MC/2SMI、4SMI Link/4SMB、8 Memory Channel、16 DIMM、256GB
SMI Link需要连接到一个叫做Scalable Memory Buffer(SMB)的芯片才能联接到并行的DIMM上(久远的Pentium 4使用的RIMM则本身是串行的),因此这让人联想到SMI是串行的,不过从其6.4GT/s的速率来看,不太像。SMB这个名字听起来和以前FBD内存上的AMB芯片很相似,AMB用来将内存管理器的串行界面转换为内存条的并行界面。在Nehalem-EX上,这个SMB可以集成在主板上而不是集成在内存条上,兼容性远非FBD架构可比。用于Nehalem-EX平台的SMB芯片还有一个开发代号(Code Name),叫做Mill Brook 1。
每个SMI Link支持两个SMB芯片,每个SMB芯片支持两个DDR3内存通道,每个内存通道最多支持2个DIMM,这样一个Nehalem-EX处理器就能提供最多8个内存通道、16个DIMM、256GB的内存容量支持。Nehalem-EX特别的地方是支持16GB的单条内存,其它Nehalem处理器只能支持8GB单条内存。Westmere-EP支持单条16GB内存。Nehalem-EX支持8个内存通道,这确实和通常想象的不太一样。很多人曾以为它支持的是4个内存通道。
目前,Nehalem-EX只支持R-ECC DDR3 1066规格,这会限制其内存带宽。Intel表示其未来可以支持到R-ECC DDR3 1333规格(和通常的Nehalem-EP不同,Nehalem-EX不支持普通的不带R、ECC的内存)。
上图上,本地内存访问延迟约是108ns,距离一跳的远程内存访问延迟约是161ns,比使用DDR3 1333的Nehalem-EP/Westmere-EP要高,即使是Nehalem-EX以后达到DDR3 1333的规格下也应该差不多。这是使用了SMI和SMB的代价,作为交换,Nehalem-EX获得了增强的内存RAS特性,以及更高的带宽和更大的容量支持。
如表所示,Nehalem-EX的内存带宽只是Westmere-EP的1.15倍么?
从本页的第二幅图的数字来看,每个处理器的峰值内存带宽是约26GB/s,每个内存控制器的带宽是13GB/s(或许准确的是12.8GB/s?),理论上,8个DDR3-1066通道提供的带宽应该是66.7GB/s,理论和现实总是有一些距离,或许原因出在SMI Link上。在IDF2009给出的文档上,26GB/s这个数字被换成了50GB/s。