锐龙背后的功臣 AMD Zeppelin多核心架构和封装系统解读
- 来源:微型计算机 smarty:if $article.tag?>
- 关键字:锐龙,AMD,架构,封装系统 smarty:/if?>
- 发布时间:2018-07-20 15:54
AMD的Zen架构可谓大获成功,除了桌面版本的8核心产品外,AMD还推出了面向服务器市场的更多核心产品,包括16、32核心的处理器。对超多核心处理器产品而言,如何保证处理器多核心之间的通讯和同步,一直是一个非常重要的问题。那么,在AMD的Zen家族产品上又是如何解决这个问题的呢?其所采用的AMD Zeppelin核心又有哪些特点呢?
AMD Zen架构可谓AMD近年来最具革命性的架构之一。Zen架构不仅仅在性能上让AMD重获新生,并且带来了大量独特的设计和全新的特性,其中很重要的一点就是互联性能。实际上,Zen架构早在设计之初,就已经考虑了不同场景下的应用需求:一方面是主流的处理器,拥有4~8个核心;另一方面是企业客户和服务器市场,需要多达20~30个处理器核心。面对这样完全不同的需求,AMD需要在技术上做出特殊设计。鉴于此,AMD最终拿出的方案是“Zeppelin”核心,也就是中文被称为“齐柏林”的核心。这款核心的特殊设计,可以让AMD能够满足不同的用户,包括桌面的锐龙处理器、服务器的EPYC以及随后才推出的、面向HEDT市场的锐龙Threadripper。
总览布局—Zeppelin的功能结构
一个完整的Zeppelin核心如图所示。从图中可以看出,一个Zeppelin核心中拥有2个CCX核心,2个IFIS/PCIe核心、4个IFOP核心以及1个DDR4内存控制器。具体一些来看,Zeppelin核心的单个PCIe控制器有16个PCIe3.0通道,两个总计就是32个通道,另外这些PCIe控制器都支持AMD自家的Infinity Fabric InterSocket(IFIS)协议。在内存控制器方面,Zeppelin拥有一个双通道DDR4内存控制器,支持ECC校验,每通道最高支持256GiB内存,支持如此巨大的内存容量主要是考虑到企业级用户的需求。接下来则是最重要的部分,为保证同一个衬底上不同核心之间的通信需求,AMD还在Zeppelin上设计了4个Infinity Fabric On-Package(IFOP),也正是由于这些接口,使得AMD能够在保证处理器内部核心通讯性能的情况下,通过搭积木的方式,灵活使用不同数量的Zeppelin核心来实现不同核心数量的CPU,并面向不同的市场。另外,Zeppelin核心上也存在一些常规的设计,比如4个USB 3.1接口控制器,以及南桥控制器等。AMD称南桥控制器为服务器控制器中枢(SCH),SCH支持所有的低速接口,包括SPI、LPC、UART、I2C和SMBus,SCH还包括实时时钟部分。
SDF和SCF—Infinity Fabric的内部结构
Zeppelin在核心架构上的一大创举就是被称为“Infinity Fabric”(无限平铺)的总线方案了,这个总线方案堪称整个Zen架构的核心。俗话说“要想富先修路”,AMD这次就修了一条这样的高速道路,并用其“无限”扩展自己的产品。根据AMD的资料来看,Infinity Fabric实际上被分成2个部分,分别是可扩展数据结构SDF和可扩展控制结构SCF,本文的重点将集中在SDF部分。
根据现有资料,SDF部分的组成结构还是比较复杂的。如本页右上的图片,该图展示了SDF的部分细节,为了更清楚地显示SDF和内部通讯部分的连接,图片中的比例做出了调整,两个CCX被大幅度缩小了体积,SDF和其他接口被画的更大了一些。从图中可以看出,两个CCX有单独的通道就是Cache-Coherent Master(CCM)直连SDF,CCM的主要作用是核心之间数据的贯穿连接,一个Zeppelin上的两个CCX通过SDF和CCM直接进行通讯。在功能单元方面,DDR4内存控制器通过统一内存控制器也就是UMC连接至SDF平台,两个DDR4内存通道占据了2个UMC接口。在I/O个和各种接口连接部分,AMD设计了名为IOMS的接口,用于直接连接I/OHub。I/OHub同时提供了2个PCIe控制器、1个SATA控制器、USB、SCH(南桥)等接口。
在这些常见接口之外,AMD多芯片架构的主力是被称为Coherent AMD socKet Extender(CAKE)的模块,这个模块的作用是将本地的SDF请求编码为单个数据包,每个周期通过任意的SerDes(串行收发器)发送出去。AMD总共设计了6个CAKE接口,其中4个用于连接IFOP、2个用于IFIS。值得一提的是,IFIS的CAKE接口实际上和PCIe接口复用,其中一个端口甚至提供了MUX控制器,有关这部分内容下文还有更详细的叙述。
在频率控制方面,所有的SDF组件都以内存DRAM的频率作为基准运行,比如使用DDR4 2133的内存时,SDF的频率将运行在1066MHz,这种设计是AMD为了消除交叉延迟而做出的基本设计。
在了解基本结构后,本文还给出了另一张重新绘制后的图片。这张图片相比上一张图片能够更清晰地展示SDF连接情况,接下来,本文还将进一步探讨SDF的内部设计内容。
TIPS:小知识:CAKE 的数据传输
Infinity可扩展数据结构和SerDes之间的接口是CAKE,它接收数据传输请求并将其编码为128bit的数据包,然后通过任一的SerDes也就是串行解串器进行发送,CAKE也将解码回复给SDF。和附加到SDF的所有部分一样的是,CAKE以内存的MEMCLK频率工作,以消除交叉延迟。由于封装上链路的性能敏感性,IFOP链路相对于DDR4其带宽大约是后者的2倍,IFOP SerDes的每个CAEK每时钟周期执行4次传输,而IFIS SerDes则执行高达8次。
聪明而复杂的设计—可扩展数据结构
SDF Trasnsport Layer
从本页左下的SDF结构设计简图可以看到,位于图中央被称为SDFTrasnsportLayer的部分是SDF的数据中转中心,周围的包括CCX、内存、I/OHub、IFIS/IFOP等单元都通过各自不同的方式转接至SDF Trasnsport Layer。
具体来看,SDF Trasnsport Layer周围的CCM、IMOS、CAKE、UMC和上文介绍的内容一样,分别为CCX、I/O Hub、IFIS/IFOP以及内存提供了数据转接。之所以需要转接,是因为各个接口的数据结构不同,需要通过转接器将其转换为SDF Trasnsport Layer可以处理和传输的格式。另外,IOMS和CCM是唯一能够发出DR AM请求的接口。与此相应的,CAKE的功能则是双向转换,因为IFIS/IFOP的数据格式是串行,CAKE可以将串行转换为SDF TrasnsportLayer使用的格式,反之亦然。
数据本地访问
在本地访问的情况下,CCX核心的数据请求将通过CCX发出,经过CCM、通过SDF Trasnsport Layer后,再传输至UMC和本地DR AM通道。所读取的数据将通过相反的顺序沿着相似的路径回到CCX。根据AMD的数据,CPU频率为2.4GHz、DDR4 2666 19-19-19内存(即MEMCLK为1333MHz)数据的往返时间大约为90ns。
数据非本地访问
除了数据本地访问外,还有数据非本地访问的情况。这种情况多发生在HEDT平台的锐龙Threadripper以及面向服务器的EPYC上。简而言之,非本地访问就是指一个衬底上有多个Zeppelin核心,不同Zeppelin之间的存储器数据访问。在这种情况下,存储器访问可能必须被路由到相邻的Zeppelin核心,在这个过程中,无论路线如何,其基本路径总是相似的。
在数据非本地访问中,本地核心请求通过CC X发出,通过CCM和经过编码的CAKE模块进行路由后,通过SerDes(IF IS接口)再将其发送到远程核心的CAKE模块,远程核心的CAKE模块进行解码后将其发送到适当的UMC,再转给相关DRAM通道,然后在内存中进行查找。该响应以相反的顺序,将查找到的数据返回请求源。根据AMD的数据,在双向多处理器配置中,即CPU频率为2.4GHz、DDR4 2666 19-19-19内存(即MEMCLK为1333MHz),同一个封装中的裸片数据往返大约需要145ns,在不同封装中的裸片数据往返时间大约需要200ns。在最差的情况下,也就是最长的路径,那就是请求从第一个处理器的某个CCX发出,需要跨接口去另一个处理器的查找,恰巧又并非直达核心,需要经过另一个处理器同一个衬底的核心转接,这样相当于一次数据查找跨越了3个核心。不过AMD没有报告在这种情况下的数据延迟,一般来说发生的可能性也微乎其微。
理论上来说,等待的时间差异取决于访问的SerDes类型。值得一提的是,在多核心的复合产品中,AMD使用“智能预取”技术极大地减轻了连接到远程芯片的内存请求延迟。
I/O子系统设计解读
再来看看有关I/O部分。在之前的图片中,有关I/O部分即IFIS/PCIe的接口位于整个模块的左上角和右下角,这两个模块都拥有一组PCIe 3.0x16的高速通道,并且和Infinity Fabric InterSocket控制器(IFIS)实现了复用。此外,右下角的链路也和SATA控制器实现了复用。
所谓复用,是指整个链路可以根据不同的用途选择不同的传输方案。比如在多核心或者单一衬底的多芯片封装中,核心或者芯片之间的数据传输要求使用Infi nity Fabric,那么所有的16个链路都将转为Infinity Fabric通道;如果选择的是PCIe方案,则16个链路又可以转为PCIe 3.0 x16。不仅如此,在SATA控制器上也是如此,最多可以选择8个链路用于SATA通道。需要注意的是,AMD也允许用户选择混和链路,也就是说SATA端口选择完成后,剩余的通道依旧可以用作PCIe或者其他。
除了PCIe、SATA外,虽然AMD在发布EYPC和Ryzen Embedded的部分处理器时没有说明,但实际上这些链路还可以作为以太网链路使用,比如可以配置为支持8个SATA和最多4个10GbE的以太网端口,或者和PCIe进行复用。AMD表示,为支持这些功能而添加的多路复用功能只给对延迟非常敏感的Infinity Fabric增加了大约一个时钟的延迟,几乎微乎其微。
三种规格—封装和接口浅析
在了解了Zeppelin有关连接和总线的相关内容后,接下来本文将讨论一下Zeppelin的封装和接口的内容。Zeppelin在封装和接口方面经过了精心的设计,并且对封装布线和成本进行了优化。Zeppelin的设计将面向所有的市场,包括服务器、桌面和HEDT。对于服务器市场而言,AMD设计了一款使用4个Zeppelin核心的多芯片模块,并为该模块设计了一个名为SP4的新服务器插座接口。对于高端桌面市场也就是HEDT而言,AMD设计了一款采用2个Zeppelin核心的多芯片模块,采用的是一种新的HEDT插座,名为sTR4(SocketTR4)。对于台式机上,Zeppelin单颗核心就可以满足需求,采用的接口则是比较传统的AM4。需要注意的是,虽然sTR4和SP3封装相似,但是两者的电气特性完全不同,内部结构也有所差异,因此不能互相换用,互不兼容。
在封装方面,AMD采用了新的倒装芯片封装,这意味着芯片的I/O面将直接朝向基板,这样做在技术上难度较高一些,但是可以大幅度降低芯片封装尺寸,并且在散热、电气性能上有更好的表现。接下来我们依次了解一下AMD的各种接口和封装。
SP3接口和相关芯片封装
SP3接口和相应封装的成品有8个DDR4通道和128个PCIe3.0通道,配置了最多4个Zeppelin核心。SP3封装采用的LGA方式,拥有4094个触点,尺寸为58mm×75mm。这个接口和封装设计是面向单路、双路服务器使用的。
AMD还给出了SP3封装的电源特性。SP3最多支持高达300A的电流和200W的TDP,还有大约300uF的封装电容。SP3封装的问题是有关DDR4通道的路由问题。解决方法是将通道放置在芯片的左下角以便所有的DDR通道都面向封装的左右边缘。请注意,为了解决这个问题,Zeppelin的两个核心被旋转了180°布置,这是为了防止在芯片下方布置DDR通道。在整个封装内,IFIS连接必须在封装后的左侧和右侧固定,DDR则需要连接至顶部和底部。
IFOP需要两层封装才能满足4个核心两两联通的需求。层A满足了右上和左下连接的需求,以及右上和右下、左上和左下、右上和左上、右下和左下等连接。层B主要满足的是左上和右下,以及相对应的所有两两连接的线路。需要注意的是,由于芯片翻转,DDR的接口和线路目前全部朝外,没有再通过芯片底部了。
IFIS上则需要另外两个层,层C上满足了另两个核心的DDR通道和IFIS一半的连接需求(和IFOP连接本质相同),层D和层C类似,只是DDR的通道和IFIS连接有一些改变。
值得一提的是,对于完全连接所有四颗核心而言,实际上每个芯片只需要3个IFOP链路就能完成需求,但是AMD还是为每个芯片加入了4个链路,以便在4个基层中适应所有必要的路由需求。这意味着每个芯片都有1个链路会被关闭掉,而不是简化封装。
sTR4接口和封装
对于HEDT市场,AMD首次推出了sTR4的封装和相应的接口。这个封装和接口使用了2个Zeppelin的核心,总计16个CCX内核、32个线程以及4个DDR通道。正如上文所说,sTR4的外观和SP3看起来相似,但实际上是有很大不同的。
在双芯片配置中,芯片之间的两两连接需求被大幅度降低,因此AMD实际上只需要使用2个IFOP链路就可以将两个核心连接在一起。此外,每个芯片还能够提供2×16的PCIe 3.0通道以实现总共64个PCIe 3.0通道。剩余的两个位置使用的是机械性占位模块,不具有任何功能和线路,其存在的意义很可能是考虑顶盖和散热器压力平衡,因此它真的只是硅片而已。
AM4接口和封装
对于主流台式机用户,AMD选择继续使用了上代产品就开始使用的AM4插槽。虽然芯片可以提供32个PCIe 3.0通道,但实际上只有24个开放给用户使用。其原因有可能是AM4插槽本身的问题,另一方面则是AMD将另外4个通道开放给相关芯片组,用于扩展系统的I/O能力。
越多核心、越大带宽—不同方案的带宽浅析
目前已经上市的AMD第一代锐龙Threadripper和EPYC官方支持的最高DDR4频率约为DDR4 2666,也就是说其MEMCLK为1333MHz。对EYPC而言,这意味着Zeppelin核心之间的单个链路带宽大约为42.667GB/s,一个处理器内部带宽约为170.667GB/s。对处理器之间而言,链路带宽由于CRC的考虑大约是8/9,所以单路数据约为37.926GB/s,两个处理器之间的带宽约为151.7GB/s。由于数据传输速度和内存频率挂钩,因此更快的超频内存将带来更高的带宽。对锐龙Threadripper而言的话,由于Zeppelin核心之间没有那么多的链路,所以带宽大约为85.33GB/s。
为什么不是大核心?——成本情况分析
之前AMD曾提出过多芯片方案和单芯片方案的比较,但是在ISSCC上有一些具体的数据可以用来分析成本。Zeppelin核心面积约为213平方毫米,一个4核心的产品约为852平方毫米,AMD估计,采用32个Zen内核的单芯片设计约为777平方毫米。缩小的面积主要是来源于消除了一些CAEK或者IFOP SerDes之类的组件。当AMD只生产大芯片时,看起来总面积虽然小了一些,但是考虑制造难度和不复用芯片等因素,大芯片的制造和测试成本将比目前的方案高出40%,当只考虑32核心产品时,AMD估计产能将比现有的4核心版本降低大约17%。最终AMD估计一个完整的32核心大芯片将比现有的4核心版本成本高了大约70%。
需要注意的是,这些数据仅仅适用于完整的32核心版本。相应的,英特尔的Skylake XCC芯片的尺寸大约为700平方毫米,这意味着其产量应该比AMD估计的好一些。此外英特尔还提供了更低的核心数量部件以大幅度降低成本,实际上英特尔的XCC产品从28核心产品一直到4核心都有推出。
AMD:选择了最适合自己的方案
纵观整个Zeppelin核心的连接和设计方案,AMD在成本、性能上得到了很好的平衡。对于更多核心的设计而言,不同的路径会带来不同的成本、风险和收益。处理器厂商会根据自己的情况和技术储备,选择最适合自己的方案,接受各自的优点和缺点。AMD的Zeppelin和与其相配的Infinity Fabric也是非常出色的设计,很好地完成了AMD的需求并得到了市场的欢迎。
接下来,AMD将会按计划发布Zen 2和Zen 3架构,除了架构改进之外,我们还将会关注AMD在多核心设计和互联方面的改进。比如Zen架构在内存数据访问方面的延迟还是比较高的,尤其是本地数据访问存在90ns的延迟,在一定程度上影响了Zen架构处理器的最终性能。想必AMD也关注到了这个问题并在着手提出改进方案。如果AMD能很好地对未来新架构上的一些功能进行取舍,并对薄弱之处做出改善的话,Zen家族还将给人们带来更大的惊喜。
文/李实