Revisiting PM-Based B+-Tree With Persistent CPU Cache——论文泛读

news2024/9/22 6:08:57

TPDS 2024 Paper 论文阅读笔记整理

问题

持久存储器(PM)具有接近DRAM的性能和数据持久性,配备PM的平台支持异步DRAM刷新(ADR)功能[2],确保PM DIMM的内容以及已到达内存控制器的写挂起队列(WPQ)的写入在电源故障时仍然有效。但CPU缓存中的写入仍然是不稳定的,需要明确的缓存行刷新指令和内存屏障来保证数据的持久性。

最近,名为扩展ADR(eADR)的新功能可用于PM平台[3],eADR保证CPU缓存中的数据在崩溃后可以刷新到PM。确保了CPU缓存中数据的持久性,并消除了昂贵的同步刷新。eADR的出现为构建无锁数据结构和释放PM的全部潜力提供了独特的机会。

现有方法局限性

  • 现有的持久索引并发效率低下。锁在持久索引中广泛使用,因为现有的原语不能在基于ADR的平台上原子地修改和持久化数据。原子CPU硬件原语,如Compare-And-Swap(CAS),可以原子性地修改数据,但不能保证其持久性,因为CPU缓存是易失的。因此,如果没有锁,在另一个线程进行依赖读取之前,存储可能没有持久化,导致脏读。eADR缩小了CPU缓存中数据的可见性和持久性之间的差距,确保线程始终读取持久性数据,为开发高效无锁数据结构提供机会。

  • 现有的持久索引给PM访问带来了很高的开销。之前方法通过减少缓存行刷新指令的数量来降低PM开销,因为数据刷新是基于ADR的PM系统的主要瓶颈[7]。使用eADR后,不需要向PM进行显式数据刷新。然而,索引操作和内存管理中的PM访问阻碍持久索引的有效性,因为PM的读取延迟比DRAM高,带宽比DRAM低[17,18,19]。特别是对于写操作,由于CPU缓存容量有限,脏缓存行最终将被写回PM,这会消耗稀缺的PM写带宽。为了充分挖掘具有持久CPU缓存的PM系统的潜力,需要进一步提高缓存利用率,并尽量减少持久索引中的PM访问。

本文方法

本文提出了NBTree,一种无锁、PM友好的B+树,以提供高可扩展性和低PM开销。

  • 为了高可扩展性,提出无锁的并发控制协议。对于叶节点操作,采用日志结构的插入和原地更新/删除,结合CAS原语,支持无锁访问。当插入的叶节点已满时,用新叶节点替换旧叶节点,并通过结构修改操作(SMO)保持节点的平衡。NBTree提出了三种新技术(三阶段SMO、写同步和读同步)来处理叶节点无锁访问期间的潜在异常:(1)叶节点的并发更新和删除导致的更新丢失。利用三阶段SMO和写同步来解决。在SMO期间对叶节点进行更新或删除时,原地修改旧叶节点,修改要么通过三阶段SMO被动迁移到新叶节点,要么使用写同步主动同步到新叶节点。(2) 并发搜索操作导致读取不一致。无锁搜索可能会读取未提交的脏数据或过时数据,使用读同步来检测和解决。为了减少尾延迟,提出了协作SMO,使对同一SMO叶节点的并发插入协同工作。对于内部节点操作,应用硬件事务存储器(HTM)[20]来实现原子写入。同时设计了移位感知搜索算法,以确保无锁内部节点搜索到达正确的叶子。

  • 为了减少PM开销,尽量减少了PM访问,并提高PM写入的局部性。采用解耦的叶节点架构来减少索引操作中的PM行访问,将叶节点的元数据和键值对解耦,元数据层与内部节点一起存储在DRAM中,PM只包含键值层。提出了缓存持久分配器(Calloc),以增强持久内存管理元数据修改的局部性。Calloc采用全局分配位图、回收的环形缓冲区和可回收日志,充分利用持久CPU缓存来吸收分配、释放和日志记录过程中发生的大部分PM写入,从而节省PM写入带宽。同时,NBTree采用日志结构的插入和就地更新来提高NBTree中写入操作的局部性,减少偏斜工作负载中的PM写入。

评估表明,在YCSB工作负载下,NBTree的吞吐量比最先进的持久B+树高11倍,99%尾延迟低43倍。

总结

针对DRAM和PM结合的场景,由于DRAM中缓存无法持久化,必须同步刷新到PM中,新推出的eDAR功能,该功能保证CPU缓存可以在崩溃后刷新到PM中。本文利用eDAR,提出了NBTree,无锁、PM友好的B+树,以提供高可扩展性和低PM开销。包括两个技术:(1)高可扩展性,提出无锁并发控制协议。对于叶节点操作,采用日志结构的插入和原地更新/删除,结合CAS原语,支持无锁访问。(2)减少PM开销,将叶节点的元数据和键值对解耦,元数据与内部节点一起存储在DRAM中,键值层存储在PM。提出了缓存持久分配器,利用持久CPU缓存来吸收分配、释放和日志记录过程中的大部分PM写入。采用日志结构的插入和原地更新来提高局部性。

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

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

相关文章

深度学习 --- VGG16卷积核的可视化(JupyterNotebook实战)

VGG16卷积核的可视化 在前一篇文章中,我对VGG16输入了一张图像,并实现了VGG16各层feature map的可视化。深度学习 --- VGG16各层feature map可视化(JupyterNotebook实战)-CSDN博客文章浏览阅读615次,点赞13次,收藏15次。在VGG16模…

123-域防火墙入站出站规则不出网隧道上线组策略对象同步

参考:【内网安全】 域防火墙&入站出站规则&不出网隧道上线&组策略对象同步_对公司的邮件服务器建立防火墙规则 入站出战-CSDN博客 单机-防火墙-限制端口出入站 熟悉常见主机配置不出网的方式 1、入站&出站&连接安全 2、域&专用&公网…

【采集软件】用Python开发的小红薯详情批量采集工具,含笔记正文、转评赞藏等

一、背景介绍 1.1 爬取目标 用python开发的爬虫采集软件,可自动按笔记链接抓取笔记的详情数据。 为什么有了源码还开发界面软件呢?方便不懂编程代码的小白用户使用,无需安装python,无需改代码,双击打开即用&#xff…

本地部署docker文档

由于访问 https://docs.docker.com/ 文档慢,直接本地部署官方文档 如果不想执行以下操作,也可以直接使用官方文档仓库地址提供的 Dockerfile 和 compose.yaml 进行操作 以下操作环境为Windows系统,根据 Dockerfile 相关操作来生成 html 页面…

二叉树【1】

操作 新建节点(new) 新建一个值为v的节点,左右孩子NULL 查找 void查找函数 { 递归边界:NULL,然后退出 (return;) 查找左子树 查找柚子树 } 插入 void 插入函数 {…

Vue表单元素绑定:v-model 指令

Vue 指令系列文章: 《Vue插值:双大括号标签、v-text、v-html、v-bind 指令》 《Vue指令:v-cloak、v-once、v-pre 指令》 《Vue条件判断:v-if、v-else、v-else-if、v-show 指令》 《Vue循环遍历:v-for 指令》 《Vue事件…

NPM:配置阿里镜像库

1、配置阿里云镜像源 #查看当前使用的镜像地址命令 npm config get registry#设置阿里镜像源 npm config set registry http://registry.npmmirror.com 这里要注意下,之前的源镜像地址 https://registry.npm.taobao.org/ 已经不能用了,这里要更改为新地…

80页PPT数据中台应用技术实施方案

本文资料完整版81页PPT,下载完整PPT资料,知识星球APP搜索【智慧方案文库】,下载“数据中台”合集资料,以及8800份解决方案 数据中台设计的方法 (1)基于面向服务的架构方法(SOA) 基于面向服务的架构方法 …

spring整合redis

1.导入依赖 <!-- spring-data-redis 依赖--> <dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>2.7.18</version> </dependency> <dependency><…

旧衣回收小程序系统,为市场发展提供新模式

随着绿色生活的兴起&#xff0c;回收成为了大众生活的新选择&#xff0c;其中旧衣物回收更是深入人心&#xff01;通过旧衣物回收&#xff0c;大众不仅可以减少浪费&#xff0c;也能够进行资源在利用。目前&#xff0c;在科技的支持下&#xff0c;旧衣物回收正以一种新的方式进…

机械学习—零基础学习日志(如何理解概率论6)

随机变量的数字特征——期望与方差 以小明的成绩为例&#xff0c;如图所示。 这里其实涉及到&#xff0c;数学期望的概念。 对应的数值&#xff0c;乘以概率&#xff0c;相加以后就得到了数学期望。 随机变量的数学期望与方差 、 来个练习题&#xff1a; 解析&#xff1a; …

自制多肉查询工具

背景&#xff1a; 复习python qt、网页解析的常用操作 准备&#xff1a; 多肉信息网站涉及python的第三方库&#xff1a; lxmlPyQt5 实现效果&#xff1a; 功能&#xff1a; 随机读取&#xff1a;从本地加载已存储的多肉信息数据更新&#xff1a;从多肉信息网站更新5条多…

QT:Qt与ECharts

介绍ECharts ECharts是一款基于JavaScript的数据可视化图表库&#xff0c;由百度团队最初开发&#xff0c;并在2018年初捐赠给Apache基金会&#xff0c;成为ASF孵化级项目。随着项目的不断发展&#xff0c;ECharts在2021年1月26日正式毕业&#xff0c;成为Apache顶级项目 链接…

背包问题【算法 07】

背包问题 背包问题是经典的计算机科学问题之一&#xff0c;涉及到如何在有限资源的约束下&#xff0c;选择最优的物品组合&#xff0c;以最大化收益。这个问题在现实中有广泛的应用&#xff0c;例如资源分配、物流调度和投资组合优化等。本文将详细介绍背包问题的定义、解决方法…

pytorch深度学习基础 7(简单的的线性训练,SGD与Adam优化器)

接下来小编来讲一下一些优化器在线性问题中的简单使用使用&#xff0c;torch模块中有一个叫optim的子模块&#xff0c;我们可以在其中找到实现不同优化算法的类 SGD随机梯度下降 基本概念 定义&#xff1a;随机梯度下降&#xff08;SGD&#xff09;是一种梯度下降形式&#…

mysql中出现错误1138-Invalid use of NULL value

问题&#xff1a;1138-Invalid use of NULL value 解决&#xff1a; 问题是当前字段中&#xff0c;有null的值&#xff0c;简单来说就是&#xff0c;你表里有空值&#xff0c;不能设置不为空&#xff01;&#xff01;&#xff01; 把空的值删掉重新设计就好了

第一次重大人工智能失败刚刚发生

这终于发生了。我们迎来了第一家真正意义上的 AI 公司惨败。 Inflection是一家由比尔盖茨、埃里克施密特、微软等人投资的公司&#xff0c;它成为第一家被冲进马桶的生成式人工智能相关公司。 他们最重要的产品是Pi&#xff0c;ChatGPT 的竞争对手&#xff0c;专注于成为友好且…

SpringAOP使用详解

AOP使用详解 首先创建maven项目 添加依赖在pom.xml里 创建三层结构和spring.xml文件&#xff0c;只要用到注解就得写扫描包在spring.xml里 上篇文章的知识点总结 对上篇文章excution详细解释 如果把前置通知修改成这个代表只有带有Logger注解的才会生效 合并注解的方法用&…

Windows权限维持实战

目录 介绍步骤 介绍 在攻击过程中中对于拿到的shell或钓上来的鱼&#xff0c;目前比较流行用CS做统一管理&#xff0c;但实战中CS官方没有集成一键权限维持的功能&#xff0c;为了将该机器作为一个持久化的据点&#xff0c;种植一个具备持久化的后门&#xff0c;从而随时可以连…

ffmpeg最新5.1.6版本源码安装

一、编译安装需要的开源编码格式&#xff1a; 首先在编译安装这些开源编码格式之前,我们要明白为啥需要他们&#xff1a; aacx264x265 为啥需要呢&#xff1f;如果你对ffmpeg稍微了解的话&#xff0c;ffmpeg本身是一个框架&#xff0c;自身默认并没有支持这三种编码格式&…