Direct Access, High-Performance Memory Disaggregation with DIRECT CXL
Introduction
Memory disaggregation主要分为两种,一种是基于页的,利用虚拟内存空间,将page cache中的数据swap到远端的内存中。另一种是是基于对象的内存池化则需要利用自己的database(如KV)。无论是哪种,都需要利用RDMA(remote direct memory access)来进行数据的交换,但是RDMA的数据管理会带来软件交织、数据大量拷贝,性能相比于本地的内存访问要慢几个数量级。
本文提出利用Intel的CXL(compute express link).Mem来进行Memory disaggregation(内存池化),连接主机处理器综合体和远程内存资源。主要做了如下工作
- 在远端安装CXL控制器
- 网络部件(如交换机)iadsda
- CXL software,以此提供load/store完成内存访问
Background
Remote Direct Memory Access
RDMA或者类似的协议可以给主机连接多个远端的内存,结构如上图所示。每一侧都需要硬件支持,RNIC(RDMA NIC)。在主机侧和远端发数据之前,需要先定义MRs(memory regions)到RNIC上,RNIC会把所有和内存区域有关页的物理地址注册到MTT(memory translation table)。当主机需要对远端内存进/写操作时,远程节点可以通过MTT转换得到相应的本地地址,操作本地的内存区域。
Swap: Page-based Memory Pool
基于页的内存池化,好处是可以利用内核的虚拟内存机制,不需要进行复杂的修改,每次和远端节点交换数据通过page fault完成。然而,page fault也会带来性能的问题,page fault带来的中断处理、上下文切换给Swap很大的开销。
Design
虽然缓存页和基于网络的数据交换在目前的技术中是必不可少的,但不幸的是,它们会使内存池化的性能大大恶化。DIRECT CXL则直接将远程内存资源连接到主机的计算综合体,并允许用户通过纯粹的lo/store指令来访问。
通过连接主机和远端内存
现有的内存池化技术仍然需要远程内存节点侧的计算资源。这是因为所有DRAM模块及其接口都被设计为无源外围设备,需要控制计算资源。相比之下,CXL.mem允许主机计算资源通过PCIe总线(FlexBus)直接访问底层内存;它的工作原理类似于本地DRAM,与它们的系统总线相连。这里的CXL内存设备也是无计算资源设备,通过控制器连接总线暴露给host
软件Direct CXL
与RDMA不同的是,一旦在主机和CXL设备之间建立了一个虚拟的连接,在主机上运行的应用程序可以通过引用HDM的内存空间直接访问CXL设备。然而,它需要软件运行实施的驱动程序来管理底层的CXL设备,并在应用程序中在其内存空间中提出它们的HDM。因此,支持DIRECTCXL运行时简单地将HDM的地址空间分割成多个段,称为cxl-namespace允许应用程序访问,每个CXL-namespace作为内存映射的文件(mmap)。
协议安装
现有的计算机拓扑图如图 5a所示,n个计算机通过交换机连接m个CXL设备。在directCXL的原型中,n和m是四个,但这些数字可以通过拥有更多的CXL交换机来扩展。具体来说,每个CXL设备原型都建立在directCXL定制的附加卡(AIC)CXL内存刀片上,它采用了16纳米的FPGA和8个不同的DDR4 DRAM模块(64GB)。在FPGA中,directCXL制作了一个CXL控制器和八个DRAM控制器,每个控制器管理CXL端点和内部DRAM通道。由于目前还没有支持CXL的处理器架构,directCXL还使用RISC-V ISA建立了自己的内部主处理器,它采用了四个失序的内核,其最后一级缓存(LLC)实现了CXL RP。每个支持CXL的主处理器都是在一个高性能数据中心加速卡中实现的,扮演着主机的角色,它可以单独运行Linux 5.13和DIRECT CXL软件。directCXL通过PCIe背板将四个CXL设备(32个DRAM模块)暴露给四个主机。directCXL用另外一块实现IRECT CXL的CXL开关的加速器卡来扩展背板。这个开关实现了调频,可以创建多个虚拟层次,每个层次以灵活的方式连接一个主机和一个CXL设备。
Evaluation
相比于RDMA,directCXL 可以快8.3倍,主要有两个原因,首先,DirectCXL直接连接计算节点 和内存节点,而RDMA需要在InfiniBand和PCIe之间改变/接口。其次、 DirectCXL可以将内存/存储请求从LLC转化为CXL信息流,而RDMA则需要在InfiniBand和PCIe之间改变协议/接口来读取数据。
总结
本人对于RDMA的相关工作了解的还不够,留待之后完善