emucxl: an emulation framework for CXL-based disaggregated memory applications——论文阅读

arXiv Paper CXL论文阅读笔记整理

问题

CXL(计算快速链路)的出现有望改变主机和设备之间的互连状态,进而影响所有软件层的设计。凭借其低开销、低延迟和内存一致性功能,CXL有可能提高现有设备的性能,同时提出可行的新操作用例(例如,分解内存池、跨设备的缓存一致性内存等)。其重点是设计应用程序和中间件,使用CXL来支持分解内存,使用的前提是标准CXL硬件和软件平台的可用性。但CXL设备还没有商业化,研究人员通常依赖于定制的硬件或仿真技术和/或使用定制的软件接口和抽象。这些技术没有为CXL的使用提供标准的使用模型和抽象层,开发人员和研究人员必须重新设计CXL设置来设计和测试他们的解决方案。

挑战

一个重要的挑战是CXL硬件的不可用性,现有工作面临的两个主要挑战是CXL内存的非标准化访问接口和抽象以及非标准化的模拟和仿真设置。通常,每个基于CXL的开发工作都开发了用于访问CXL功能的自定义接口,并进一步开发了用于测试和演示的自定义模拟、仿真或自定义硬件原型。虽然这些都符合每个解决方案的目的,但由于缺乏标准化和开源可用性,导致每项工作都需要冗余地独立设置其平台,以及在解决方案之间进行比较的非统一领域。

本文方法

本文旨在提供CXL仿真平台以及分解内存的软件接口和抽象的标准化视图。该标准化被设计和实现为用户空间库emucxl,并可作为虚拟设备使用。该库提供了一个用户空间API,并与基于NUMA的CXL仿真后端耦合。

开源代码:GitHub - cloudarxiv/emucxl

演示了标准化API在依赖于分解内存的不同用例中的使用,并表明可以使用开源emucxl库构建通用功能。

使用

emucxl提供了两种主要方式:

直接访问

应用程序直接使用原始emucxl API,并从应用程序中管理内存。管理本地和远程内存的逻辑是应用程序逻辑的一部分。

使用emucxl库实现了一个简单的队列数据结构,图4应用1。嵌入逻辑来选择对象应该存储在本地内存还是远程内存中。队列被实现为一个单向链表。每个入队操作都使用emucxl alloc操作创建一个新节点,出队和队列销毁操作涉及emucxl-free操作删除和释放每个节点。实验结果如表3。

emucxl的中间件驱动使用

通过中间件平台提供的接口,中间件平台反过来使用emucxl API和附加元数据来支持应用程序的基于分解内存的抽象。处理本地和远程内存的内存管理优化是中间件的责任。

键值存储,图4应用2。应用程序使用键值存储,键值存储与emucxl库交互,以跨本地和远程内存管理存储的对象。键值存储使用emucxl库及其API为应用程序提供get、put、delete语义。

Slab分配器,图4应用3。Slab分配[19]是一种内存管理策略,改进内存中对象的分配。其目的是减少重复分配和释放造成的碎片影响,从而提高内存利用率。slab由一个或多个虚拟连续的内存页组成,这些内存页被进一步划分为大小相等的块。每个块表示一个内存单元,该内存单元可以被分配来容纳对象,并且保持引用计数以跟踪板内分配的块的数量。在内存分配中使用slab提供了几个显著的优势——易于回收未使用的内存、恒定的时间分配和释放以及最小的内部碎片。

总结

本文提出了CXL模拟器,利用2个socket的物理服务器作为底层硬件,利用双节点虚拟机映射两个socket上的CPU和DRAM,其中一个映射CPU+DRAM作为本地内存,另一个只映射DRAM作为CXL远程内存。在硬件基础上设计了一套用户空间API,用于分配和释放内存。随后设计了两个简单的程序测试模拟器的效果。

局限性:只能模拟单个节点和一个CX扩展内存,使用场景有限。根据实验结果看本地和远程内存延迟差距约65-85ms,API的开销可能较高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妙BOOK言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值