BetrFS: A Compleat File System for Commodity SSDs——论文阅读

news2025/2/2 13:43:39

EuroSys 2022 Paper 分布式元数据论文汇总

问题

在不同的工作负载下,没有单一的Linux文件系统在普通SSD上始终表现良好。我们将一个完备的文件系统定义为在各种微基准测试和应用程序中,没有一个工作负载的性能低于最佳文件系统性能的30%,并且大多数工作负载实现至少85%的最佳文件系统性能。在普通SSD上没有一个文件系统是完备的。

现有文件系统局限性

BetrFS的问题

  • 顺序写入和过多的文件数据拷贝:数据写入时总是在每个级别上存储,在Bε树中,数据被刷新到内存中树的每一级时,也被复制到一个新的页面中,当数据写入ext4时,它会被再次复制。类似的复制发生在读取路径上。

  • 小写和双重日志。例如重命名操作会产生sync(),导致对ext4的小写。在BetrFS和ext4上都需要记录日志,导致2倍的开销。

  • 顺序读取和预读。发现VFS级别预读不太适合BetrFS的较低级别,即从ext4中读取大的Bε树节点,因为启发式算法只在KB的阶上操作,而Bε树的叶节点是4MB。理想情况下,在处理当前4MB时,应该预取整个下一个叶和任何其他祖先节点,应用消息,并具体化下一个叶子的视图。

  • 文件创建和存在性检查。创建文件时需要先检查文件是否存在,有大量创建小文件的操作时,会产生大量单个消息,破坏了BetrFS的批处理思想。

  • 递归删除和范围消息。范围删除在HDD上足够快,但在SSD上执行递归目录删除时会成为瓶颈。

  • 小写入和缓冲区大小调整。将BetrFS从HDD移动到SSD时,内存管理是一个关键的瓶颈,因为在管理内存中的Bε树消息时,很难预测缓冲区大小。例如,从父级到子级的刷新可能会填充子级的缓冲区,并且子级可能需要进一步刷新到孙级。在这种级联刷新中,子级可能会临时分配一个比它在磁盘上最终需要的更大的内存缓冲区来保存这些消息,直到刷新到孙级。此问题主要影响发出小写入的工作负载,而小写入又会在刷新期间序列化更多消息。

挑战和本文优化

这篇论文展示了通过在BetrFS上引入一组优化,可以构建一个适用于普通SSD的单一完备文件系统。BetrFS在硬盘(HDD)上是一个完备的文件系统,在最差情况下与最快的Linux文件系统相匹配,在最好情况下,性能提高了两个数量级。

  • 整合层次结构。BetrFS的Bε树堆叠在ext4之上,使用ext4作为块分配器,这种堆叠在HDD上成本可接受,但在SSD上不可接受。本文提出了一种简化的底层存储结构,用于更快设备上的内核中的写优化键值存储。在许多情况下,为了明确各层次之间的工作分工,需要修改键值存储以不同的方式实现功能,例如将预读取移到键值存储层。在其他情况下,例如元数据缓存,VFS结构是专业且有效的。对BetrFS的VFS交互进行微小的更改可以更有效地批处理元数据更新,并更好地经济地进行Bε树查询。总的来说,这些改变使得顺序写入吞吐量比BetrFS v0.4提高了4倍,grep时间减少了41%。

  • 键空间范围作为第一类基元。本文提出了一些针对于键空间中连续的键值对集合的范围操作的优化。从硬盘转移到固态硬盘后,范围操作对CPU的要求太高,无法跟上更快的设备。本文为范围操作提供了额外的优化,以及对VFS缓存行为的简单更改,以消除冗余查询。这些优化加速了递归删除的速度,使得BetrFS v0.6在这个工作负载上与其他文件系统相媲美。

  • 协同内存管理。本文描述了对写优化键值存储所需的大型缓冲区进行协同内存管理的策略。为了将小的更新聚合到大的I/O中,写优化键值存储必须能够高效地分配和可调整大小的缓冲区,这些缓冲区的大小在几百千字节到几兆字节之间,因为更新的聚合方式,很难在分配时准确预测缓冲区的大小。然而,Linux内部的内核内存分配器主要针对页面或小对象进行了优化,而不是几兆字节级别的缓冲区。同样,动态调整大缓冲区的内核映射可能很昂贵,涉及到跨核心的TLB终止。通过采用新的内存管理策略,BetrFS v0.6在各方面都提高了性能,包括4KiB和4B随机写吞吐量分别比BetrFS v0.4强大的性能提高了25%和31%。

  • VFS和键值存储集成。本文描述了在VFS页面缓存和写优化键值存储之间共享版本化数据(写时复制)的策略。我们的设计支持在内存中跟踪数据块的多个版本,而不妨碍写入。这个设计通过引用有效地将页面通过键值存储的层次结构进行聚合。相对于BetrFS v0.4,顺序写吞吐量提高了6倍,将性能提高到距离SSD文件系统上最快的顺序写实现不到15%的距离。从高层次来看,这个策略可以看作是使用内核的页面缓存作为文件内容的写时复制行缓存。

我们优化后的BetrFS不仅是完备的,而且在一系列微基准测试中要么是最快的,要么在最快的通用Linux文件系统上处于15%以内。这些优化在最佳情况下将随机写入吞吐量提高了6倍,与最快的SSD文件系统相比。在最差情况下,我们的文件系统与其他基准文件系统性能相近。这些改进可以转化为应用层的收益;例如,与其他普通文件系统相比,BetrFS上的Dovecot邮件服务器和Linux源代码的rsync分别显示了1.13×和1.8×的加速。

开源代码:GitHub - oscarlab/betrfs at v0.6

实验

实验环境:4核3.00 GHz Intel Xeon E3-1220 v6 CPU,32 GB RAM的PowerEdge T130。SSD是250 GB的三星EVO 860 SSD,具有512字节的页面大小和12 GB的写缓存;我们测量用于读取的567MB/s的峰值原始顺序带宽。对于写入,当数据大小小于12 GB时,峰值带宽为502 MB/s,而当数据大小大于12 GB时则降至392 MB/s,我们将其归因于设备内部操作。

数据集:microbenchmark、应用程序、FileBench[32]

实验对比:吞吐量、延迟

总结

目标是设计在各种不同工作负载下,使文件系统在SSD上始终性能良好。作者对BetrFS进行了详细的分析,将BetrFS从HDD迁移到SSD会面临6个问题:顺序写入和过多的文件数据拷贝;小写和双重日志;顺序读取和预读;文件创建和存在性检查;递归删除和范围消息;小写入和缓冲区大小调整。

根据分析作者在4个方面进行优化:整合层次结构,提出了一种简化的底层存储结构,用于SSD上的内核中的写优化键值存储;键空间范围作为第一类基元,提出了一些针对于键空间中连续的键值对集合的范围操作的优化;协同内存管理,描述了对写优化键值存储所需的大型缓冲区进行协同内存管理的策略;VFS和键值存储集成,描述了在VFS页面缓存和写优化键值存储之间共享版本化数据(写时复制)的策略。

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

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

相关文章

代码随想录算法训练营29期|day36任务以及具体安排

第八章 贪心算法 part05 435. 无重叠区间 class Solution {public int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals, (a,b)-> {return Integer.compare(a[0],b[0]);});if(intervals.length 1) return 0;int result 0;for(int i 1 ; i < interva…

Unity | YooAssetV2.1.0 + HybridCLR热更新

目录 一、项目更改 二、使用YooAsset热更 1.资源配置 2.资源构建 3.将两个文件夹下的资源上传CDN服务器 4.修改代码 5.运行效果 本文记录利用YooAssetHybridCLR来进行资源和dll的更新。YooAsset使用的是新版V2.1.0。相比于旧版&#xff0c;dll(原生文件)和资源要建两个p…

AI-数学-高中-17-三角函数的定义

原作者视频&#xff1a;三角函数】4三角函数的定义&#xff08;易&#xff09;_哔哩哔哩_bilibili 初中&#xff1a; 高中&#xff1a;三角函数就是单位圆上的点的横纵坐标(x0,y0)。 示例1&#xff1a; 规则&#xff1a; 示例2&#xff1a; 示例3.1&#xff1a; 示例3.2 示例4…

VBA数据库解决方案第八讲:SQL语句及打开记录集

《VBA数据库解决方案》教程&#xff08;版权10090845&#xff09;是我推出的第二套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;是学完字典后的另一个专题讲解。数据库是数据处理的利器&#xff0c;教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法…

C语言递归与迭代并举:双重视角下的C语言阶乘计算实现

引言 计算一个正整数的阶乘是常见的数学问题。阶乘的定义为&#xff1a;n的阶乘&#xff08;记作n!&#xff09;是所有小于及等于n的正整数的乘积。例如&#xff0c;5的阶乘&#xff08;5!&#xff09;就是54321120。下面我们将通过一个使用递归方法实现阶乘的C语言代码示例&am…

POI操作word表格,添加单元格,单元格对齐方法(不必合并单元格)

添加单元格&#xff0c;直接对row进行create新的cell&#xff0c;则会导致新创建的单元格与前面的单元格不对齐的现象。 //表格信息XWPFTable table doc.createTable();table.setWidth("100%");//第一行XWPFTableRow row0table.getRow(0);XWPFTableCell cell00row0.…

STM32GPIO(流水灯、蜂鸣器案例)

文章目录 一、介绍GPIO简介GPIOGPIO基本结构GPIO位结构GPIO模式 二、外设介绍LED、蜂鸣器简介硬件电路 面包板介绍 三、实现LED闪烁连接LED线路具体程序引入Delay具体代码如下&#xff1a; 四、实现流水灯组装线路根据GPIO_Init中结构体成员GPIO_Pin的定义&#xff0c;可以使用…

Redis学习——高级篇⑦

Redis学习——高级篇⑦ Redis7之缓存预热 缓存雪崩 缓存击穿 缓存穿透&#xff08;八&#xff09; 8.1 缓存预热8.1.1 是什么8.1.2 解决 8.2 缓存雪崩8.2.1 是什么8.2.2 发生8.2.3 预防 解决 8.3 缓存穿透8.3.1 是什么8.3.2 解决1 空对象缓存或者缺省值2 Goo…

【Linux网络编程三】Udp套接字编程(简易版服务器)

【Linux网络编程三】Udp套接字编程(简易版服务器&#xff09; 一.创建套接字二.绑定网络信息1.构建通信类型2.填充网络信息①网络字节序的port②string类型的ip地址 3.最终绑定 三.读收消息1.服务器端接收消息recvfrom2.服务器端发送消息sendto3.客户端端发送消息sendto4.客户端…

前端小案例——滚动文本区域(HTML+CSS, 附源码)

一、前言 实现功能: 这个案例实现了一个具有滚动功能的文本区域&#xff0c;用于显示长文本内容&#xff0c;并且可以通过滚动条来查看完整的文本内容。 实现逻辑&#xff1a; 内容布局&#xff1a;在<body>中&#xff0c;使用<div>容器创建了一个类名为listen_t…

【Java程序设计】【C00242】基于Springboot的冬奥会科普平台(有论文)

基于Springboot的冬奥会科普平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的冬奥会科普平台 本系统分为系统功能模块以及管理员功能模块。 系统功能模块&#xff1a;登录进入冬奥会科普平台可以查看首页&…

ToF 测距传感器 VL6180 测量范围修改(软件 I2C)

TOF 测距传感器 VL6180 传感器修改测量范围 ...... by 矜辰所致前言 之前写过一篇关于ToF 测距传感器 VL6180 使用的文章&#xff1a; ToF 测距传感器 VL6180 使用踩坑记&#xff08;软件 I2C&#xff09; 之后有粉丝问我如何修改测量距离&#xff0c;当时我只回答让粉丝去…

【c语言】简单贪吃蛇的实现

目录 一、游戏说明 ​编辑 二、地图坐标​ ​编辑 三、头文件 四、蛇身和食物​ 五、数据结构设计​ 蛇节点结构如下&#xff1a; 封装一个Snake的结构来维护整条贪吃蛇&#xff1a;​ 蛇的方向&#xff0c;可以一一列举&#xff0c;使用枚举&#xff1a; 游戏状态&a…

QT播放gstreamer命令(三)---使用QMediaPlayer

前文: 因为之前听说过,QMediaPlayer已经集成了gstreamer,但是并没有什么接口来例子来说明,根本看不出来有任何gstreamer的形式,于是在QT5助手里面搜了一下,发现确实有gstreamer的痕迹,但是例子写的极其拉胯,经过自己尝试,终于发现了一种直接使用QMediaPlayer播放gstre…

uniapp中组件库Mask 遮罩层 的使用方法

目录 #平台差异说明 #基本使用 #嵌入内容 #遮罩样式 #API #Props #Events #Slot 创建一个遮罩层&#xff0c;用于强调特定的页面元素&#xff0c;并阻止用户对遮罩下层的内容进行操作&#xff0c;一般用于弹窗场景 #平台差异说明 AppH5微信小程序支付宝小程序百度小程…

将链表反转

反转链表在解决需要从尾节点开始遍历到头节点的地方很实用&#xff0c;是一种常用的解题技巧。在反转时&#xff0c;我们可以考虑从前向后反转和从后向前反转两种方式。 法一&#xff1a;递归 每次将链表的头节点的下一个节点作为新的头节点&#xff0c;然后对剩余部分调用递归…

阿里云OSS对象存储

一、前言 阿里云对象存储OSS作用&#xff1a;用于存储图片、视屏、文件等数据。 参考阿里云文档地址&#xff1a;阿里云对象存储教程 二、总体思路 说明&#xff1a;客户端给服务端发送请求&#xff0c;获取policy和signature等数据&#xff08;服务端提供&#xff09;&#…

前端小案例——导航回顶部(HTML+CSS+JS, 附源码)

一、前言 实现功能&#xff1a; 这个案例实现了页面滚动到一定位置时显示"回到顶部"按钮&#xff0c;并且点击按钮能够平滑滚动回页面顶部的功能。 实现逻辑&#xff1a; 页面结构&#xff1a;通过HTML标签定义了页面的基本结构。页面主要由多个div.content组成&am…

MySQL-----初识

一 SQL的基本概述 基本概述 ▶SQL全称: Structured Query Language&#xff0c;是结构化查询语言&#xff0c;用于访问和处理数据库的标准的计算机语言。SQL语言1974年由Boyce和Chamberlin提出&#xff0c;并首先在IBM公司研制的关系数据库系统SystemR上实现。 ▶美国国家标…

如何解决 docker registry x509 证书不信任问题?

最近想尝试一下极狐GitLab&#xff08;可以理解为 GitLab 在中国的发行版&#xff09;内置的容器镜像仓库&#xff0c;这样就不用自己安装 Harbor 之类的了。于是找了个服务器安装了一个极狐GitLab 的私有化部署版本&#xff0c;安装过程可以参考过往的技术文章使用Omnibus 安装…