在上周的ATC'22会议上,韩国的科学技术高级研究所KAIST的CAME Lab发表了一篇DirectCXL内存分解原型实现的文章,该文章提出了世界上第一个基于CXL的直接访问,高性能内存分解框架。CAMEL为大型存储系统提供世界上第一个CXL解决方案框架,可以在大数据应用程序(如机器学习,内存数据库和现实图形分析)中实现出色的性能。CAMEL的CXL解决方案为内存分解开辟了新的方向,并确保了直接访问和高性能的功能。
鉴于KAIST的HPC根源,将DirectCXL原型放在一起的研究人员专注于使用远程直接内存访问(RDMA)协议将CXL内存池与跨系统直接内存访问进行比较。他们使用了一个非常老式的Mellanox SwitchX FDR InfiniBand和ConnectX-3互连,以56 Gb / sec的速度运行,作为CXL努力的基准,InfiniBand的延迟确实降低了。但在过去的几代人中,它们肯定已经停止了降低,并且期望PCI-Express延迟有可能降低,我们认为,从长远来看,甚至超过InfiniBand或以太网的RDMA。可以消除的协议越多越好。
当然,RDMA最广为人知的是InfiniBand网络最初获得其传奇般的低延迟的手段,允许机器通过网络直接将数据放入彼此的主内存中,而无需通过操作系统内核和驱动程序。RDMA长期以来一直是InfiniBand协议的一部分,以至于它实际上是InfiniBand的同义词,直到该协议通过RDMA通过融合以太网(RoCE)协议移植到以太网。有趣的事实:RDMA实际上是基于康奈尔大学研究人员(包括亚马逊网络服务的长期首席技术官Verner Vogels)和Thorsten von Eicken(我们的读者最熟悉的是RightScale的创始人和首席技术官)在1995年所做的工作,比InfiniBand的创建早了大约四年。
以下是 DirectCXL 内存集群的外观:
在上图右侧(在本文文末的功能图像中更详细地显示了四个内存板),它们具有FPGA创建PCI-Express链接并运行CXL.memory协议,用于在内存服务器和通过PCI-Express链接连接到它的主机之间加载/存储内存寻址。系统中间是四台服务器主机,最右侧是一台 PCI-Express 交换机,用于将四台 CXL 内存服务器连接到这些主机。
为了测试DirectCXL内存,KAIST采用了Facebook的深度学习推荐模型(DLRM),仅使用InfiniBand上的RDMA在服务器节点上进行个性化设置,然后使用DirectCXL内存作为额外的容量来存储内存并通过PCI-Express总线共享它。在此测试中,CXL 内存方法比 RDMA 快得多,如下图所示:
在这个子集群上,DirectCXL内存上DLRM应用程序的张量初始化阶段比在FDR InfiniBand互连上使用RDMA快2.71倍,在推理阶段,推荐者实际上根据用户配置文件提出建议的速度提高了2.83倍,推荐者从头到尾的整体性能提高了3.32倍。
下图显示了 InfiniBand 上的本地 DRAM、DirectCXL 和 RDMA 如何堆叠,以及 CXL 与 RDMA 在各种工作负载上的性能:
以下是关于KAIST在CAMELab工作的总结部分。目前没有操作系统支持CXL内存寻址 - 没有操作系统,我们的意思是商业级Linux或Windows Server都没有,因此KAIST创建了DirectCXL软件协议栈,以允许主机使用加载/存储操作直接访问远程CXL内存。无需将数据移动到主机进行处理 - 数据是从该远程位置处理的,就像在具有 NUMA 协议的多插槽系统中发生的情况一样。而且,与英特尔使用其 Optane 持久内存创建的相比,此 DirectCXL 驱动程序的复杂性要小得多。
“直接访问CXL设备,这与持久内存开发工具包(PMDK)的内存映射文件管理的概念类似,”KAIST研究人员在论文中写道。“但是,它比PMDK更简单,更灵活地进行命名空间管理。例如,PMDK 的命名空间与 NVMe 命名空间非常相似,由文件系统或具有固定大小的 DAX 管理。相比之下,我们的 cxl 命名空间更类似于传统的内存段,后者直接向应用程序公开,而无需使用文件系统。
论文中有很多的实验结果,对于普通读者大都晦涩难懂。但是,我们放大的下图中显示了 DirectCXL 和 RDMA 方法之间的一些显著差异:
就我们而言,左上角的图表是有趣的图表。要读取64字节的数据,RDMA需要执行两次直接内存操作,这意味着它具有两倍的PCI-Express传输和内存延迟,然后InfiniBand协议在RDMA期间占用2129个周期,总共2705个处理器周期。DirectCXL 读取 64 字节的数据只需要 328 个周期,它能够做到这一点的一个原因是 DirectCXL 协议将加载/存储请求从处理器中的最后一级缓存转换为 CXL flits,而 RDMA 必须使用 DMA 协议来读取和写入内存中的数据。
附小册子部分内容翻译: