
芯片互连技术(三)—对称的缓存一致性总线CCIX
总线是芯片架构中非常核心的概念。例如,一个SoC芯片分为很多模块或子系统,如处理器、内存控制器、GPU、ISP等,通过总线把它们连接在一起,此即芯片架构。
芯片内的总线互连常见的有:处理器核之间的互连、处理器核与内存的互连、处理器与缓存的互连、缓存与缓存之间的互连、处理器和I/O之间的互连、处理器与各种专有硬件加速模块之间的互连、DMA和内存的互连等。狭义的总线互连仅仅指通过简单总线接口连接多个组件,简单总线是一种临界资源,组件需要抢占到总线才能发起访问;而广义的总线互连泛指用于组件之间的互连结构。
芯片间的总线互连有:两个CPU之间的互连、CPU和异构GPU等加速器之间的互连、CPU和NIC等I/O设备之间的互连、加速器之间的互连、加速器和I/O设备之间的互连等。
下面介绍几种芯片互联结构。
对称的缓存一致性总线CCIX
PCIe协议是目前最常见的CPU和加速器间传输数据的协议,它作为I/O协议很有效,但不支持I/O设备成为对等计算模型(Peer-Compute Model)的组件。随着CPU和加速器的异构计算应用越来越多,高性能、低延时和易用性成为下一代互联的首要诉求。
CCIX总线是一种能够使两个或两个以上器件通过缓存一致性的方式实现共享数据的片间互连总线。CCIX旨在优化、简化异构系统的架构设计,从而实现基于不同架构的处理器或专用的加速器提升系统的带宽并降低时延。
高性能、低延时的片间互连接口是基于片外加速器系统的关键部分。CCIX采用两种方法来提高性能并降低延时:第一种是采用缓存一致性,自动保持处理器和加速器的缓存一致,提升易用性并降低延时;第二种是提高CCIX链路的原始带宽最高链接速率可升至25GT/s。CCIX规范规定了多个CCIX端口如何聚合提供超过单个CCIX端口性能的方法,以此来匹配加速器和内存扩展带宽。
将缓存一致性的基本原理扩展到加速器,应用数据就可以在处理器缓存和加速器缓存间自主传递,而不需要软件驱动程序参与数据传递。除了缓存,CCIX还支持操作系统分页的内存(系统内存)扩展包含PCIe设备内存。CCIX 的数据共享模型基于以虚拟地址(VA)寻址的共享内存。
处理器和加速器的缓存和内存数据通过CCIX协议自动同步,只需要传递数据指针而不需要依赖复杂且代价高昂的DMA操作。自动同步能减小数据延时,提升软件性能;同时减小软件开发者的负担,使他们聚焦于软件而不是加速器和主处理器间数据传递的底层机制。
CCIX总线架构如图所示。CCIX总线架构是从PCIe基本架构扩展而来的分层结构,CCIX可看作如下两个主要规范。
·CCIX协议规范:包含CCIX协议层和CCIX链接层。这些层规定缓存一致性、报文发送、流控和CCIX传输部分的协议。
·CCIX传输:包含CCIX/PCIe事务层、PCIe数据链路层和CCIX/PCIe物理层。这些层负责器件间的物理连接,包括速率和带宽协商、传输包错误检测和重试,以及初始包编码协议。
CCIX总线架构
基于分层的架构,CCIX总线支持多种灵活的拓扑结构。如下图所示,a是最常见的拓扑结构,主机和加速器或扩展内存直接连接;CCIX总线还可以很容易地构建和支持其他拓扑结构,如b所示的交换机、c所示的菊花链或网状拓扑。
CCIX系统拓扑范例
CCIX一致性分层架构模型如下图所示。CCIX协议定义了CCIX组成模块的内存访问协议。所有CCIX器件至少有一个具备CCIX链接的CCIX端口,一个CCIX端口关联一组物理管脚,用于和另一个CCIX端口连接,在两个或多个不同芯片间交互信息。
CCIX一致性分层架构模型
CCIX协议还定义了如下类型的代理。
·请求代理(RA)。一个请求代理对系统内的不同地址进行读写操作。请求代理可以对它已经访问过地址的数据进行缓存。
·主代理(HA)。主代理负责管理指定一段地址的数据一致性。当一个缓存行的状态需要改变时,主代理通过向所需的请求代理发出侦听操作来保持数据一致性。
·从代理(SA)。CCIX支持通过扩展系统内存来包含设备的内存。例如,主代理位于一个芯片上,而这个主代理关联的部分或全部物理内存在另一个芯片上时,会出现这种情形,这种架构组件(扩展内存)称为从代理。从代理不会被请求代理直接访问。请求代理总是访问一个主代理,主代理再访问从代理。
·错误代理。错误代理接收并处理协议错误信息。
基于上述代理,可以描述CCIX总线的一些常见用例。
·当采用和部署CCIX总线时,最常见的初始用例是处理器和加速器共享缓存。这个用例里有两个请求代理,各自管理自己的缓存。主代理在处理器上,管理连接到该处理器内存的访问。
·处理器和加速器共享虚拟内存。在这个用例里,加速器和处理器的内存同在一个共享虚拟内存池里。处理器只需要简单地将待处理数据的地址指针传递给加速器,而不需要复杂的PCIe DMA和驱动程序在处理器和加速器内存之间传递数据。这个用例里有两个请求代理管理各自的缓存,有两个主代理管理内存,免去了软件驱动程序开发和额外开销,可以大幅提升系统性能和简化软件。
·拓展基本结构。得益于自身非常灵活的特性,CCIX总线可以在展示的基本数据流之外进行拓展。从直连结构到网状拓扑和星形网络,CCIX总线具备非常不错的灵活性来支持很多种类的拓扑结构。
CCIX总线的一个关键优势是它支持主设备和加速器间的数据共享,并且不需要驱动程序来进行数据移动。传统的PCIe加速器需要驱动程序对加速器写入和读出数据,这增加了延时和计算开销。采用无驱动程序的数据移动方式,CCIX总线可以将系统内存扩展至主设备的内存之外。
每个支持CCIX设备的行为与现有NUMA操作系统中节点(处理器核)的行为类似,这是因为支持CCIX的设备利用了现有的操作系统功能。在这种模式下,用来共享的所有数据结构都放在处理器和加速器都可访问的共享内存里。这种数据共享模型可以省去加速器特定的控制与管理驱动程序,允许加速器资源由一个中心调度器安排的常驻任务来调用。这个调度器可以是操作系统调度程序的一部分,也可以和操作系统调度程序协作,这能简化运行在虚拟机或容器上软件所使用的软件库,同时提供完整的工具支持,允许开发者用任何语言编写自己想要的,跟传统的开发方式没有任何区别。
文章转载自公众号:智车Robot
