Dynamic Capacity Service for Improving CXL Pooled Memory Efficiency——论文阅读

IEEE Micro 2023 Paper CXL论文阅读笔记整理

问题

传统系统面对大容量和高带宽内存需求时存在的挑战:

  • 内存墙。计算系统的最新趋势表明,内存性能的提高没有跟上计算性能的步伐。扩展内存带宽和容量的一个可行解决方案是增加中央处理器(CPU)中的内存通道数量。但这需要CPU设计开销,从而导致成本增加和可靠性降低的问题。由于实现复杂性的增加,提高动态随机存取存储器(DRAM)的数据速率以获得更高的存储器带宽是具有挑战性的。

  • 内存过度提供。由于工作负载的资源需求(例如CPU核数和内存大小)变化,并且在主机之间也有所不同,因此云规模系统中的大量内存被搁置。例如,在微软的Azure中有25%的内存滞留。内存分解是缓解这一问题的常见方法。

Compute Express Link(CXL)池内存作为一种可行的内存分解解决方案,提供了内存扩展和缓解内存过度提供。有效使用池内存的基本功能是根据主机的需求动态地从池中分配或释放内存,本文将此功能称为动态容量服务(DCS)。

CXL内存池的架构如图1所示,基于多头CXL设备或CXL交换机。支持:内存加载/存储语义、高可扩展性、高资源利用率。

本文工作

本文介绍了工业界第一个针对CXL池内存的DCS实现之一。实现基于现场可编程门阵列(FPGA)的CXL池存储器原型和完整的软件堆栈。还介绍了DCS实施过程中的经验教训。

DCS硬件架构

DCS引擎支持动态容量分配和释放,如图2所示。包括:内存管理单元(MMU)、邮箱、内存段表、内存保护单元(MPU)、安全擦除器。

  • 内存管理单元:CXL池内存在逻辑上划分为预定义大小的内存段(默认为128 MB),MMU根据主机的请求分配或释放内存段,如图3。(1)通过邮箱接收来自主机的内存分配/释放请求。(2)更新存储器区段表来分配/释放所请求的存储器区段。(3)返回对请求的响应,包括执行状态、分配或释放的节的数量以及所涉及的节标识符(ID)的列表。

  • 邮箱:主机通过CXL.io向邮箱发送16位命令(在CXL规范允许的供应商特定字段中定义自定义DCS命令),MMU读取命令并执行相应的操作。

  • 内存段表:由MMU更新,如图4(a),在主机的请求内存分配时,MMU会分配所请求的内存节数,并将节的所有者字段设置为主机ID。MMU在释放请求时会将所请求的节的所有者域设置为0。

  • 内存保护单元:MPU参考内存段表,决定是否授权CXL.mem读/写事务,如图4(b)。

  • 安全擦除器:在释放的内存部分重新分配给其他主机之前,对其执行归零或随机化。

DCS软件架构

DCS软件框架包括:CXL池内存检测和管理、DCS引擎驱动程序、支持DCS的Kubernetes。

  • CXL池内存检测和管理:通过EFI BIOS将CXL池存储的物理地址公开为软保留型内存,设备驱动程序将地址空间初始化为仅限内存的非均匀内存访问(NUMA)节点(或zNUMA节点)。CXL池内存中的内存分配或释放单位是一个内存段,在64位x86机器上,其大小默认为128 MB。DCS利用Linux的内存热插拔功能将分配的CXL池内存注册为系统内存。

  • DCS引擎驱动程序:初始化阶段完成后,所有内存段离线。对于要使用CXL池内存的主机,主机应该获得访问内存单元部分中的CXL池存储器的许可。接收到许可的内存部分就会联机,并由Linux内核中的内存管理子系统进行管理。主机和CXL池内存之间的通信是通过CXL邮箱机制。

  • 支持DCS的Kubernetes:使用Kubernete,一种容器编排工具。如图5,Kubernetes集群由master和多个worker组成。作者在worker中修改了Kubelet和device-plugin。device-plugin将池内存的每个部分枚举为多个内存设备,以跟踪可用的内存资源,然后通过Kubelet与master共享可用性。master中的调度器在检查资源可用性后选择一个工作程序来放置pod。如果所选的worker没有足够的内存资源来运行容器pod,master会向worker发送分配请求。一旦工作者收到分配请求,设备插件就会从CXL池内存中获得该部分的许可,之后进行内存热插拔。在pod执行完成后,设备插件会拔下部分并更新资源可用性。

DCS API

API支持三个命令:获取内存段状态、设置内存段分配、设置内存段释放,如图6。

  • 获取内存段状态:(1)主机将“获取内存段状态”命令发送到邮箱。(2)邮箱返回总内存分区计数和可用分区计数,并返回一条成功消息。

  • 设置内存段分配:主机请求CXL池内存根据CXL池内的可用内存段和当前所需的内存容量来分配内存段,或者释放不再需要的内存段。(1) 主机向邮箱请求带有输入有效负载的“设置内存段分配”命令,该有效负载是所需的内存节数和分配策略。(2) MMU读取请求的命令。(3) MMU根据输入的有效载荷更新存储器部分表。(4) MMU返回响应消息,包括分配的区段计数、区段计数、区段范围列表。(5) 主机读取存储在邮箱中的响应消息。

  • 设置内存段释放:设置内存段的释放操作与设置内存段分配类似,不同之处在于,可以根据发布策略执行安全擦除。安全擦除时:(1)MMU请求对安全擦除器进行归零或随机化。(2)安全擦除器根据请求执行归零或随机化。应用了安全擦除的内存部分无法重新分配。

FPGA实现

在连接到多个主机的基于FPGA的CXL池内存原型中实现了DCS。该原型最多可通过CXL接口连接到四台主机,由一个DCS引擎和四个DDR4 DIMM(最高512 GB)组成。通过连接两个英特尔未来一代的CPU服务器来评估性能。

实验

实验配置:

实验表明,DCS可以根据需要动态分配和释放内存资源,从而显著提高系统内存利用率。

总结

针对CXL扩展池内存,从软件和硬件方面实现了动态容量服务(DCS),根据主机的需求动态地从池中分配或释放内存。DCS硬件引擎支持动态容量分配和释放,包括:内存管理单元(MMU)、邮箱、内存段表、内存保护单元(MPU)、安全擦除器。DCS软件框架支持用户使用CXL池内存,包括:CXL池内存检测和管理、DCS引擎驱动程序、支持DCS的Kubernetes。并实现了用于传输请求的API,支持三个命令:获取内存段状态、设置内存段分配、设置内存段释放。最终基于FPGA实现了DCS原型,可以适用于不同孽畜大小的节点组成内存池,并提高系统内存利用率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/540570.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux板子vscode gdb 远程调试

板子:hi3556v200 交叉编译工具:arm-himix200-linux 主机:win10虚拟机的ubuntu16.4 gdb:gdb-8.2.tar.gz 1.在ubuntu交叉编译gdb(Remote g packet reply is too long解决) 建议修改gdb8.2/gdb目录下面的remote.c解决…

ConcurrentHashMap 为什么不能插入 null?

1、典型回答 简单来说,ConcurrentHashMap 不允许插入 null 值是JDK 源码规定的,如下源码所示(此源码基于JDK 1.8): 从上述源码可以看出,在添加方法的第一句就加了判断:如果 key 值为 null 或者是 value 值为 null&…

电梯机房秀 系列二

上次小伍带大家看了部分机房的照片,并且简单介绍了一下电梯能量回馈装置,小伙伴们表示很新奇,没看够,今天小伍又来了,带大家看一下电梯能量回馈装置到底安装在电梯什么位置。跟着小伍去看看吧。Lets go! 电…

解决提示无法使用内置管理员账户打开Microsoft Edge的方法

图片出自链接:解决提示无法使用内置管理员账户打开Microsoft Edge的方法

如何识别代理IP的真实地理位置

目录 一、代理IP的概述 二、识别代理IP真实地理位置的方法 IP数据库查询 反向DNS查询 网络延迟测量 三、案例分析与代码实现 四、总结与展望 随着网络技术的不断发展,代理IP的使用越来越广泛,但这也给网络安全和数据分析带来了挑战。代理IP可以隐…

我记不住的那些命令-xxdod

背景: 这里记录一下具体的xxd和od命令参数和使用方法,我想我肯定是记不住这些参数的。 零、文件 我们这里有一个示例文件README.txt,内容如下图所示: 一、xxd(查看、编辑二进制文件) 1. 十六进制显示(默认) 我们发现上面的显…

【WPF】Canvas的Path画线 颜色值偏差和面积不准确

图像中左上角2个红色线段 颜色值有偏差&#xff0c;且线段高度不准确&#xff08;我设置的是Red,1&#xff09;。 解决方案&#xff1a; 1、PathGeometry PathFigure LineSegment 2、Stretch设置Fill <Path Stretch"Fill" Stroke"Red"…

macOS - 获取硬件设备信息

文章目录 1、CPU获取方式 一&#xff1a; system_profiler获取方式二&#xff1a;sysctl&#xff0c; machdepmachdep 2、内存3、硬盘4、显卡5、声卡6、光驱7、系统序列号8、型号标识符9、UUID 等信息 10. 计算机名称 1、CPU 获取方式 一&#xff1a; system_profiler % syst…

LeetCode.2864. 最大二进制奇数

题目 2864. 最大二进制奇数 分析 这道题目其实我们只需要保证最后一位是1&#xff0c;其余的1都放在最前面&#xff0c;这样得到的就是最大二进制奇数。 所以&#xff0c;我们先统计给定的字符串有多少个 1&#xff0c;多少个 0&#xff0c;把其中一个 1 放在最后一位&…

谷歌的后量子密码学威胁模型

1. 引言 若现在不使用量子安全算法来加密数据&#xff0c;能够存储当前通信的攻击者最快十年内就能对其解密。这种先存储后解密的攻击是当前采用后量子密码学 (post-quantum cryptography&#xff0c;PQC) 背后的主要动机&#xff0c;但其他未来的量子计算威胁也需要一个深思熟…

【Python】新手入门学习:详细介绍迪米特原则(LoD)及其作用、代码示例

【Python】新手入门学习&#xff1a;详细介绍迪米特原则&#xff08;LoD&#xff09;及其作用、代码示例 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTor…

3.1_10 段页式管理方式

3.1_10 段页式管理方式 &#xff08;一&#xff09;分页、分段的优缺点分析 基于分页、分段的优缺点&#xff0c;人们想出了将分页、分段结合&#xff0c;就产生了段页式管理。段页式管理具备了分页、分段各自的优点。 &#xff08;二&#xff09;分段分页段页式管理 将进程按逻…