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,但…

技术选型_001_应用场景及编程语言

文章目录 Web开发桌面应用数据分析 不同编程语言有不同的适用场景及生态,这里仅记录作为个人开发者接触过的场景,不考虑企业侧因素,完全从开发效率及性能,包大小等因素考虑,因目前个人只接触过应用层开发,后…

uniapp 获取自定义组件的高度

在 UniApp 中&#xff0c;要获取自定义组件的高度&#xff0c;可以使用uni.createSelectorQuery()方法结合res.node和res.height来实现。 首先&#xff0c;在父组件的代码中&#xff0c;给自定义组件添加一个 ref 属性&#xff0c;例如&#xff1a; <template><view…

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

VS C#类文件自动生成头部注释&#xff08;以VS2019为例&#xff09; 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]建造最大岛屿

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

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 …

数据结构第35节 性能优化 算法的选择

算法的选择对于优化程序性能至关重要。不同的算法在时间复杂度、空间复杂度以及适用场景上有着明显的差异。下面我将结合具体的代码示例&#xff0c;来讲解几种常见的算法选择及其优化方法。 示例 1: 排序算法 场景描述: 假设我们需要对一个整数数组进行排序。 算法选择: …

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

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

好用的Ubuntu下的工具合集[持续增加]

1. 终端工具 UBUNTU下有哪些好用的终端软件? - 知乎 (zhihu.com) sudo apt install terminator

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

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

SpringBoot集成EasyExcel实现模板写入多个sheet导出

EasyExcel使用模板导出多个sheet 开发环境 开发环境 SpringBoot2.6EasyExcel3.2.1 //第一种输出到指定目录 public static void main(String[] args) throws FileNotFoundException {InputStream inputStream new FileInputStream(new File("模板位置"));InputStre…

ES6 模块

ES6 模块学习记录 ES6&#xff08;ECMAScript 2015&#xff09;模块是JavaScript官方的标准模块系统。它允许开发者以模块化的方式编写代码&#xff0c;模块可以在不同的文件之间进行组织和重用。 基本特征 默认导出&#xff08;Default Exports&#xff09;&#xff1a;每个…

PHP MySQL 读取数据

PHP MySQL 读取数据 PHP和MySQL是Web开发中的经典组合&#xff0c;广泛用于创建动态网站和应用程序。在PHP中读取MySQL数据库中的数据是一项基本技能&#xff0c;涉及到连接数据库、执行查询以及处理结果集。本文将详细介绍如何使用PHP从MySQL数据库中读取数据。 1. 环境准备…

基于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;以适应不同的需求和情境。本文将介绍如何在手机上…

R语言学习笔记9-数据过滤-分组-融合

R语言学习笔记9-数据过滤-分组-融合 数据过滤基础数据过滤条件筛选数据使用dplyr包进行数据操作select 函数filter 函数subset函数 数据分组使用split()进行数据分组使用dplyr包进行数据分组使用data.table包进行数据分组 数据融合使用merge()进行数据融合使用dplyr包进行数据融…

格式工厂转换视频分辨率

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