Felix

技术源于积累,成功始于执着! 个人邮箱:justlxy@mail.dhu.edu.cn QQ:1576109464

PCIe扫盲——PCIe演进方向?CCIX简介

0
阅读(427) 评论(0)

连载目录篇:http://blog.chinaaet.com/justlxy/p/5100061871


摩尔定律逐渐降速,业界需要一同寻找提升计算性能、同时保持低功耗的方法。CCIX联盟的成立旨在实现一种新型互联,专注于新兴的加速应用,如机器学习、网络处理、存储卸载、内存数据库和4G/5G 无线技术。这个标准使得基于不同指令集的处理器,将缓存一致性、对等计算的优势扩展至许多加速设备包括FPGA、GPU、网络或存储适配器、智能网络和定制的专用集成电路。CCIX 通过扩展现有成熟的数据中心硬件和软件基础设施来简化开发和采用。这最终能使系统设计者将合适的异构组件无缝集成来满足特定系统需求。

缓存一致性的加速器互联,即CCIX™(读成“see 6”)是一种能够将两个或两个以上器件通过缓存一致性的方式来共享数据的片间互联。机器学习和大数据应用正深刻的变革数据处理的方式。通过片外加速器的定制,传统处理器从计算到网络的应用都得到了增强;这推动了产业整体向加速器和异构计算发展。对目前很多计算任务,加速器能够比单独的处理器速度更快、功耗更低的完成所需功能。但是,不受管控的异构会带来软件复杂性。CCIX 旨在优化、简化异构系统的架构设计,同时基于不同指令集(ISA)的处理器或应用特定的加速器提升系统的带宽、降低时延。

今天,高科技的版图是由新的、大规模的消费者服务的创新构成的,例如5G、云计算、物联网、大数据和自动驾驶。机器学习和人工智能应用根本性的改变了消费者行为。这又推进了平台和解决方案不断演进,通过高效、可扩展的方式来支持这些新应用。仅以中央处理器为中心的服务器架构的解决方案无法满足这些应用的性能需求。因此需要基于高效的异构计算架构的解决方案,包含加速器例如图形处理单元(GPU)、可编程逻辑阵列(FGPA)、智能网卡(NIC)和很多其它领域特定的可编程器件。PCI Express (PCIe) 是目前最常见的,处理器和片外加速器间传输数据的协议。尽管PCIe 协议作为输入输出(IO)协议很有效,但不能支持IO 设备成为对等计算模型中的一个无缝组件。

随着片外加速器的应用越来越多,高性能、低延时和易用性成为下一代互联的首要诉求。

CCIX分层架构

CCIX规范的最大优势之一是它建立在PCI Express规范的基础之上。CCIX的一致性协议只需很少修改或者无需修改就可以通过PCI Express链路传递。如下图所示,某个现有的PCI Express控制器实施可以通过逻辑进行扩展,以实现CCIX事务层。CCIX事务层负责携带一致性消息,而块 – 即CCIX协议层和链路层 -- 负责实现一致性协议本身并对其执行操作。这些块需要与用于缓存的内部片上系统(SoC)逻辑进行紧密集成,并且可能是特定于该SoC上使用的具体架构。在其今后设计中实现CCIX的SoC设计人员通常希望将CCIX协议及链路层与CCIX事务层分开,以使前者能够与内部SoC逻辑紧密集成。

an_introduction_to_ccix_fig1_dwtb_q317_jpg_imgw_850_x.jpg

CCIX 栈的最上层是CCIX 协议层。这一层负责一致性协议,包括内存的读、写流。这一层提供了片上一致性协议(例如Arm AMBA CHI)的简单映射。这一层定义的缓存状态使得硬件能够确定内存的状态。比如硬件可以确定数据是否唯一且未被修改(和内存一致),或是共享且被修改的(和内存不一致)。

CCIX 协议层之下是CCIX 链接层。这一层负责CCIX 协议层定义的代理(agent)之间消息的传输格式。目前CCIX 链接层是构建在PCIe 之上,但是基于分层架构,CCIX 将来可以映射到不同的传输层。此外,这一层负责端口聚合,使得多个端口能够聚合在一起提升带宽。

CCIX 和PCIe 事务层负责处理它们各自的包。PCIe 协议支持部署虚拟通道,使得不同数据流通过一个PCIe 链路。将CCIX 和PCIe 传输流各分到一个虚拟通道,CCIX 和PCIe 传输可以共享相同的链路。CCIX 能够传输标准的PCIe 包,或经过优化的CCIX 包。经过优化的CCIX 包删减了PCIe 包里的几个不必要的字段。传输标准的PCIe 包时可以采用现有的PCIe 交换器。传输经过优化的CCIX 包,能降低PCIe 的额外开销,使得一致性传输的包更小、更高效。

PCIe 数据链路层执行数据链路层的所有正常功能。这些功能包括 CRC 错误校验、包确认和超时检查,和信用初始化及交换。

如前所述,CCIX的最大的吸引力之一就是它与PCI Express的兼容性。实际上,CCIX的缓存一致性协议可以通过运行8GT/s或更快速度的任何PCI Express链路来传递。PCI Express 4.0规定的最高数据速率为16GT/s,这在一条16通道链路上可以达到总双向带宽约64GB/s,但CCIX联盟的一些成员需要更大的带宽。他们认为,通过将传输速率提高到25GT/s,一条CCIX链路可以在相同的条件下达到100GB/s。这导致出现了一项称为“扩展速度模式”(ESM)的CCIX特性。由于PCI Express由一个不同的标准化机构所拥有,所以CCIX联盟选择了一个聪明的机制用于在具有ESM功能的组件与PCI Express组件之间实现兼容性。希望彼此进行通信的两个CCIX组件可以通过正常的PCI Express链路初始化过程(通常是一个硬件自主过程)进行处理,以达到最高的相互支持的PCI Express速度。自此开始,在主机系统上运行的软件可以询问CCIX特定的配置寄存器,并确定两个组件是否都具备ESM能力。如果具备的话,则确定它们的最高支持速度。该软件然后在两个组件上编写其他CCIX特定的寄存器,以便把PCI Express链路速度映射为CCIX ESM链路速度。自此以后,链路协商将针对CCIX ESM速度,因此,通过强制进行链路重新训练,这两个组件现在可以以高达25GT/s的速度进行通信。

CCIX 系统拓扑样例

得益于分层架构,CCIX 能够支持多种灵活的拓扑结构。最常见的拓扑结构是直接附加的共享虚拟内存。但其它拓扑结构,如交换器、菊花链或网状拓扑,也很容易被构建和支持。blob.png

上图中,4a为直接连接,4b为交换器拓扑,4c为混合菊花链。

CCIX 一致性分层架构

CCIX 协议定义了CCIX 组成模块的内存访问协议。所有CCIX 器件至少有一个具备CCIX 链接的端口。一个CCIX 端口关联一组物理管脚,用于和另一个CCIX 端口连接,在两个或多个不同芯片间交互信息。

同时定义了一些不同的代理类型,哪种代理在哪一个器件取决于器件的功能。定义的代理类型包括:请求代理(RA)、主代理(HA)、从代理(SA)和错误代理(Error Agent)。请求代理、主代理、从代理、错误代理,系统里的端口和链接统称CCIX 组件。一个代理在协议中由一个代理ID 标识。以下对每一种代理类型进行简要描述。

blob.png

请求代理(RA) - 一个请求代理对系统内的不同地址进行读、写操作。请求代理可以对它已经访问的地址的数据进行缓存。每个CCIX 请求代理可以有一个或多个处理单元作为内部请求的发起者,它(们)的请求由一个CCIX 架构的请求代理执行。根本上说CCIX 请求代理提供了加速器或CCIX 使能的IO 主设备向一致性系统内存的接口。此外,请求代理使得加速器的缓存具备一致性,因此编程者无需感知。

主代理(HA)- 主代理负责管理指定的一段地址的数据一致性。当一个缓存行的状态需要改变时,主代理通过向所需的请求代理发出侦听操作来保持一致性。

从代理(SA)- CCIX 支持扩展系统内存,来包含外设所附的内存。这种情形出现在主代理在一个芯片上,而这个主代理关联的一些或全部物理内存在另一个芯片上时。这种架构组件(扩展内存)称为从代理。从代理不会被请求代理直接访问。请求代理总是访问一个主代理,然后主代理再访问从代理。

错误代理 - 一个错误代理接收并处理协议错误信息。协议错误信息由CCIX 组件发出。

CCIX 数据流样例

基于上述的代理类别,可以描述CCIX 可见的一些常见用例。

1、加速器共享处理器内存

当采用和部署CCIX 时,最常见的初始用例是处理器和加速器共享缓存。这个用例里有两个请求代理,各自管理自己的缓存。主代理在处理器上,管理连接到该处理器的内存的访问。

blob.png

2、共享的处理器和加速器内存

下一种常用模型可能是处理器和加速器共享虚拟内存。在这个用例里,加速器和处理器的内存同在一个共享虚拟内存池里。处理器只需要简单的将待处理的数据的地址指针传给加速器,而不需要复杂的PCIeDMA 和驱动在处理器和加速器内存之间传递数据。有两个请求代理管理各自的缓存,有两个主代理管理内存。免去软件驱动开发和额外开销,可以大幅提升系统性能和简化软件。

blob.png

3、拓展基本结构

得益于CCIX 非常灵活的特性,它可以在展示的这些基本数据流之外进行拓展。从直接附带的加速器、到网状拓扑和星型网络, CCIX 具备很可观的选项来支持很多种类的拓扑结构。

CCIX 软件

CCIX 对硬件的增强极大推进了片外加速器,同时CCIX 的一个关键优势是它能支持主设备和加速器间的数据共享采用无驱动的数据移动方式。传统的PCIe 加速器需要驱动对加速器写入和读出数据,这增加了延时和计算开销。采用无驱动的数据移动方式,CCIX 还可以将系统内存扩展至主设备的内存之外。

基于CCIX,每个支持CCIX 的设备的行为与现有NUMA(非统一内存访问)操作系统中的节点类似。这种基于内存的方法利用了现有的操作系统功能。在这种模式下,用来共享的所有数据结构都放在处理器和加速器都可访问的共享内存里。这种数据共享模型可以消除加速器特定的控制与管理驱动,允许加速器资源由一个中心调度器安排的长时间运行的任务来调用。这个调度器可以是操作系统调度程序的一部分,或和操作系统调度程序协同。这能简化在虚机或容器上运行的应用所用的软件库,允许开发者用任何语言、有完整的工具支持来编写常规的应用软件。


参考阅读

Richard Solomon, Synopsys,  An Introduction to CCIX