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

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.mzph.cn/news/663339.shtml

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

相关文章

EasyX图形库学习(一)

目录 一、easyX图形库基本介绍 1、easyX的原理 2、easyX的安装 3、easyX的颜色(RGB颜色模型) 颜色模型相关函数: 4、easyX的坐标 二、相关函数介绍: 绘图设备相关函数: 图形颜色及样式设置相关函数: 图形绘制相关函数: 文字输出相关…

Linux多线程服务端编程:使用muduo C++网络库 学习笔记 第十一章 反思C++面向对象与虚函数(下)

11.7.2 值语义与生命期 值语义的一个巨大好处是生命期管理很简单,就跟int一样——你不需要操心int的生命期。值语义的对象要么是stack object,要么直接作为其他object的成员,因此我们不用担心它的生命期(一个函数使用自己stack上…

分享个前端工具-取色调色工具

这里虽然贴了两个,但推荐 Pipette. PipetteWin22.10.22.zip: https://download.csdn.net/download/rainyspring4540/88799632 图标: 界面: ColorPix https://download.csdn.net/download/rainyspring4540/88799642 图标: 界面…

Google Play上架:因行为透明度被拒审或下架的政策自查(基于区块链的内容)

近期很多朋友的项目出现因行为透明度问题被谷歌拒审或者已经上架的包被下架甚至封号,今天解释一下为什么会被封号下架,根据是什么? 目录 政策发布时间与截止时间政策内容政策背景政策解析和问题讲解政策发布时间与截止时间 基于区块链的内容相关政策,于2023-07-12 公布,…

看完这篇文章,你一定能看懂Datasheet!

大家好,我是砖一。 针对以上学妹的疑问,我有几点建议,大家可以听一下~ 一,怎么样查找Datasheet(数据手册) 大多数人下意识就点开浏览器,把型号往里面一输,不建议这样。 对于刚入行…

Fluent的小bug处理:后处理截面显示存在漏洞

最近发现的Fluent的bug,关于后处理截面显示不完整的问题。 1 现象 在使用六面体核心类型单元(包括四面体-六面体核心和多面体-六面体核心)进行网格划分的时候,可能会在截面上不能完整捕捉单元形状及其分布状态,导致做…

linux使用iptables禁用ip

iptables是什么? iptables 是一个强大的开源软件,它是 Linux 系统内核中 netfilter 包过滤框架的一部分,用来实现防火墙功能。iptables 提供了一种灵活的方式来控制和管理进出以及通过 Linux 计算机的网络流量。 前提 我在云服务器上用doc…

【代码随想录】LC 1. 两数之和

文章目录 前言一、题目1、原题链接2、题目描述 二、解题报告1、思路分析2、时间复杂度3、代码详解 前言 本专栏文章为《代码随想录》书籍的刷题题解以及读书笔记,如有侵权,立即删除。 一、题目 1、原题链接 1. 两数之和 2、题目描述 二、解题报告 1、思…

2024美赛E题保姆级分析完整思路代码数据教学

2024美国大学生数学建模竞赛E题保姆级分析完整思路代码数据教学 E题:Sustainability of Property Insurance(财产保险的可持续性) 这道题目同样是比赛的热门题目,是很多同学在训练的时候经常做的题目类型了,属于大数据…

Spring事务:保障钱不会丢

在MySQL中简单的了解过事务,简单说事务就是把一组操作封装成一个执行单元,要么全部成功,要么全部失败。 在一次转账中,第一步A减去一百元,第二步B增加一百元。如果没有事务,第一步执行成功了,但…

Unity点乘和叉乘

目录 前言 点乘 一、点乘是什么? 二、应用 三、使用步骤 1.代码示例 叉乘 一、叉乘是什么? 二、应用 三、使用步骤 1.代码示例 总结 前言 Unity中经常会用到向量的运算来计算目标的方位,朝向,角度等相关数据&#xff0…

Springboot-前后端分离——第三篇(三层架构与控制反转(IOC)-依赖注入(DI)的学习)

本篇主要对ControllerServiceDAO三层结构以及控制反转(IOC)与DI(依赖注入)进行总结。 目录 一、三层架构: Controller/Service/DAO简介: 二、控制反转(IOC)-依赖注入(DI): 概念介绍: DOC与…

k8s安装dashboard报错CrashLoopBackOff

报错信息 使用kubectl get pods -A查看集群,出现错误: kubernetes-dashboard kubernetes-dashboard-xxxxxxxxxx6-2qrst 0/1 CrashLoopBackOff 6 15m查看日志后,发现原因: panic: Get "https://10…

【Django-ninja】分页管理器

django ninja通过paginate装饰器即可进行分页。内置了两个分页管理器LimitOffsetPagination和PageNumberPagination,能够实现基本的分页要求。当内置分页器不满足要求时,可以继承PaginationBase进行扩展自己的分页管理器。 1 使用分页器 from ninja.pa…

css3 属性 backface-visibility 的实践应用

backface-visibility 是一个用于控制元素在面对屏幕不同方向时的可见性的CSS3特性。它有两个可能的值: visible:当元素不面向屏幕(即背面朝向用户)时,元素的内容是可以被看到的。hidden:当元素不面向屏幕…

使用融合CDN同时提升网站效能及安全性

现在许多企业的服务都依靠网站营运,维持稳定的网站效能及安全性变得相当重要。事实上,当网站载入时间超过 3 秒钟,超过 40% 的使用者会直接跳出,由此可见网站效能的重要性;而当网站受到 DDoS 攻击时,处理起…

经典mysql实操和行专列操作

1.删除除了学号字段以外,其它字段都相同的冗余记录,只保留一条!(也就是要删除王五和赵六中一条重复数据只留一条) 要求的预期效果: 原始数据创建表结构: CREATE TABLE tb_student (id int(16) NOT NULL,na…

单细胞scATAC-seq测序基础知识笔记

单细胞scATAC-seq测序基础知识笔记 单细胞ATAC测序前言scATAC-seq数据怎么得出的? 该笔记来源于 Costa Lab - Bioinformatics Course 另一篇关于scRNA-seq的请移步 单细胞ATAC测序前言 因为我的最终目的是scATAC-seq的数据,所以这部分只是分享下我刚学…

【代码随想录-链表】环形链表

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

24.云原生ArgoCD高级之数据加密seale sealed

云原生专栏大纲 文章目录 数据加密之seale sealedBitnami Sealed Secrets介绍Bitnami Sealed Secrets工作流程安装sealed-secrets和kubeseal安装sealed-secrets-controller安装kubeseal通过kubeseal将sealed-secrets公钥拿出来通过kubeseal加密secrets替换kustomize下secret为…