CXL 介绍
An Introduction to the Compute Express LinkTM (CXLTM) Interconnect
arXiv Paper
对CXL技术进行介绍,包括CXL 1.0、CXL 2.0、CXL 3.0,对各规范的提升做介绍。整理了现有的CXL实现方法,延迟测试结果,对未来发展进行展望。
How Flexible is CXL’s Memory Protection? Replacing a sledgehammer with a scalpel
Queue 2023 Paper 泛读笔记
CXL提供的是粗力度的内存共享,没有提供细粒度的内存保护功能,作者提出用针对特定领域优化的去中心化能力系统来优化CXL的安全性。
CXL (Compute Express Link) Technology
Journal of Computer and Communications 2023 Paper 阅读笔记
对CXL的一些基础知识进行整理,包括一些对CXL的问题、CXL协议、完整性和数据加密(IDE)、数据速率。
提出一些使用CXL的看法:(1)SSD是块设备(而不是随机访问负载存储设备),不需要CXL控制器。(2)应用程序应该不知道正在使用什么内存,也不知道不同的延迟。操作系统/内核应该负责为应用程序分配正确的内存类型。(3)可以创建一个malloc函数,该函数可以指定它是否可以使用延迟更高的内存池,并由操作系统相应地为其提供服务。可以将现有的类似NUMA的方法应用于CXL。
CXL and the Return of Scale-Up Database Engines
arXiv Paper 泛读笔记
对CXL在数据库领域的使用前景的分析,利用CXL带来的新功能,可以更好的实现内存扩展、分离式内存、近数据处理。文中提出了许多CXL带来的新问题,有待后续进行优化。
Compute Express Link(CXL): An Open Interconnect for Cloud Infrastructure
DAC 2023 Paper 阅读笔记
对CXL技术的介绍,CXL用于解决三个挑战:缓存一致性、内存带宽不足、资源滞留或未充分利用。介绍三代CXL规范的主要创新点:(1)CXL 1.0支持单个节点上直接连接主机处理器和CXL设备,提出三种CXL协议和三种CXL设备;(2)CXL 2.0支持跨节点切换和资源池,利用交换机,支持跨多个域(节点)的设备池、扇出交换机、对持久内存的支持、安全性。(3)CXL 3.0支持织物拓扑的可组合系统,加快传输速率和带宽,提出无序I/O(UIO)支持织物拓扑,提出反向无效(BI)支持主机以非缓存的方式访问其他主机管理的设备内存,支持多级交换机,引入节点间一致共享内存。
CXL 实现
Demystifying CXL Memory with Genuine CXL-Ready Systems and Devices
MICRO 2023 Paper 阅读笔记
使用CXL模拟器和真实CXL硬件,比较其性能。发现不同CXL控制器的设计会显著影响延迟的带宽,使用模拟器相对来说延迟更高带宽更小;使用CXL内存时使用页面迁移策略,需要考虑迁移带来的开销,否则会带来负优化;使用CXL内存会增加延迟,对𝜇s级延迟敏感的内存密集型应用,会显著增加p99延迟,对𝑚s级延迟敏感的复杂应用,增加的延迟可忽略不计;使用CXL内存会增加总带宽,但数据分布不合理时,带宽反而下降,需要有效的设计算法来优化吞吐和带宽。
Direct Access, High-Performance Memory Disaggregation with DirectCXL
ATC 2022 Paper
基于硬件实现了CXL协议,将CXL 2.0引入实际系统并分析支持CXL的分解内存设计。
Memory Pooling With CXL
IEEE Micro 2023 Paper
DirectCXL的完整版,设计基于CXL的内存池,由于传统基于页面或基于对象的内存池。分析了基于CXL各步骤的实现,通过CXL连接主机和内存,运行时的软件堆栈,硬件实现方法。通过CXL优化减少了访问内存池时的网络开销、复制开销、利用CPU cache优化访问。在各种实验下均有良好的性能。
未来会基于CXL 3.0继续扩展,添加多缓存设备,反向无效窥探,利用多头逻辑设备和动态容量设备支持数据共享和内存动态扩展,结构扩展到更多互联设备。
按照这个实验的结果,L1 cache延迟4ns,L2 cache延迟96ns,本地内存240ns,CXL 1.312us,RDMA 8.108us。CXL比RDMA快8.3倍。
CXLMemSim: A pure software simulated CXL.mem for performance characterization
arXiv Paper
构建模拟器实现CXL.mem,只写了各简单的介绍,没有详细细节。模拟器先在现有软件上执行程序,并跟踪内存操作,将应用程序周期性中断插入三种延迟。https://github.com/SlugLab/CXLMemSim
局限性:目前开来模拟时间还是很长,对于系统调用的模拟时间提升34-141倍,不知道模拟的准不准
SMT: Software-Defined Memory Tiering for Heterogeneous Computing Systems With CXL Memory Expander
IEEE Micro 2023 Paper
提出基于CXL的内存扩展方案。构建了MXP原型,使用CXL控制器增强系统内存容量和带宽。开发了软件套件SMDK,用于在具有MXP的异构内存系统上执行内存分层、管理和智能分配。https://github.com/OpenMPDK/SMDK ,代码的wiki里介绍了一些细节。
文章里没讲具体的实现细节,就大概介绍了一下架构和各种功能,看不懂咋实现的。
按照这个实验的结果,本地内存100-140ns,CXL 420-600ns。但表格里写的平均是145ns,QoS 99.9%以上才和实验结果差不多425ns-567ns。顺序读或写带宽26GB/s,随机读写一起40GB/s,用的PCIe 5.0,理论上双通道时可达到64 GB/s。
Compute Express Link (CXL): Enabling Heterogeneous Data-Centric Computing With Heterogeneous Memory Hierarchy
IEEE Micro 2023 Paper 泛读笔记
对CXL协议的实现,涵盖了CXL 1.0和CXL 2.0的协议和实现方面,使用64.0-GT/s脉冲幅度调制4级电平(PAM-4)信令,将带宽增加一倍。
CXL 应用
Lightweight Frequency-Based Tiering for CXL Memory Systems
arXiv Paper 泛读笔记
针对利用本地内存和CXL内存的分层系统,如何同时提升数据放置准确率;减少内存和运行时间开销。本文提出FreqTier,用于CXL内存的基于频率的分层系统。提出三个创新点:(1)采用了基于频率的分层,使用高性能硬件计数器以页粒度跟踪内存访问。(2)使用计数布隆滤波器(CBF)(一种概率数据结构)跟踪页面访问频率。(3)采用动态方法,根据应用程序内存访问行为调整分层操作的强度,调整页面迁移和访问采样频率。
Improving key-value cache performance with heterogeneous memory tiering: A case study of CXL-based memory expansion
IEEE Micro 2024 Paper 阅读笔记
利用CXL扩展内存,满足超出DRAM的带宽或容量需求。本文开发了一个CXL 2.0内存扩展解决方案,包括:(1)E3.S CXL内存原型;(2)HMSDK,提出新的NUMA内存分配策略,根据用户定义的内存分配比率在NUMA节点之间交错分配内存页。(3)透明分层和数据分层两种内存系统架构,透明分层中DRAM和CXL内存作为统一的内存层共存,数据分层中将DRAM和CXL内存区分为单独的内存层,根据数据类型,将元数据、索引数据存在DRAM中,键值数据存在两种内存中。并将其应用于Meta的缓存系统。
CXL-Enabled Enhanced Memory Functions
IEEE Micro 2023 Paper 阅读笔记
介绍了增强内存功能(EMF)的概念,提供了如何在智能内存控制器(IMC)中实现两个用例(访问热图和内存回滚)的EMF。本质来说是利用近数据处理的思路,在CXL设备端通过IMC获取更多数据,例如访问跟踪、缓存行状态,并响应来自主机的请求,实现更高的性能。
提出了EMF设计思路,利用以下一个或多个属性来实现其功能:(1) 接近内存介质本身。(2) 能够在数据平面上插入内存读/写命令。(3) 主机处理器缓存层次结构外部。(4) 独立于主机ISA限制。(5) 与虚拟内存子系统分离。(6) 能够与主机处理器复合体进行交互,以保持数据一致性。
Dynamic Capacity Service for Improving CXL Pooled Memory Efficiency
IEEE Micro 2023 Paper 阅读笔记
针对CXL扩展池内存,从软件和硬件方面实现了动态容量服务(DCS),根据主机的需求动态地从池中分配或释放内存。DCS硬件引擎支持动态容量分配和释放,包括:内存管理单元(MMU)、邮箱、内存段表、内存保护单元(MPU)、安全擦除器。DCS软件框架支持用户使用CXL池内存,包括:CXL池内存检测和管理、DCS引擎驱动程序、支持DCS的Kubernetes。并实现了用于传输请求的API,支持三个命令:获取内存段状态、设置内存段分配、设置内存段释放。最终基于FPGA实现了DCS原型,可以适用于不同孽畜大小的节点组成内存池,并提高系统内存利用率。
Cache in Hand: Expander-Driven CXL Prefetcher for Next Generation CXL-SSDs
HotStorage 2023 Paper 泛读笔记
针对CXL-SSD的预取,现有方法面临硬件逻辑大小限制和不同CXL层延迟不同。本文提出ExPAND,一种扩展器驱动的CXL预取器,将预取卸载到CXL SSD。包括两个关键技术:(1)使用用于地址预测的异构机器学习算法管理跨各种扩展器访问的数据预取,利用CXL.mem的反向失效(BI)确保数据一致。(2)在枚举和设备发现过程中识别底层CXL网络拓扑和设备延迟,技术每个CXL-SSD的精确端到端延迟,并写入每个设备的PCIe配置空间。因此,预取算法可以确定获取数据的最佳时机,减少了SSD后端介质施加的长延迟。
Apta: Fault-tolerant object-granular CXL disaggregated memory for accelerating FaaS
DSN 2023 Paper 泛读笔记
针对云环境的FaaS,如何通过基于CXL的分离式内存进行优化。直接使用CXL会面临部分故障引起的不可用。本文提出Apta,基于CXL的对象粒度内存接口,用于维护FaaS对象。关键创新是新的容错一致性协议,包括两个部分:(1)惰性失效,将无效项移出写入的关键路径,这样当缓存共享程序的服务器出现故障时,写入程序就不会被无限期地阻止。但会导致缓存不一致。(2)一致性感知调度,对FaaS调度器进行了更改,使其只能在无未决失效的服务器上调度功能,从而实现强大的一致性和可用性。
A Case Against CXL Memory Pooling
HotNets 2023 Paper 泛读笔记
针对在数据中心或云中利用CXL扩展内存池的可行性,本文分析结果是目前不可行,使用CXL内存池面临三个问题:成本、复杂性和实用性。(1)CXL池的成本将超过减少RAM所节省的成本。因为使用CXL池有大量的基础设施成本,如与以太网完全并行的网络基础架构。(2)CXL的延迟远远高于主内存,要获得良好的性能,需要重写软件以显式管理CXL内存,将块复制到本地DRAM中,增加了软件的复杂性。(3)CXL内存池化的动机是针对被搁置的内存,即由于没有更多的计算资源来支持虚拟机而无法分配给虚拟机的内存,现在可以被其他服务器集中使用。但现代服务器相对于大多数虚拟机来说都很大,几乎没有内存搁浅。
Accelerating Performance of GPU-based Workloads Using CXL
FlexScience 2023 Paper 泛读笔记
针对基于GPU的HPC工作负载,其通常受到板载系统存储器的数量以及共享存储器资源(例如主存储器)和互连(例如PCIe)的争用的限制。本文提出了一种高效的内存分配方法,结合了多GPU系统的每个插槽上的内存需求进行内存分配。
局限性:整体来看方法比较简单,就是根据各种资源剩余数量和需求量进行分配。实验也是基于模拟,在访问过程增加CXL惩罚,实验不太准。
Evaluating Emerging CXL-enabled Memory Pooling for HPC Systems
MCHPC@SC 2022 Paper 泛读笔记
用仿真器和模拟器评估CXL对HPC应用和图应用的性能影响,将CXL用于内存容量扩展和带宽扩展。
结果显示,在仿真的CXL内存池系统上,CXL内存池占75%的内存使用情况下,七个HPC应用中有五个在仿真CXL系统上几乎没有性能降级。在仿真的高带宽CXL系统上,OpenFOAM和Hypre等带宽敏感性最高的应用程序也保持了性能,突显了CXL启用的内存系统在可扩展、成本效益高带宽系统方面的潜力。对于共享内存服务器上的干扰需要通过系统级的协调来解决,基于对每个作业动态使用情况的理解,以减轻性能降级。
Transactional Indexes on (RDMA or CXL-based) Disaggregated Memory with Repairable Transaction
arXiv Paper 泛读笔记
在分离式内存场景下,如何保证客户端操作的事务性,即故障原子性和隔离性,避免客户端崩溃导致索引数据的损坏。作者提出在事务进行前先记录redo log,如果发生故障则通过redo log来恢复;通过租约锁识别客户端故障,后续客户端如果发现租约锁过期则认为发生故障,并主动通过redo log恢复;保证修复操作时幂等的,实现协调修复操作。
CXL over Ethernet: A Novel FPGA-based Memory Disaggregation Design in Data Centers
FCCM 2023 Paper 泛读笔记
优化分离式内存的访问。利用CXL和RDMA结合的方法,用CXL支持本机内存加载/存储访问;利用RDMA进行跨机架的访问,并通过封装以太网帧减少DMA复制和地址转换;通过缓存远程内存数据和拥塞控制算法减少延迟。
SDM: Sharing-enabled Disaggregated Memory System with Cache Coherent Compute Express Link
PACT 2023 Paper 阅读笔记
利用CXL优化分离式内存,利用CXL特性优化多处理器间的缓存一致性协议(MESI协议)。通过支持共享的控制流(SHA-CF)促进多主机间的共享,本质还是基于嗅探的MESI协议,利用CXL反向失效进行优化;利用CXL.io管理节点资源,不影响CXL.cache和CXL.mem传输;提出推测访问,就是乐观的执行仿存,若权限检查失败在回滚。
局限性:总体来看比较简单,利用CXL的特性来优化MESI协议;实验基于Intel PIN tool构建了模拟器,但没有具体细节,只对比了基础的基于嗅探的MESI协议,没有对比更好的缓存一致性算法。
Computational CXL-Memory Solution for Accelerating Memory-Intensive Applications
IEEE Computer Architecture Letters 2023 Paper 泛读笔记
通过CXL利用分离式内存加速应用计算。在CXL内存设计了计算核心,减少通过CXL传输的数据量;通过交织内存通道,利用MAC运算器隐藏累加器延迟,充分利用内部带宽。
CXL-ANNS: Software-Hardware Collaborative Memory Disaggregation and Computation for Billion-Scale Approximate Nearest Neighbor Search
ATC 2023 Paper
针对十亿规模近似最近邻居搜索(ANNS)问题,通过CXL缓解内存压力。
针对算法细节优化,基于关系感知进行图缓存,利用领域专用加速器(DSA)、EP端计算减少传输开销,调整算法执行顺序隐藏CXL内存池的延迟,对算法执行过程放松依赖进行调度。总体基于CXL实现十亿规模ANNS取得良好性能。
Overcoming the Memory Wall with CXL-Enabled SSDs
ATC 2023 Paper
针对计算资源和存储资源增长速度不匹配导致内存墙问题,本文提出基于CXL的闪存作为内存。
开发了一种新的工具来收集应用程序的物理内存跟踪,同时收集LLC未命中或驱逐引起的内存访问和页故障导致的页表更新,将二者组合成物理内存跟踪。https://github.com/spypaul/MQSim_CXL
克服了闪存的三个挑战:粒度不匹配、微秒级延迟、持久性有限。通过在闪存前添加DRAM作为缓存,设计未命中状态保持寄存器(MSHR)减少缓存未命中时的流量,设计简单的预取策略进行预取,使68–91%的请求延迟小于1微秒,估计寿命至少为3.1年。
局限性:文章所探讨的CXL闪存的设计没有考虑闪存的内部任务,如垃圾收集和损耗均衡,所考虑的主机系统可能无法完全反映CXL引入的新系统特性。只使用了MQSim模拟器。
Hello Bytes, Bye Blocks: PCIe Storage Meets Compute Express Link for Memory Expansion (CXL-SSD)
HotStorage 2022 Paper
提出了使用CXL-SSD扩展内存的思路,与上一篇思路相近。但没有做更细节的优化,只是简单用硬件实现了CXL-SSD,性能不佳。主要讨论了CXL-SSD的CXL互连和可扩展性潜力。讨论了主机向设备提供提示时的设计思路,通过在CXL消息中添加注释,将不同用户场景通知CXL-SSD,用于缓存预取或汇总数据批量写入。
A Case for CXL-Centric Server Processors
arXiv Paper
针对使用CXL接口替换DDR接口,从而极大增加带宽。
提出使用基于CXL的内存替代基于DDR内存,将内存请求分布在4倍以上的内存通道上,CXL减少了对内存总线的排队影响。由于排队延迟在有负载的内存系统中占主导地位,因此这种减少远远弥补了CXL引入的接口延迟开销。提出了分对称的CXL接口优化,读写接口不设计成1:1,根据读写需求设计,但PCIe标准目前不允许这样做。
局限性:设计过于简单,也没有很多具体场景的优化,实验基于模拟器做的比较简单,没有实际模拟CXL。
TPP: Transparent Page Placement for CXL-Enabled Tiered-Memory
ASPLOS 2023 Paper
对于内存扩展的场景,如何灵活使用本地内存和较慢的CXL内存,目标是将热页面留在本地内存,冷页面卸载到CXL内存。
文章构建Chameleon,轻量级的用户空间工具,用于分析应用程序的内存访问行为,如页面温度、不同类型页面的温度、不同页面类型使用情况。
根据分析结果设计TPP,内核空间下的透明的页放置策略,使用轻量级回收机制将冷页降级到CXL内存,将分配和回收逻辑解耦增加本地内存空闲页空间,基于LRU的页提升机制将热页提升到本地内存,基于页面感知的分配将不同类型页初始分配到不同内存层。
主要使用NUMA架构进行模拟,两个节点,一个有CPU和内存,另一个只有内存。也部署了基于FPGA支持CXL 1.1的硬件但延迟较高。实验结果本地内存利用率更高,吞吐量更高。
Pond: CXL-Based Memory Pooling Systems for Cloud Platforms
ASPLOS 2023 Paper
对生产云集群中观察发现内存滞留和未接触内存,可以通过内存池+CXL内存缓解,用内存池避免内存滞留,将未接触内存分配到廉价的远程内存节省DRA成本。
本文提出Pond,满足云提供商要求的全栈内存池,由硬件、系统软件和分布式系统层组成,用于管理池/CXL内存。提出4个技术:用8-16个套接字之间的池大小即可实现池的大部分优势;通过ML模型预测工作负载的延迟敏感程度、未接触内存大小,根据结果分配内存位置;将未接触内存分配到慢速内存节点不会影响工作负载性能;通过监控系统避免ML预测错误导致的性能下降。
套着CXL壳的云存储下内存分层技术,对云上工作负载分析,发现有节省内存的空间,于是对工作负载要使用的内存做预测,根据预测结果分开申请内存。
Design Tradeoffs in CXL-Based Memory Pools for Public Cloud Platforms
IEEE Micro 2023 Paper
在Pond基础上继续研究,Pond提出要使用更大的CXL内存池(50%),来节省DRAM的成本,本文分析发现使用CXL池会引入其他基础设施开销,反而使用较小的内存池(25%)综合来看节省更多成本。提出使用CXL多头设备(MHD)进行池的连接,相比于CXL交换机可以进一步减少传输延迟。
整体来看论文内容偏简单,绝大多数篇幅都是重述了Pond中的发现,最后分析了一下使用CXL内存池引入其他成本。
BEACON: Scalable Near-Data-Processing Accelerators for Genome Analysis near Memory Pool with the CXL Support
MICRO 2022 Paper
对生物领域的基因组分析问题优化,其中许多应用是内存绑定的,现有方法在通信带宽上和内存扩展方面有瓶颈,作者想设计基于CXL的设计,利用内存池中丰富的内存和CXL提供的高通信带宽。
提出BEACON,优化内存访问和通信。通过添加PE进行计算,添加内存控制器和地址转换器优化内存访问,添加总线控制器和数据打包器优化通信,添加原子引擎优化内存访问,通过数据迁移方法利用数据局部性优化内存访问,针对特定算法设计多芯片合并优化通信。相比与现有方法提升了大量性能但也提升了少量能耗
多数是基于硬件的修改,在CXl架构下针对基因组分析添加硬件解决内存访问和通信的问题。或许可以将这些硬件功能通过软件实现用于其他问题的优化。
Design and Analysis of CXL Performance Models for Tightly-Coupled Heterogeneous Computing
ExHET@PPoPP 2022 Paper
尝试使用CXL优化紧耦合的异构计算,本文用FPGA和GPU的通信作为例子,程序先通过FPGA计算,随后将计算结果传入GPU继续计算。
感觉没有真正实现,只是通过数学公式直接计算,模拟CXL惩罚参数为60%-90%的结果。大多数模拟太理想化了,也没有针对问题做细节上的优化,整体偏简单。只能算是个尝试,用CXL有优化异构计算的空间,但文章没有做很细节的实现。
Failure Tolerant Training With Persistent Memory Disaggregation Over CXL
IEEE Micro 2023 Paper
针对大规模推荐系统,通过CXL实现低开销容错性。使用type-2设备,将PMEM和GPU连接到CXL系统中,通过硬件间相互cache减少数据移动的开销(将整体一次性移动改为了多次小移动,会不会反而增加传输数据量,可能最后结果只有10,但中间计算结果有20)。通过批处理感知调整记录检查点时间,利用PMEM空闲时间记录检查点。将推荐训练的顺序放松,重新调度避免RAW开销,减少检查点记录。
整体思路创新性挺好,实验时因为没有硬件用GPU上计算时间替代CXL系统下的计算时间。第一个优化点利用CXL设备间相互cache,协议里没具体写可以这样实现,属于是自己猜测的功能。
Partial Failure Resilient Memory Management System for (CXL-based) Distributed Shared Memory
SOSP 2023 Paper
分布式共享内存,因为使用CXL技术,可能存在部分故障。例如两个计算节点引用相同内存,其中部分计算节点故障时不影响其他计算节点。基于重做日志无法精确定位故障位置;使用锁无法满足部分故障,获取锁的部分可能发生故障。
本文基于引用计数的内存管理方法,避免不同计算节点间故障后无法恢复的问题,实现CXL系统下的故障恢复。https://github.com/madsys-dev/sosp-paper19-ae
CXL Memory as Persistent Memory for Disaggregated HPC: A Practical Approach
arXiv Paper
将CXL内存用于高性能计算领域,作者展示了从传统PM编程模型可以轻易过度到CXL上,使用CXL可以表现出和PM近似的能力,优势是有更高的带宽。
Enabling CXL Memory Expansion for In-Memory Database Management Systems
DaMoN 2022 Paper
直接用CXL type 3扩展IMDBMS内存,将CXL内存设备仅用于主存储器。增量存储器和操作数据存储在主机DRAM中。当顺序访问主存储器时,预取方案可以有效地隐藏CXL设备的较长延迟。
Performance Evaluation on CXL-enabled Hybrid Memory Pool
NAS 2022 Paper
使用NUMA架构模拟CXL架构,使用SSD作为分层内存的第二层,测试典型工作负载的性能。就是NUMA架构,跟CXL没啥关系。
CXL架构
-
硬件保证了主机和分配的CXL device间的一致性;主机也可以访问其他主机的CXL device,但不保证cache一致性,可以通过禁用缓存或软件负责一致性的方法来访问;主机和主机间通过GIM相互访问,也不支持cache一致性,GIM延迟暂时不知道,假设和主机访问CXL device的延迟相同。
-
多头CXL.mem设备(MHD)连接到多个主机,可以同时将相同的物理内存区域映射到其所有HPA中。
各层级延迟情况