NOMAD: Non-Exclusive Memory Tiering via Transactional Page Migration——论文泛读

OSDI 2024 Paper CXL论文阅读笔记整理

问题

随着可字节寻址存储设备的出现,如CXL内存、持久内存和存储类内存,分层存储系统已成为现实,不同层具有不同的特性,如速度、大小、功耗和成本。分层内存管理的核心是操作系统(OS)内的页面管理,包括页面分配、放置和迁移。页面迁移旨在将热数据放入快速内存,以优化数据访问的性能,同时使用慢速内存来容纳从快速内存溢出的数据。虽然现有的研究已经证明了页面迁移的有效性,但没有解决一个基本问题:独占内存分层,即页面要么存在于快速内存中,要么存在于慢速内存中,但不能同时存在于两者中,这是分层内存管理的最佳策略吗?

传统上,内存层次结构由性能相差至少一个数量级的存储介质组成。例如DRAM和磁盘,延迟、带宽和容量相差2-3个数量级。因此,页面管理的唯一目标是保持热页面,并最大限度地提高性能层(DRAM)的命中率,并将冷页面迁移(驱逐)到容量层(磁盘)。随着新的内存设备的出现,内存层次结构中的性能差距缩小,如英特尔Optane持久内存[56]和CXL内存[50],相比与DRAM只有2-3x的延迟和带宽差距。因此,如果迁移成本太高,将热页面提升到性能层将不再有益,对于容量层上的热页面,直接访问页面并避免迁移到性能层可能是更好的选择。

现有方法局限性

Nimble[54]通过利用透明大页面(THP)、页面的多线程迁移和多个页面的并发迁移来改进页面迁移。

透明页面放置(TPP)[44]扩展了Linux中现有的NUMA平衡方案,以支持快速和慢速内存之间的异步页面降级和同步页面升级。

Memtis[37]和TMTS[24]使用硬件性能计数器来减轻页面访问跟踪的开销,并使用后台线程定期异步地升级页面。

但现有方法面临两个限制:

  • 现有的分层内存页面管理假设内存层是互斥的,热页面被分配或迁移到性能层,冷页面被降级到容量层,每个页面只存在于一个层中。由于内存分层试图探索性能和容量之间的权衡,当工作负载的工作集大小超过了性能层的容量,且性能层不足以容纳热数据时,独占内存分层不可避免地会导致过度的冷热页面交换或内存抖动。

  • 缺乏有效的页面迁移机制来支持分层内存管理。未来的内存层预计可由CPU寻址,页面迁移类似于处理页面错误,涉及三个步骤:1)从页表中取消映射页面;2) 将页面内容复制到不同的层;3) 在页表上重新映射页,指向新的内存地址。无论页面迁移是同步还是在异步完成,迁移过程都是昂贵的。在迁移过程中,用户程序无法访问未映射的页面。如果频繁进行页面迁移,例如由于内存抖动,用户感知的带宽(包括对迁移页面的访问)明显低于峰值内存带宽(最多低95%)[54]。

    如图1,配置16GB快速内存(本地DRAM)和16GB慢速内存(远程CXL内存),测试工作集大小(WSS)(程序在执行过程中主动使用的内存量)小于和大于快速内存的情况。图2,测试原因在于同步页面迁移和页面错误处理。

本文方法

本文证明,当快速内存受到压力时,基于页面迁移的独占内存分层会导致性能显著下降。因此提出了非独占内存分层,允许性能层的部分页在容量层有副本,以减轻内存抖动。与包容性分层不同,包容性分层严格使用性能层作为容量层的缓存。最重要的好处是,在内存压力下,如果页面不脏并且其副本存在于容量层上,页面降级只需重新映射页面,从而降低页面降级的成本,实现平稳的性能转换。

提出了事务性页面迁移(TPM),在迁移过程中实现页面访问的机制。TPM在不从容量层取消页面映射的情况下启动页面内容复制,以便用户程序仍然可以访问迁移页面。将页面内容复制到性能层上的新页面后,TPM会检查该页面在迁移过程中是否被修改。如果修改,则页面迁移无效,复制的页面将被丢弃,并稍后重试。如果成功,复制的新页面将映射到页表中,旧页面取消映射,成为新页面的影子副本。

提出了NOMAD,一种针对分层内存的页面管理框架,集成了非独占内存分层和事务性页面迁移。NOMAD保护页面分配,以防止由于影子页面导致的内存不足(OOM)。当容量层面临内存压力时,NOMAD会优先回收影子页面,随后驱逐普通页面。将页面迁移从程序执行的关键路径中删除,并使迁移完全异步。

经过微基准测试和实际应用程序的评估表明,在内存抖动期间,NOMAD比TPP方法实现高达6倍的性能提升。还将NOMAD与最近提出的基于硬件辅助访问采样的页面迁移方法(Memtis)进行了比较,当工作集大小适合快速内存时,其性能始终比Memtis高出130%。

实验

实验环境:

Platform B:基于FPGA的CXL内存,调整后读延迟约为210ns,本地内存读延迟约为64ns。

Platform D:上市前的CXL内存,读延迟约为192ns,本地内存读延迟约为105s。

总结

针对使用基于CXL的内存时,分层内存的页管理策略。现有方法将页从容量层迁移到性能层时,受限于同步处理页面错误的开销,迁移过程中性能显著下降。本文提出非独占内存分层,允许性能层的部分页在容量层有副本,以减轻内存抖动。提出了事务性页面迁移(TPM),在迁移过程中页面可以访问。在不从容量层取消页面映射的情况下启动页面内容复制,以便程序仍然可以访问迁移页面。将页面复制到性能层上的新页面后,检查该页面是否被修改。如果修改,则页面迁移无效,并稍后重试;如果成功,将新页面将映射到页表中,旧页面取消映射,成为新页面的影子副本。页面降级时,如何页面不脏并且其副本存在于容量层,只需重新映射页面,实现平稳的性能转换。进一步实现NOMAD,针对分层内存的页面管理框架,集成了非独占内存分层和事务性页面迁移,防止由于影子页面导致的内存不足(OOM)。将页面迁移从程序执行的关键路径中删除,并使迁移完全异步。

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

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

相关文章

vmware虚拟机中,Centos安装Docker,解决国内无法访问

背景 本文主要解决了centos 的yum源 无法更新 和 docker的 源 国内无法访问的问题。 本文环境:windows宿主机装了vmware虚拟机,虚拟机中安装了Centos,centos内装docker。其实可以直接在window装docker desktop for windows,但…

VS C#类文件自动生成头部注释

VS C#类文件自动生成头部注释(以VS2019为例) 1、更新位置 E:\VS2019\vs_2019\Common7\IDE\ItemTemplates\CSharp\Code\2052\Class 2、替换Class 原始文件 using System; using System.Collections.Generic; $if$ ($targetframeworkversion$ > 3.5…

【代码随想录】【算法训练营】【第58天 3】 [卡码103]水流问题 [卡码104]建造最大岛屿

前言 思路及算法思维,指路 代码随想录。 题目来自 卡码网。 day 58,周四,ding~ 题目详情 [卡码103] 水流问题 题目描述 卡码103 水流问题 LeetCode类似题目417 太平洋大西洋水流问题 解题思路 前提: 思路: 重…

Qt 制作安装包

记录使用Qt工具制作一个安装包的过程 目录 1.准备工作 1.1检查Qt Installer Frameworks是否安装 1.2.安装Qt Installer Frameworks 1.3准备release出来的exe dll等文件 2.创建打包工程所需要的文件及目录 2.1创建子目录 2.2 创建工程文件 2.3 创建config/config.xml …

创建鸿蒙手机模拟器(HarmonyOS Emulator)

文 | Promise Sun 一.前提条件: 鸿蒙项目开发需要使用模拟器进行开发测试,但目前想在DevEco Studio开发工具中使用模拟器就必须到华为官网进行报名申请,参加“鸿蒙模拟器(HarmonyOS Emulator)Beta活动申请”。 申请审…

计算机课设——基于Java web的超市管理系统

smbms_java_web 基于Java web的超市管理系统,数据库课程设计 1.引言 是一个基于Java Web连接MySQL的小项目。 超市管理系统(smbms)作为每个计算机专业的大学生都是一个很好的练手项目,逻辑层次分明,基础功能包括用户的登录和注销&#xff…

【日常记录】【插件】excel.js导出的时候给单元格设置下拉选择、数据校验等

文章目录 1. 代码基本结构2. 导出的excel 某单元格的值设置为下拉选择3. 如何把下拉选择项设置为动态4. 单元格设置校验、提示5. 在WPS上的设置 1. 代码基本结构 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><…

韦东山嵌入式linux系列-驱动进化之路:设备树的引入及简明教程

1 设备树的引入与作用 以 LED 驱动为例&#xff0c;如果你要更换LED所用的GPIO引脚&#xff0c;需要修改驱动程序源码、重新编译驱动、重新加载驱动。 在内核中&#xff0c;使用同一个芯片的板子&#xff0c;它们所用的外设资源不一样&#xff0c;比如A板用 GPIO A&#xff0c…

基于python的京东VR眼镜口碑情感分析,包括lda和情感分析

第1章 绪论 1.1选题背景 在当今科技发展迅速的时代&#xff0c;虚拟现实&#xff08;VR&#xff09;技术作为一种前沿的数字体验方式受到越来越多人的关注。京东作为中国领先的电商平台&#xff0c;推出的VR眼镜备受消费者关注。通过对京东VR眼镜口碑进行情感分析&#xff0c…

Pycharm 报错 Environment location directory is not empty 解

删除项目中ven文件夹&#xff08;已存在的&#xff09;&#xff0c;然后再添加新的ven虚拟环境就可以了

如何用手机压缩视频?手机压缩视频方法来了

高清视频的大文件大小常常成为分享和存储的障碍&#xff0c;尤其是在数据流量有限或存储空间紧张的情况下。幸运的是&#xff0c;无论是智能手机还是个人电脑&#xff0c;都有多种方法可以帮助我们轻松压缩视频文件&#xff0c;以适应不同的需求和情境。本文将介绍如何在手机上…

格式工厂转换视频分辨率

1、下载和安装 http://www.pcfreetime.com/formatfactory/CN/index.html 2、打开视频 3、设置分辨率等参数 也可以选择保持原分辨率 4、执行导出 5、打开输出所在位置

前端开发之盒子模型

目录 盒子分类 display属性 盒子内部结构特征 padding填充区 border边框区 margin外边距 盒子width和height边界 盒子分类 块级盒子&#xff08;又叫块级元素、块级标签&#xff09; 特征&#xff1a;独占一行&#xff0c;对宽度高度支持 如&#xff1a;p div ul li h1…

完整且详细的Yolov8复现+训练自己的数据集

Yolov8 的源代码下载&#xff1a;ultralytics/ultralytics: NEW - YOLOv8 &#x1f680; in PyTorch > ONNX > CoreML > TFLite (github.com)https://github.com/ultralytics/ultralytics Yolov8的权重下载&#xff1a;Releases ultralytics/assets GitHubUltralyt…

Java 反射机制:概念、用途与示例

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

Spring纯注解开发

前言 Spring3.0引入了纯注解开发的模式&#xff0c;框架的诞生是为了简化开发&#xff0c;那注解开发就是简化再简化。Spring的特性在整合MyBatis方面体现的淋漓尽致哦 一.注解开发 以前跟老韩学习SE时他就说&#xff1a;注解本质是一个继承了Annotation 的特殊接口,其具体实…

智慧农业新纪元:解锁新质生产力,加速产业数字化转型

粮食安全乃国家之根本&#xff0c;“浙江作为农业强省、粮食生产重要省份&#xff0c;在维护国家粮食安全大局中肩负着重大使命。浙江粮食产业经济年总产值已突破4800亿元&#xff0c;稳居全国前列&#xff0c;然而&#xff0c;同样面临着规模大而不强、质量效益有待提升、数字…

C语言 ——— 打印水仙花数

目录 何为水仙花数 题目要求 代码实现 何为水仙花数 “水仙花数”是指一个n位数&#xff0c;其各位数字的n次方之和等于该数本身 如&#xff1a;153 1^3 5^3 3^3&#xff0c;则153就是一个“水仙花数” 题目要求 求出0~100000的所有“水仙花数”并输出 代码实现 #i…

人工智能算法工程师(高级)课程1-单类目标识别之人脸检测识别技术MTCNN模型介绍与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(高级)课程1-单类目标识别之人脸检测识别技术MTCNN模型介绍与代码详解。本文深入探讨了基于PyTorch的人脸检测与识别技术&#xff0c;详细介绍了MTCNN模型、Siamese network以及center loss、sof…

PostgreSQL创建表和自增序列

一、创建表&#xff1a; 注意&#xff1a; 1、在mysql没有序列的概念&#xff0c;id自增通过auto_increment实现&#xff1b; 2、pgsql没有auto_increment的概念&#xff0c;如何实现id自增&#xff1f;有两种方式&#xff1a; 方式一&#xff1a;创建序列&#xff0c;绑定…