Journal of Computer and Communications 2023 Paper CXL论文阅读笔记整理
CXL概述
CXL(计算高速链路)技术是一种较新的高速互连标准,旨在实现数据中心系统中CPU、GPU和其他高性能组件之间更快的通信。
CXL技术研究:CXL技术基于外围组件互连高速(PCIe)及其扩展。CXL 1.0是一种基于交换机的互连体系结构,在PCIe Gen5电信号上运行,每个通道的数据传输速度高达每秒32千兆字节(GT/s)。CXL技术为缓存一致性和内存语义提供了基于硬件的支持。
CXL技术架构由三个主要组件组成:1)CXL设备:与CXL接口兼容的设备包括处理器、GPU等加速器和智能存储设备;2) CXL交换机:该交换机支持支持CXL的设备之间的通信。交换机可以是外部的,也可以是嵌入式的,允许使用更复杂的拓扑结构;3) CXL内存:CXL内存设备支持CXL协议,以高效共享系统内存。
一些关于CXL的问题
-
SSD等存储设备是否需要本机CXL控制器支持,还是可以使用PCIe接口?
由于SSD是块设备(而不是随机访问负载存储设备),因此它们不需要CXL控制器。PCIe将继续以与今天相同的方式使用。
-
CXL是否解决了内存交错管理控制,还是CXL设备供应商的选择?
内存交错的选择和实现不在CXL规范的范围内。
-
应用程序如何处理不同内存类型的不同延迟?
应用程序应该不知道它们正在使用什么内存,也不知道不同的延迟。操作系统/内核应该负责为应用程序分配正确的内存类型。
-
如何看待应用程序像一个NUMA节点一样对待CXL?
应用程序通常不会感知延迟。理论上,可以创建一个malloc函数,该函数可以指定它是否可以使用延迟更高的内存池,并由操作系统相应地为其提供服务。也可以将现有的类似NUMA的方法应用于CXL。
-
CXL如何支持原子性?
由于CXL内存是缓存一致的,这应该与CPU/直连内存相同。
-
由于每个引脚的带宽更高,CXL最终会取代DDR吗?
CXL延迟的增加是一个问题,但CXL在未来肯定有可能取代DDR。
-
是否仅在专有的跨主机网桥级别支持3路交织?或者可以在每个级别(例如CXL主机桥、USP、设备)都支持它?
CXL不想影响交换机,也不想让它们实现一种增加延迟和复杂性的3向操作。因此,3路交织仅限于主机专有逻辑和设备中的主机。USP不支持3路交织。
CXL协议和标准
CXL协议:
-
CXL.io:该协议在功能上等同于PCIe协议,并利用了PCIe在行业中的广泛采用和熟悉度。作为基础通信协议,CXL.io是通用的,可处理广泛的用例。
-
CXL.cache:该协议专为特定的应用程序设计,使加速器能够有效地访问和缓存主机内存,以优化性能。
-
CXL.memory:此协议使主机(如处理器)能够使用加载/存储命令访问设备连接的内存。
CXL设备:
-
类型1设备:智能NIC等加速器通常缺少本地内存。通过CXL,这些设备可以与主机处理器的DDR内存进行通信。CXL.io + CXL.cache
-
类型2设备:GPU、ASIC和FPGA都配备了DDR或HBM内存,可以使用CXL使主机处理器的内存对加速器本地可用,而加速器的内存对CPU本地可用。它们还位于同一个缓存一致域中,有助于提升异构工作负载。CXL.io + CXL.cache + CXL.memory
-
类型3设备:可以通过CXL连接内存设备,为主机处理器提供额外的带宽和容量。内存的类型与主机的主内存无关。CXL.io + CXL.memory
CXL 1.0/1.1设备一次只能由一个主机访问。CXL 2.0设备可以划分为多个逻辑设备,允许多达16个主机同时访问内存的不同部分。CXL 3.0引入了对等直接内存访问和对内存池的增强,其中多个主机可以一致地共享CXL 3.0设备上的内存空间。
完整性和数据加密(IDE)
分解或分离服务器体系结构的组件增加了攻击面,这是CXL包含设计安全方法的原因。具体而言,三种CXL协议都通过IDE进行保护,提供机密性、完整性和重放保护。IDE在CXL主机和设备芯片中实例化的硬件级安全协议引擎中实现,以满足CXL的高速数据速率要求,而不引入额外的延迟。需要注意的是,CXL芯片和系统本身需要防止篡改和网络攻击。在CXL芯片中实现的硬件信任,可以为安全引导和安全固件下载的安全性和支持提供基础。
数据速率
CXL 1.1和2.0的物理层使用PCIe 5.0电气设备:NRZ信令速率为32 GT/s。
CXL 3.0保持了在广泛采用的PCIe技术上构建的相同理念,并将其扩展到PCIe 6.0版本。使用PAM4信号将CXL 3.0数据速率提高到64 GT/s。
总结
对CXL的一些基础知识进行整理,包括一些对CXL的问题、CXL协议、完整性和数据加密(IDE)、数据速率。
提出一些使用CXL的看法:(1)SSD是块设备(而不是随机访问负载存储设备),不需要CXL控制器。(2)应用程序应该不知道正在使用什么内存,也不知道不同的延迟。操作系统/内核应该负责为应用程序分配正确的内存类型。(3)可以创建一个malloc函数,该函数可以指定它是否可以使用延迟更高的内存池,并由操作系统相应地为其提供服务。可以将现有的类似NUMA的方法应用于CXL。