欢迎光临~汉轩微电子制造(江苏)有限公司
语言选择: 中文版 ∷  英文版

行业新闻

CXL,最强科普(下)

   5 CXL 3.0 协议   

为了应对大型分布式系统中的数据共享挑战(挑战 4),CXL 3.0 将 CXL 2.0 中引入的资源池扩展到更大规模,利用更大的 Flit 大小、低延迟和足够的带宽,为多达 4,096 个终端设备提供多级交换和协议支持。终端设备可以是代表独立服务器或节点的主机 CPU、内存、加速器或任何其他 I/O 设备(如网卡)。如图 12 所示,总体目标是根据工作负载动态组合系统,以较低的总体拥有成本提供高能效性能。为实现这些目标,CXL 3.0 引入了以下内容:

1.将每引脚带宽增加一倍,同时保持扩展到更大拓扑所需的延时不变。

2.支持 Fabric 拓扑: 这是所有负载存储互连标准中首次支持事务之间的排序限制。CXL 在任何源-端对之间都有多条路径,摆脱了树状拓扑结构的限制,这对扩展到数千台设备至关重要。这使得延迟更低、分段带宽更高、故障切换能力更强。

3.从 PCIe/CXL 设备直接点对点访问由 2 类/3 类设备托管的相干 HDM 存储器,如果不发生冲突,无需涉及主机处理器。因此,延迟低、拥塞少、带宽效率高,这对大型系统至关重要。例如,在图 12 中,使用直接 P2P,网卡到内存的距离为 8 跳,而通过 CPU 的距离为往返 16 跳。

4.跨主机共享一致的内存和信息传递: 这可以通过硬件或软件实现。共享一致性内存可使多个系统共享数据结构、执行同步或使用低延迟负载存储语义传递消息。信息传递也可以通过使用负载存储 CXL.io 语义(相对于延迟较高的网络语义)来完成。

5.近内存处理,允许在内存附近执行计算,以提高性能和能效。

1111.jpg

图 12. CXL 3.0 支持多路径的 Fabric 拓扑,可跨越一个或多个机架,从而实现可组合的横向扩展系统,在对等机架之间共享内存和负载存储信息传递。

5.1 支持数据速率翻番至 64.0 GT/s 的 Flit 格式化

CXL 3.0 基于 PCIe 6.0 规范,使用 PAM-4(脉冲幅度调制 4 级)信令支持 64.0 GT/s。PAM-4 采用四级电压对每个单位间隔 (UI) 的两个比特进行编码,由于降低了眼高和眼宽(即电压和时间),因此错误率非常高。为了克服这一问题,PCIe 6.0 规范采用了 10-6 的首次突发错误率,并引入了 256 字节的 Flit(图 13(a)),其中包括 236 B TLP 和 6 B 数据链路包 (DLP) 的有效载荷由基于 GF(28) 上的里德-所罗门码的 8 B CRC 保护,而整个 250 B 则由每路 2 B 的 3 向交错单符号正确前向纠错码 (FEC) 保护。64.0 GT/s 速率的 CXL 3 使用相同的电气层和 256 B Flit,但做了一些修改。如图 9(b)和图 9(c)所示,对于 256 B 大小的 Flit 的两种变体,它保留了与 PCIe 相同的 FEC 机制。

22.jpg

图 13. 三种类型的 CXL 3.0 Flits。一个 256 B 的延迟优化 Flit (C) 由两个 128 B 的 Sub-Flits 组成,每个 Sub-Flits 在 256 B 之间具有共同的 FEC,但具有单独的 CRC。

图 13(b)显示了 CXL 3 中常规 256 B Flit 的布局。8 B CRC 与 PCIe 6.0 相同。唯一不同的是 2 B Hdr(Header)(DLP 前两个字节的增强版,用于可靠的 Flit 传输管理,如确认、重放请求、带序列号的重放)得到了增强,以指示 Flit 类型(CXL. DLP(用于可靠的 Flit 传播管理,如确认、重放请求、带序列号的重放)被增强,以指示 Flit 类型(CXL.io、CXL.cache+mem、ALMP、Idle)和可靠的 Flit 传播管理控制,并被置于 Flit 的起始位置,以管道方式将 Flit 传播到相应的协议栈,而无需累积整个 256 B Flit 以减少延迟。可选的延迟优化(LO)256 B Flit,如图 13(c)所示。LO Flit 被细分为两个子 Flit,每个 128 B,奇数 Flit-半中有 FEC,偶数 Flit-半中有 2 B Flit Hdr。每个半字节中都有一个 6 B CRC。如参考文献所述,这 6 B CRC 源自 8 B CRC,以减少门数。第一个 6 B CRC 保护偶数位半中的 2 B Flit Hdr 和 120 B 数据,第二个 6 B CRC 保护奇数位半中的 116 B 数据。如果偶数半比特的 CRC 通过,就可以按顺序处理,而无需等待奇数半比特。如果奇数 Flit-half 的 CRC 通过,则可以处理奇数 Flit-half,前提是偶数 Flit-half 已经处理完毕(即没有 CRC 错误)。由于 CRC 大约需要 10 级逻辑门,而 FEC 需要 50 级逻辑门,因此在 x16 链路上,先应用 CRC 有助于将延迟时间缩短 2 纳秒。此外,128 B 以上的 CRC 使累积延迟略好于 32 GT/s 的 68-B Flit 累积延迟。如果检测到错误,则累积整个 Flit,应用 FEC,然后再次应用 CRC。有关 Flit 以及 FEC 和 CRC 机制的详细信息,请参阅参考文献。

使用的 Flit 类型(68 B、256 B、LO)在协商使用 8 b/10 b 编码的 CXL 协议时预先协商。任何 CXL 设备都必须支持 68 B Flit。如果 CXL 设备支持 64.0 GT/s 数据传输速率,则还必须公布 256 B Flit 模式,而 LO Flit 模式支持的公布是可选的。如果链路的所有组件(两个设备以及中间的任何重定时器)都支持 LO Flit 模式,则会选择 LO;否则,如果所有组件都支持 256 B Flit,则会选择 256 B Flit 模式;否则,将支持 68 B Flit 模式。一旦在早期协商过程中选择了一种 Flit 模式,无论运行的数据速率如何,都将使用该模式。假设我们选择了 LO Flit 模式,因为链路中的所有组件都支持该模式和 64.0 GT/s,但如果链路以 32.0 GT/s 运行(例如,在 64.0 GT/s 时出现节能速度下移或链路稳定性问题),则仍将使用 LO Flit 模式。

对于 CXL.io,"数据 "的最后 4 B 将用于 DLLP(相当于 PCIe 6.0 中 6 B DLP 的最后 4 B)。这样,在 256 B Flit(与 PCIe 6.0 Flit 相同)模式下,TLP 的容量为 236 B,而在 LO Flit 模式下,TLP 的容量为 232 B。对于 ALMP,大部分 "数据 "字段是保留的。对于 CXL.cache-mem,插槽排列如图 14 所示。H 插槽和 G 插槽的用途与 68-B 相同(即 H 插槽或标头插槽仅用于标头,而 G 插槽或通用插槽用于标头或数据),但 H 插槽中的额外 2 B 用于构建更大的拓扑结构。HS 插槽只有 10 B,用于 2DRS 或 2NDR 等小型报头。

 33.jpg

图 14. 256 B 和 LO Flits 的 CXL.cache 和 CXL.mem 插槽[8]。

5.2 CXL 3.0 的协议扩展: 支持 Fabric 的无序 I/O (UIO) 和反向无效 (BI)

第 3 节中描述的 PCIe 排序规则排除了任何非树形拓扑,这意味着 CXL 网络中的任意两个节点(主机或设备)之间只有一条路径。我们需要在任何一对源-目的节点之间建立冗余的多条路径,以创建性能良好的大型分布式系统。由于软件依赖于 "生产者-消费者 "排序模型,因此 CXL 协议需要在适应非树状拓扑的同时保留这种排序模型。CXL 3.0(以及 PCIe)通过在一个或多个不同的虚拟通道(VC,见第 3.1 节)上引入 "无序 "读/写/完成事务,并将排序执行权仅转移到源节点,从而解决了这一难题。每个虚拟通道都独立于其他虚拟通道,每个虚拟通道包括三个流控制(FC)类别: 已发布(P)用于内存写入等事务,非发布(NP)用于内存读取等事务,完成(C)用于每个 NP 事务的完成,详见第 3.3 节。其基本思想是,每个 UIO 写入都有一个完成(C FC 类中的 "UIO 写入完成")。因此,UIO 写入从根本上说是非发布的,即使它是在 P FC 类上,以便让源执行排序。因此,生产者(如图 6(a) 中的设备 X)必须等待所有 "数据 "完成后,才能向 "标志 "写入信号,表示数据可用。UIO 读取就像普通的内存读取一样,它会获得一个或多个完成(C FC 类中的 "UIO 读取完成"),无论是否有数据,都会同时获得状态,包括错误。因此,在 UIO VC 中,P 和 NP 各只有一种类型的事务(分别是 UIO 写和 UIO 读),而 C 有三种类型的事务(UIO 写完成(无数据)、UIO 读完成(有数据)和 UIO 读完成(无数据))。此外,如图 15 所示,跨 FC 和 FC 内部的事务没有排序要求。这样,CXL.io(和 PCIe)事务就能在源-目的对之间具有多条路径的拓扑中的任意路径上发送,并仍然执行生产者-消费者排序语义。VC0 将始终用于传统的非 UIO 排序,以实现路由树拓扑的向后兼容性,VC1-VC7 中的一个或多个 VC 可用于 UIO 流量,UIO 流量可使用任何路径进行任何交易。

 444.jpg

图 15. UIO 排序规则。Y/N "表示第二笔交易可以绕过或不绕过第一笔交易。

CXL 3.0 在 CXL.mem 中引入了带有两个通道的新流程: 如第 5.2 节详细描述的那样,在 S2M 方向上引入了反向无效 (BI),在 M2S 方向上引入了响应 BI-Rsp。这就产生了一种新型设备内存: HDM-DB(Host-managed Device Memory - Device-coherent with Back-invalidate support),由 2 类和 3 类设备支持。

5.3 设备间的对等通信和大块本地内存的映射

CXL 3.0 中的 "反向验证 "流程支持三种使用方式:通过 CXL.io UIO 访问 HDM-DB 内存,实现 CXL/PCIe 设备之间的直接点对点通信(如图 16 所示);第 2 类设备能够实现窥探过滤器,并将大块本地内存映射到 HDM-DB 区域(如图 17(a)所示);跨多个独立主机的硬件强制一致性共享内存(如图 17(b)所示)。在 CXL.mem 中设置 BI 的理由是确保没有其他避免死锁所需的依赖关系。

rrttt.jpg 

图 16. 利用 UIO 和 BI 优化延迟和带宽的 CXL 3.0 协议增强功能。

利用 UIO 和 BI,设备可以直接访问 HDM-DB 内存,而无需通过主机 CPU。连接到交换机的加速器设备需要访问直接连接到交换机的内存(图 16(a)),该内存映射到 HDM-D 或 HDM-H 区域,使用 CXL 2.0 数据流时需要通过主机 CPU(图 16(b)),这涉及主机从内存获取数据,并在完成设备访问之前解决一致性流。但是,使用 CXL 3.0 流量时,设备会在 UIO VC 中使用 CXL.io 发送相同的内存读写事务。交换机不会将这些 UIO 事务路由到主机。如果高速缓存行的状态为 I 或 S(UIO 读取)或 I(UIO 写入),则 UIO 事务直接由内存提供服务;否则,内存控制器将使用 BI 流反向侦查主机处理器,如图 16(c) 所示。稍后我们将看到,即使在需要 BI 的情况下,这种新机制也比将所有请求发送到主机的现有方法更节省带宽,因为后者会造成更多的流量和额外的延迟。

UIO 与 BI 的结合实现了 I/O 一致性模型,可以扩展到大量设备。那些需要缓存内存的设备在需要时仍可使用 CXL.cache 语义,其他情况下则使用 UIO。这就减少了窥探开销,也减少了一直进入主机处理器的延迟。BI 的第二个方面是让第 2 类设备拥有一个窥探过滤器,而不是拥有一个完整的目录和调用现有的偏置流。图 17(a)演示了这一点,在该图中,如果新请求遇到容量缺失,2 类设备会调用 BI 流程,从其窥探过滤器中驱逐缓存行。

 88.jpg

图 17 (a) 现有的偏置-翻转机制需要完全跟踪 HDM,因为设备无法反向窥探主机。CXL 3.0 的 "反向无效 "可实现窥探过滤器,从而产生可映射到 HDM 的大容量内存,(b)CXL 3.0 的 "反向无效 "流程可用于在多个主机之间实现基于硬件的一致性共享内存,每个主机都有独立的一致性域。

如图 17(b)所示,BI 机制还能在多个主机间实现共享和硬件强制的一致性内存。在这里,内存设备(GFD/MLD)维护一个目录(或窥探过滤器),以跟踪一致性共享内存中高速缓存行的所有权。因此,当主机 1 获得作为共享副本的高速缓存行 X 的所有权时,它会将目录从 "I "状态更新为 "S "状态,主机 1 为共享者。当主机 3 请求共享状态下的同一高速缓存行 X 时,它会提供数据并更新 X 的目录,以表明主机 1 和主机 3 都共享该数据。当主机 4 请求独占副本时,它会向主机 H1 和主机 H3 发出 Back Invalidate(回无效),等待两者的响应,以确保主机 1 和主机 3 已将 X 的副本无效,并更新目录,将 X 标记为主机 4 的 "E",然后将数据和所有权发送给主机 4。每个 GFD 可同时支持多达 4,096 个独立节点(MLD 为 32 个)的池式或共享内存,因为每个节点都无法通过配置空间独立发现。

为支持多个独立主机共享一致性内存,设备可在内存中实施片上窥探过滤器和/或目录结构。设备可使用两个位来表示一致性状态(无效、共享、独占),然后是主机共享列表。该列表的实现取决于设备。例如,对于无效状态,列表条目为"不关心"。对于独占,列表包含独占的主机 ID。对于共享,可以采用位矢量(每个位代表一个或一组主机)或列表的组合方式,其中列表可以识别每个主机,但最多只能识别一定数量的主机,超过这个数量的主机可以粗粒度地表示主机组。实施细节取决于可用的目录位数和可访问缓存行的主机数量。也可以选择在多个高速缓存行(如页面级)中维护窥探过滤器/目录。共享内存的大小和可共享缓存行的主机数量取决于使用模式。例如,大型内存应用,如超大型数据库、日志、机器学习、键值存储、内存分析等。硬件一致性可以扩展这些应用,因为它们大多是只读应用。在某些情况下,可能需要软件一致性。CXL3 架构还支持域间中断、使用共享内存的 Semaphores、数据复制,以及通过共享内存控制器使用特殊地址映射区域进行的消息传递,详情请参见参考文献。

反向验证在协议层和链路层创建了两个额外通道: BISnp 和 BIRsp。与图 10(b) 中的 CXL 1.1/CXL 2.0 依赖关系图相比,图 18 所示的更新依赖关系图中增加了 BISnp(S2M BISnp),这些通道是确保协议无死锁所必需的。BIRsp 已预先分配,因此在依赖关系图中,它被合并到图中的 L3 RSP 中。

55.jpg 

图 18. 更新后的 CXL 3.0 协议依赖性与反向验证。

5.4 CXL.cache 设备扩展

在 CXL 3.0 之前,每个虚拟层次结构只能支持一个 CXL.cache 设备。为支持更多设备,报文中增加了一个 4 位 ID 空间 "CacheID",使每个根端口最多可支持 16 个 CXL.cache 设备。主机要支持 CXL.cache,就必须拥有窥探过滤器结构,以跟踪设备可能缓存的每个地址。主机中这种跟踪的大小将限制设备缓存主机内存的能力,因此主机中的大小将限制设备可以缓存多少主机数据。请注意,对于 2 类设备,主机不会限制设备缓存自身内存的能力。增加 CacheID 后,主机必须单独跟踪根端口后面的每个设备,以避免退化为多播窥探行为。多播窥探功能是可行的,但不能满足带宽/性能要求,即设备应很少看到不在设备缓存中的地址窥探。主机一致性跟踪的限制可能会限制可支持的 CXL.cache 设备总数。主机将在主机网桥粒度上公布这一限制。软件可发现这一功能,并在枚举 CXL 层次结构时强制执行这一限制。

5.5 端口基础路由(PBR)和 CXL Fabric 扩展

为了将端点(主机或设备)和非树(多路径)网络拓扑扩展到 4,096 个,CXL 3.0 增加了一种新的可选协议格式,称为端口基础路由(PBR)。与 CXL 2.0 的分层路由(第 4.1 节)相比,PBR 的理念是只关注 PBR 交换机之间路由信息所需的信息,因此是一种更简单、更可扩展的协议。例如,分层路由要求交换机知道虚拟分层和每台主机的地址映射。CXL 3.0 在大多数端点与第一个交换机之间的链路中继续使用标准 CXL 2.0 信息(如图 12 中的叶子到端点链路)。连接设备或主机的第一个交换机端口被称为 "边缘端口",因为它在标准报文(HBR)和 PBR 报文之间的转换中起着特殊作用。PBR 路由本身用于交换机间链路,如图 12 中的 Spline 到 Spline 和 Leaf 到 Spline 链路)。从软件角度看,只有 Fabric 管理员需要配置交换机网络;在主机上运行的软件看到的只是一个以第一个交换机端口为终点的平面拓扑。

PBR 使用 12 位 ID(称为 PBR-ID (PID))对端点进行寻址。边缘端口将此标识符添加到报文中,作为目的 PID(DPID),有时也作为源 PID(SPID)。PID 的生成是通过使用各种方法将 HBR 报文转换/解码为 PBR 报文完成的。这种转换是无状态的,即不需要跟踪任何未处理的请求。这种转换的例子包括地址到 PID、LD-ID 到 PID/从 PID、CacheID 到 PID/从 PID、总线编号到 PID/从 PID。对于从 LD-ID 到 PID 的转换,PID 提供的位数较少,可通过一个 16 位的查找表来解决,该查找表以 4 位 LD-ID 为索引,用于确定主机的 PID。在 "地址转 PID "的情况下,这是通过解码主机物理地址 (HPA) 和查找 Fabric 地址段表 (FAST) 来实现的。为了提高可扩展性,FAST 为每个 PID 提供了一个 2 次幂大小的单一内存范围,这样就可以直接使用可选地址位来查找拥有 HPA 区域的 PID。由于 HBR 信息与 PBR 信息之间的转换是由边缘端口透明执行的,因此主机和设备可以在不直接感知 PBR 的情况下使用 PBR。此外,由于地址解码已在边缘端口完成,内部 PBR 交换机(如图 12 中的 Spline 交换机)可以纯粹根据 DPID 路由报文,而无需执行地址解码。如果不进行这种简化,多个虚拟层次结构共享的中间链路就需要为共享链路的所有虚拟层次结构(VH)提供完整的地址解码功能,从而限制了 VH 的数量。因此,PBR 可以提高可扩展性,减少内部交换机的延迟和成本。

PBR 信息的路由由 Fabric Manager (FM) 集中控制(第 4.2 节)。FM 为每个 PBR 交换机配置一个以 12 位 DPID 为索引的查找表。这些表将 DPID 映射到交换机的出站物理端口。为实现多路径路由,查找表可提供多个目标物理端口,在这些端口上,无序流量可根据负载情况动态路由到目标端口。对于 CXL.io,UIO VC 是完全无序的,可以通过流量到达的 VC 轻松识别。CXL.cache-mem主要是无序的,但有一些有限的排序例外规则,用于解决冲突(例如:在CXL.Cache Snoops中,将GO推送到相同的地址);通过确保排序信息遵循相同的路径,适当地交错,即使有多条路径,也能轻松执行这些例外规则。例如,CXL.mem 非数据响应通道中的标签位可用于交错,因为只有具有相同标签的报文才需要排序。传统 CXL.io 等有序流量的灵活性较低,因为必须始终选择相同的单一路径,这符合所有链路的树状拓扑结构。当 FM 发现链路或交换机故障时,它还可以重新配置路由表,并将新的查找表重新分配给 PBR 交换机。交换机间链路(ISL)携带 PBR 信息格式。这些链路在性质上也是对称的,因为它们可以在同一链路上以相反的方向承载来自不同主机的上行和下行流量。具体来说,非 PBR 端口支持 6 个上行 CXL 通道和 6 个下行 CXL 通道。PBR 端口必须能分别承载 12 个上行和下行 CXL 通道。支持 ISL 要求底层高速缓存和内存链路层提供一组完全对称的通道,每个通道都有自己的流量控制信用。这与设备和主机链路不同,它们要么是上游链路,要么是下游链路(主机到交换机是下游链路,设备到交换机是上游链路)、

内存设备也可以直接参与 PBR,而不是依赖边缘端口。这种端点被称为全局 Fabric 附加内存设备(GFD)。在 CXL 2.0 多逻辑设备(MLD)最多只能由 16 台主机共享的情况下,GFD 允许在 CXL Fabric 中的所有 4095 个其他代理之间共享/池化高扩展性内存设备。

    6 CXL 实施情况调查    

CXL 生态系统需要 CPU 和设备的支持。虽然 CXL 3.0 产品预计将在几年内推出,但 CXL 1.1 和 CXL 2.0 已部署在多个商用产品中。英特尔从蓝宝石激流(SPR)CPU 和 Agilex7 FPGA 开始支持 CXL,支持所有三种协议。AMD 在 Genoa 和 Bergamo CPU 中支持 CXL,并宣布支持 SmartNIC 设备;ARM 宣布在 V2、N2 和 E2 系列 CPU 中支持 CXL 2.0。

在设备方面,Synopsys、Cadence、PLDA/Rambus、Mobiveil 等 IP 供应商已经展示了与 SPR CPU 的互操作性。三星制造了一个 CXL 1.1 内存扩展设备,并公开分享了其基准测试结果。Montage、SK Hynix、Microchip、Micron和 Astera Labs发布了 CXL Type 3 存储器设备。美光公司已经推出了 CXL 1.1 近内存计算设备的原型。学术研究也独立复制了 SPR上的结果,并实现了定制的 CXL 硬件和软件原型。

在接下来的章节中,我们将报告 CXL 实现的测量结果。我们在多个设备供应商的英特尔和 AMD CPU 上测试了 CXL.mem。不过,由于公开的性能数据主要针对英特尔 CPU,因此我们的调查主要侧重于英特尔实现的性能,以此作为 CXL 实现的代表性性能指标。

图 19 是具有代表性的 CXL IP 微体系结构,其中包括 PIPE、LPIF、CPI和 SFI等用于 CXL 端点和 SPR 等主机处理器的行业标准接口。图 10(a)中的内存大小、高速缓存层次结构和高速缓存大小只是提供了一个比例,而不是精确的大小。最后一级高速缓存(LLC)包括层次结构中的低级高速缓存以及与 CPU 内部 PCIe/ CXL.io 堆栈相关的写高速缓存。LLC 还覆盖所有 CXL 设备的缓存。窥探过滤器为主代理提供了何时窥探特定 CXL 设备的信息。无论是与 CPU 本地连接的内存(如 DDR),还是属于映射到系统地址空间的 CXL 设备的内存,都属于主代理的权限范围(图 10(a) 中用蓝色和绿色表示)。

 77.jpg

图 19. 具有代表性的微体系结构与 CXL 微体系结构的典型延迟[8]。

6.1 CXL 1.1 实现的实测延迟

从高层来看,CXL 延迟由协议部分和队列部分组成,队列部分取决于负载。我们首先关注空闲系统中的 CXL 协议延迟。图 19 显示了不同 CXL 块在英特尔 SPR 上的延迟明细。PHY 模块显示了负责数据序列化/反序列化的模拟电路。它通过 PIPE 的并行接口连接到 PHY 逻辑块(32 位,每列 1 GHz,32.0 GT/s 链路)。物理层逻辑模块还执行链路训练、均衡、(去)扰码、预编码、线路反转、链路宽度衰减、极性反转、时钟域交叉、时钟补偿、去歪斜和物理层成帧。

LPIF 芯片到芯片接口将物理层逻辑连接到 Arb/Mux 模块,再从 Arb/Mux 模块连接到多个链路层。Arb/Mux 块在两个堆栈(CXL.io 和 CXL.cache+mem;见第 3.2 节)之间执行仲裁和多路复用,并将物理层虚拟化为独立的链路层堆栈,以进行电源管理。

链路层(LL)(如图 19 所示)执行 CRC 校验、管理积分和处理链路层重试,而事务层(TL)则执行 Flit 打包/拆包、将事务存储在适当的队列中并处理事务。在 CXL 3.0 实现中,当协商 256 字节或 128 字节延迟优化 Flit 时,逻辑物理层将执行所有堆栈通用的 CRC 和重放功能,而每个堆栈的链路层将继续提供相同的功能,但仅限于该堆栈的 68 字节 Flit 模式,以实现向后兼容性。CXL.io/PCIe 事务层对事务进行排队、处理并执行生产者-消费者排序。

图 19 适用于 CXL.cache+mem 路径,包括发送和接收路径。与标准 PCIe 物理层逻辑实现相比,多种优化措施改善了延迟。这些优化包括绕过 128 b/130 b 编码(如果在链路培训期间协商好),绕过支持降级模式所需的逻辑和串行化触发器(如果一个或多个车道出现问题,或者如果为电源管理而调用),如果车道到车道偏移小于内部 PHY 逻辑时钟周期的一半,则绕过纠偏缓冲器,采用预测策略处理弹性缓冲器中的条目(而不是等待每个条目的时钟域同步握手),等等。PHY 和 PHY 逻辑延迟的不同取决于部署的是通用参考时钟还是独立参考时钟。如果组件都在单个机箱内,那么我们期望使用一个延迟为 15 纳秒的通用参考时钟。但是,如果链路跨机箱连接,那么我们预计独立参考时钟会因时钟交叉和同步 Hdr 开销而造成 4 纳秒的延迟损失。

在通用参考时钟模式下,从 SERDES 引脚到内部应用层(CPI 或等效接口)再返回的总延迟为 21 纳秒,在独立参考时钟模式下为 25 纳秒。一家 IP 供应商也报告了 25 ns 的往返延迟。由于各种区块的位置、工艺技术和物理层设计类型造成的传播延迟等因素,预计在不同的实现中会出现微小的延迟差异。例如,与基于 DFE/CTLE(决策反馈均衡器/连续时间线性均衡器)的接收器设计相比,现有的基于 ADC(模数转换器)的 PHY 可能会增加约 5 ns 的延迟。

CXL 端口的 21-25 纳秒往返延迟会在 CXL.cache+mem 设备访问时发生两次,一次在 CPU 上,一次在设备上。此外,我们估计使用重定时器的往返飞行时间为 15 纳秒。这样,通过 CXL 链路访问内存的端到端延迟加法为 57 纳秒。因此,即使存在设计上的差异,CXL 规范中针对 DRAM/ HBM 存储器的 CXL.mem 存取的引脚到引脚延迟目标为 80 纳秒,窥探的响应时间为 50 纳秒。这种加法器与通过 CPU-CPU 缓存相干链路进行的内存访问相当,而且完全符合 CPU 的延迟工作点 。对于 CXL.io,与 PCIe 中一样,在 Xeon 中从引脚到引脚的往返延迟为 275 ns(LLC 未命中和 IOTLB 命中)。

我们进行的端到端测量涵盖了包括队列在内的所有 CXL 开销。由于队列延迟是负载和系统容量的函数,图 20 显示了后台内存带宽负载增加时的平均内存访问延迟。这项测量是在英特尔 EMR 系统上进行的,该系统配备了两个试生产的 Astera Labs Leo CXL 智能内存控制器,每个控制器有 x16 个 CXL 通道。所有通道都装有单个 64 GB DDR5-5600 DIMM。这里显示的工作负载组合包括每写两次读取(2R1W)。我们首先比较了 CXL 与本地 DDR5 和跨插槽(UPI)DDR5 访问的延迟,在这三种情况下,我们都配置了四个内存通道(图 20(a))。低负载时,CXL.mem(蓝线)的延迟约为本地 DDR5 访问(橙线)的 200%-220%,与跨 UPI 访问远程 DDR5 的延迟相当(图 20(a)中的绿线)。此外,值得注意的是,本地 DDR5 和 CXL 上连接的 DDR5 的延迟曲线斜率非常相似。来自利奥 CXL 智能内存控制器的 x32 组合 CXL 通道的峰值内存带宽最大约为 137 GB/s,充分利用了 CXL 通道,并与四个本地 DDR5 通道相匹配。CXL 实现的带宽约为通过 UPI 访问远程 DDR5 的 1.5 倍。

 99.jpg

图 20. 相同数量的四个 DDR 通道(a)以及典型通道配置中的本地、CXL 和交错内存(b)的内存访问延迟与带宽负载的函数关系。图中线条采用局部回归法[82]进行平滑处理。

图 20(b)显示了四通道的 CXL(蓝线)、八通道的本地 DDR5(橙线)以及本地 DDR5 和 CXL 内存交错访问的配置(深灰色线)。与仅使用本地 DDR5 相比,交错使用本地和 CXL 可提供 1.5 倍的峰值内存带宽,有效地结合了 CXL 和本地 DDR5 带宽。在带宽负载超过 200 GB/s 时,与仅使用本地 DDR5 相比,交错可显著降低负载和队列。这表明,交错使用本地内存和 CXL 内存对带宽密集型应用很有吸引力。对于延迟敏感型应用,另一种方法是硬件分层,如英特尔扁平内存模式。

6.2 采用 CXL 3.0 及更高版本的大型系统拓扑的预计延迟

采用 CXL 的大型拓扑结构可通过交换机以及共享内存控制器(SMC)等设备实现,共享内存控制器是 CXL 交换机与多个内存控制器的组合(图 16(a)),具有多域功能和 PBR 路由功能,可用于扩展。CXL 交换机与往返的延迟加法器预计为 2x21-25+10 ns 内部 arb/look-up+10 ns 线上飞行时间 = 62-70 ns。表 2 总结了不同访问/系统配置下 CXL.cache 和 CXL.mem 的各种延迟。

 000.jpg

表 2. 各种拓扑结构下 CXL.cache 和 CXL.mem 的估计延迟 

 

6.3 可实现的数据带宽

x16 CXL 链路在 32.0 (64.0) GT/s 数据速率下,每个方向的原始带宽为 64 (128) GB/s。但是,除了实际有效载荷(包括报头、CRC 和协议 ID/Flit HDR)外,链路传输数据还会产生协议开销(见第 3.2 节)。此外,不同的工作负载会产生不同的请求和响应模式,对 Flit 插槽的占用也不尽相同。因此,可实现的数据带宽是由工作负载、协议和底层 IP 之间的多层交互决定的。我们首先讨论三种协议(CXL.io、CXL.cache 和 CXL.mem)的共同开销,然后讨论常见流量组合下的可实现数据带宽。

对于 68 字节 Flit 模式下的 CXL.io,假设 DLLP 开销为 2%,在同步 Hdr 开启或关闭的情况下,链路效率分别为 0.906 和 0.92。请注意,本地 PCIe 的效率要高出 6%,因为 PCIe 不包含 Flit 开销。对于使用 256 B 和 128 B LO Flits 的 CXL.io,Flit 开销为 6 B(Hdr、DLLP)+ 6 B(FEC)+ 8 B(256 B)/12 B(128 B LO)(用于 CRC)。256 B Flit 的总开销为 20 B,128 B LO Flit 的总开销为 24 B,链路效率分别为 0.92 和 0.91。

68 字节 Flit 模式(CXL 1.1-2.0)下的 CXL.cache+mem 有三个常见开销: 128/130 表示同步 Hdr 开销(除非支持同步 Hdr 旁路),374/375 表示公共时钟 SKP 有序集造成的带宽损耗(其他模式更高),64/68 表示 Flit 开销(协议 ID 和 Flit CRC 各 2 字节)。因此,同步 Hdr 开启时的链路效率为 0.924,同步 Hdr 关闭时的链路效率为 0.939。这包括积分和链路可靠性机制,如 Ack/Nak(Ack:确认,Nak:负确认)。

对于 CXL.cache 和 CXL.mem 的 256 字节和 128 字节 Latency-Optimized (128 B LO) Flits,整体链路效率为 15/16 (=0.938),因为有 15 个时隙,一个等效时隙用于 FEC/ CRC/ Hdr 等。CXL.cache 和 CXL.mem 的插槽数量相差无几,即使考虑到可扩展性所需的额外位数。因此,正如下文所述,三种 Flit 类型的带宽效率往往相似。

在 CXL.io 和 PCIe 中,有三种常见的流量组合可作为性能基准:100% 读取、100% 写入和 50-50 读写。表 3 根据参考文献中描述的方法,总结了三种流量组合中每种流量大小、每种 Flit 类型的 CXL.io 带宽。典型的工作负载包括小型有效载荷(4 B-32 B)和中大型有效载荷(64 B 及以上)的混合。尽管商用系统为客户端 CPU 部署的最大有效载荷大小为 128 B(或 32 双字,又称 DW),为服务器 CPU 部署的最大有效载荷大小为 256 B/512 B(64/128 DW),但为了完整起见,我们还是提供了最大 4 KB(1,024 DW)有效载荷大小的预测值。

 qq.jpg

表 3. CXL.io 以 GB/s 为单位的可实现带宽,适用于不同流量混合和有效载荷大小的 CXL 2.0 68 B Flits 和 CXL 3.0 256 B 和 128 B Flits x16 链路,速度为 32 GT/s

CXL.cache: 设备使用 D2H 中的 RdCurr 从内存读取高速缓存行时,会产生一个 H2D Data_Hdr 和 H2D Data。每个 H2D Data_Hdr 为 24 位,一个插槽中可容纳 4 个,即一个插槽中可传输 4 个高速缓存行。每个 H2D 数据为 64 字节,因此需要 4 个插槽。因此,x16 CXL 设备从处理器读取 68 字节 Flit 格式的数据时,可获得 (16/17) *0.94*64 GB/s = 56.6 GB/s 的带宽。对于 256 字节和 128 字节延迟优化的 Flits,数据是瓶颈,因为每个 H 插槽最多可以有 4 个 H2D Data_Hdr。对于 256 字节的 Flit,我们只有 14 个插槽可用于数据,可容纳 3.5 个高速缓存行。因此,256 字节 Flit 的可实现带宽为:(14/16) *128=112 GB/s;128 字节延迟优化 Flit 的可实现带宽为:(13/16) *128=104 GB/s。

对于写入,设备会发出 D2H 请求 (RdOwn)。这将产生一个带数据的 H2D 响应。然后,设备发出 D2H Dirty Evict,获得 H2D Resp (Wr Pull),从而执行 D2H Mem Wr。这样,D2H 方向上每一行缓存数据就会产生 3 个 Hdr(D2H Req RdOwn、D2H Dirty Evict + Data Hdr)。对于 68 字节的 Flit,3 个 Hdrs 占用两个插槽(如 D2H Req RdOwn+ Data Hdr、D2H Dirty Evict),因此每个方向的速度为 (4/6) *0.94*64 GB/s = 40 GB/s。对于 256 字节和 128 字节延迟优化的 Flit 格式,D2H 方向有 4 个 G 插槽和 2.25 个任意插槽(Req 和 Evict Dirty 插槽各一个,Data_Hdr 插槽为 ¼,因为任意插槽中可以有 4 个),因此可实现的数据带宽为(4 个数据插槽/6.5 个总插槽)*(15/16)*128 = 73.8 GB/s。

CXL.mem: 在 M2S(第 3.5 节)中,CPU 的内存读取作为 MemRd 发送。对于 3 型设备,其响应包括 S2M DRS Hdr (MemData) 和 4 个数据插槽 (64B)。如果设备是 2 类设备,则需要额外的 S2M NDR 以完成 (Cmp)。对于写入,CPU 发送 M2S Req (MemWrite) 和 4 个数据插槽,生成 S2M NDR 作为 Cmp。

实施过程中,CPU 会尝试在一个插槽中打包多个标头,以最大限度地提高效率。CXL 规范允许在一个插槽中对各种标头进行不同的打包排列,这些排列使用所谓的 H* 符号表示。

有几种具有代表性的工作负载可用于评估内存带宽性能。100% 读取,表示为 1R0W;100% 写入,表示为 1R1W,因为每个高速缓存行的写入都会在更新前读取内存内容;等量读写,表示每写入一个高速缓存行就会读取两个高速缓存行。表 4 总结了不同流量组合下 CXL.mem 的可实现带宽。详细推导见参考文献。当只有读取而没有写入时,M2S 方向上没有真正的数据传输(只有读取请求)。因此,该方向的数据带宽为 0,而 S2M 方向则主要是数据(2DRS 有 1 个数据头插槽,2 个高速缓存行有 8 个数据插槽)。因此,数据效率为:链路效率 0.939 x 插槽效率 8/9 x 64 GB/s 原始带宽 = 53.5 GB/s。其他条目也采用类似方法,详见参考文献。SPR Flit 包装逻辑中的调度程序遵循 CXL.mem 的贪婪算法,优先处理 Flit 中第一个 16 B 插槽的 H3,然后是 H5,如果计划发送的数据少于 64 字节,则在其余 Flit 中填充数据。如果计划发送 64 字节或更多数据,则会调度一个全数据 Flit。采用这种方法后,68-B Flit 模式的测量带宽与表 4 中的数字非常接近。

 ww.jpg

表 4. 对于速度为 32 GT/s 的 x16 链路,CXL.mem 在 CXL 2.0 68 B Flits 和 CXL 3.0 256 B 和 128 B Flits 不同流量混合情况下的可实现带宽(GB/s)。

对于 256 字节标准或 128 字节延迟优化 Flit,设计人员需要考虑额外的限制。例如,H/HS 插槽可能只用于数据头。调度将确保在有数据(或报头)要发送时,G 槽不会空着。因此,先于数据发送的报头将被优先考虑,并择机放置在 H/HS 插槽中,同时确保调度的数据不超过 5 个高速缓存行。我们还确保其他报头向前推进。

利用 CXL 3.0中引入的 UIO/BI 流量,可以绕过主机处理器,使用 CXL.io UIO 流量在设备间直接进行访问,既可用于 HDM 访问,也可用于不需要缓存的域间消息。由于 I/O 设备和内核通常不会同时访问相同的数据,因此绝大多数情况下都不会调用 BI-Snp 机制来执行一致性。这有助于提高链路效率,缓解主机-处理器链路的拥塞问题。在表 5 的分析中,即使在 100% 的访问都会导致 BI-Snp 的病理情况下(表 1b 中的 x =1.0 情况),该机制的效率提升也非常显著。这种从主机和设备同时进行的访问可能发生在用于同步的控制数据结构上。通常情况下,我们会将此类数据结构置于主机内存中。不过,即使 100% 的访问都会导致 BI-Snp,UIO/BI 也比跨链路的多缓存行传输要好。

 ee.jpg

表 5. 反向验证(BI)和无序 IO(UIO)流的链接效率

    7 讨论    

我们将讨论 CXL 对计算领域的四种影响,然后概述一系列初步的未来发展方向。

7.1 对计算领域的影响

影响 1:CXL 对设备的网络效应。与 PCIe 相比,CXL 显著扩展了使用模式和功能,例如,延迟更低、池化和硬件一致性。这些优势促使 I/O 设备采用 CXL。最初,这可能最适用于加速器和内存/存储设备,因为CXL.cache和CXL.mem可带来巨大的性能提升,而CXL池可节省总体拥有成本。最终,CXL 的采用可能会产生网络效应,网络接口等其他 IO 设备必须提供 CXL,因为 CXL 将成为通用访问机制。同样,近内存或内存处理系统也可能采用 CXL,因为 CXL 对高速缓存一致性的强大支持大大简化了编程模型。

影响 2:内存向封装内并行总线和封装外 CXL 迁移。与本地连接内存(DDR)相比,CXL 具有基本的扩展和效率优势。CXL 的每引脚带宽高出 8 倍,容量也更大,因此具有显著的可扩展性优势。内存池和异构内存介质使 CXL 具有成本优势。CXL 还有助于散热,因为与 DDR 相比,它能实现更长、更灵活的主板布线。这些优势是以高于 DDR 的空闲延迟(通常是 DDR 延迟的两倍)为代价的。在考虑加载延迟时,CXL 因其带宽优势可能比 DDR 性能更好,而封装内内存的性能将明显优于两者。一个自然的预期是,将有更多内存迁移到 CXL 和封装内存。最终,CXL 将成为 CPU 和加速器的唯一外部内存连接点。

影响 3:CXL 将发展成为机架或集群级互连。与当今基于以太网和 InfiniBand 的数据中心网络相比,CXL 可将延迟降低一个数量级。此外,CXL 的连贯内存共享和细粒度同步可显著提高分布式系统的性能,适用于大型机器学习模型和数据库等关键工作负载。不过,CXL 需要专用布线,对电缆长度、适配器和重定时器的使用等有严格要求。这导致成本大大增加,灵活性也比现在的数据中心网络低。因此,CXL 有可能部署在较小的范围内,如机架内或跨几个机架(集群或 pod)。例如,当前的财务模型指出,子机架 CXL 部署是总体拥有成本的甜蜜点。随着标准化带来的成本改善,CXL 的应用范围可能会扩大,但 CXL 不太可能取代以太网成为整个数据中心的网络标准。

影响 4:CXL 将实现高度可组合系统。可组合性意味着可在运行时动态组装组件和资源,并将其分配给工作负载或虚拟机。我们预计,内存设备和 IO 设备(如网卡、加速器和存储设备)都将发展出多主机功能,允许通过 CXL 将其容量的一部分动态分配给各个主机。由于多路复用机会增加,聚合和池化设备可显著提高资源利用率,从而降低成本。这种设计还有利于通过共享内存、消息传递和 CXL 点对点通信加速分布式系统。不过,可组合系统仍有别于将通过 CXL 连接的所有资源视为一个单一的大系统。工作负载仍然倾向于本地化,并尽可能少地跨越 CXL 链接,以最大限度地减少一致性流量和任何故障的爆炸半径。

7.2 未来方向

CXL 开启了计算机科学与工程领域的研究方向。在计算机体系结构中,CXL 为新内存控制器功能的原型设计和部署开辟了道路,例如自适应 DRAM 刷新以节省功耗和提高性能,低成本提高可靠性,以及减少内存浪费。外部存储器控制器的发展可以独立于主 CPU,而且成本较低,有利于加快迭代和定制。研究还可探讨对 CPU 架构的影响。例如,随着更高的内存延迟和更多的飞行高速缓存线,人们可能会期待不同的预取和缓冲区大小策略,以及对减少内存访问延迟的更大兴趣。另一个挑战可能是延迟命中的影响,这需要更严格的模拟和建模以及不同的高速缓存管理策略。

在计算机系统中,CXL 内存池将引发本地和分布式内存管理的变革。例如,面对来自远程主机的内存压力,我们需要能确定工作负载优先级并保证性能的机制。我们可能还需要系统级方法来缓解分布式内存结构中的拥塞和故障。例如,CXL 标准中的 QoS 目前仅限于 CXL.mem,无法解决结构拥塞问题。工作负载调度也需要发展,以支持可组合性,与现有的数据中心设计相比,设计空间大幅扩大,位置定义也有所不同。CXL 规范需要不断发展,以提供跨其他协议的 QoS,同时处理 Fabric 拥塞,并在事务级支持动态多路径,以实现 QoS 和故障转移。

在计算机工程领域,研发工作需要继续降低 CXL 内存、加速器和交换机的延迟,以扩大 CXL 的适用性。现在有很多机会,包括迭代工程 CXL 构建模块、利用工艺进步(第 6.1 节)和更好的打包算法(第 6.3 节)。生态系统还需要制定严格的方法来控制误差和管理 CXL 增加的爆炸半径。使用负载存储语义处理故障和拥塞热点与网络应用有着不同的限制,后者可以处理丢失的数据包以及完全失序的数据包交付。最后,CXL 可以进一步增强和部署,以扩展到多个机架,并通过动态故障切换和更细粒度的 QoS 增强功能为多个应用提供高可靠性和低延迟的负载存储访问,这些功能将纳入未来的规范修订中。通过通用片式互连快车(UCIe)重定时器实现的协同封装光学技术,我们有望实现在数据中心构建从机架到 pod 的可组合和可扩展系统的愿景,从而实现具有显著总体拥有成本优势的高能效性能。

    8 结论    

CXL 解决了行业面临的重大挑战,同时遵循基于开放性、简易性和向后兼容性的设计理念。这使得 CXL 成为整个行业的通用标准。所有这些因素使得 CXL 在学术界也成为一个热门研究领域。我们希望本教程既能作为标准的介绍和起点,也能作为研究思路的基础。

文章来源:半导体行业观察

导航栏目

联系我们

联系人:袁经理

手机:051683539599

电话:051683539599

邮箱:ziyu.yuan@ae-fab.com

地址: 徐高新康宁路1号高科金汇大厦A座14楼

用手机扫描二维码关闭
二维码