exF2FS: Transaction Support in Log-Structured Filesystem——泛读笔记

news2024/11/28 22:33:51

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

问题

现代应用程序努力以崩溃一致的方式保护其数据,这通常分布在多个文件抽象之上。在底层文件系统缺乏事务支持的情况下,应用程序使用复杂的协议来确保跨多个文件的事务性更新,产生长序列的写操作和 fsync() 调用。通过文件系统的事务支持,应用程序可以用单个文件系统事务替换每个输出文件和清单文件的多个 fsync() 调用,通过消除多余的 IO 操作提供更高的性能。

挑战和现有方法局限性

为了成功部署启用事务的系统,必须在四个需求之间找到适当的平衡:易用性、代码复杂性、ACID支持程度、性能。

事务的系统级支持主要可以分为四类:本地操作系统支持[57, 61, 61, 75]、内核级文件系统[14, 26, 27, 46, 55, 66, 72, 78]、用户级文件系统[24, 48, 54]和事务性块设备[12, 28, 32, 52, 58, 65]。

  • 将事务作为操作系统一级进行支持是理想的,但它需要对操作系统进行实质性的更改。

  • 内核级文件系统的事务支持可以根据ACID支持的程度进一步分类:完整的ACID语义[27, 66]、没有隔离支持的ACD[55, 72],没有隔离和持久性支持的AC[34]。F2FS中的事务[34]仅支持原子性,而不支持隔离和持久性,且事务不能跨多个文件。尽管它对事务的支持最少,但F2FS是唯一成功将其事务支持部署到公共领域的文件系统。F2FS的事务支持有一个特定的目标应用:SQLite。借助F2FS的原子写,SQLite可以在没有回滚日志文件的情况下实现事务,并消除过多的刷新开销[31, 64]。

  • 用户级文件系统的事务支持利用用户级数据库管理系统提供完整的ACID事务[24, 48, 54],但ACID支持是以性能为代价的。

日志结构文件系统中的事务支持,有三个设计目标:

  • 事务应该能够跨越多个文件,包括目录。

  • 事务应该能够处理大量更新。

  • 事务不应该受到垃圾回收的影响。

本文方法

我们提出了 exF2FS,一种事务性的日志结构文件系统。包括三个关键组件:

  • 面向成员的事务。允许事务跨越多个文件,应用程序可以明确指定与事务相关联的文件。

  • 启用窃取的事务。允许驱逐未提交事务的脏页,同时保证事务的原子性。开发了延迟失效和重新定位记录来实现文件系统事务中的窃取。延迟失效禁止回收页面的旧磁盘位置进行垃圾收集,直到事务提交为止。重新定位记录维护撤消和重做信息以中止和提交被逐出的页面。允许应用程序使用少量内存执行事务,并将大量更新封装到单个事务中(例如,总大小为几十GB的数百个文件)。

  • 影子垃圾回收。允许日志结构文件系统在不影响正在进行的事务的原子性的情况下执行垃圾回收。

开源代码:GitHub - ESOS-Lab/xF2FS

使用 exF2FS,SQLite 多文件事务吞吐量相对于原始 SQLite 的多文件事务增加了 24×。当 RocksDB 将压缩实现为文件系统事务时,吞吐量增加了 87%。

实验

实验环境:两种存储设备:Samsung 850 PRO[51]和Intel Optane 900P[29]。Intel CPU i7-9700K(3.60GHz,4核)、64GB内存。

数据集:YCSB,Mobibench

实验对比:吞吐量、垃圾回收、延迟

总结

针对支持事务的文件系统,如何实现事务跨越多个文件、事务处理大量更新、事务不受到垃圾回收的影响。本文提出exF2FS:通过面向成员的事务,允许事务跨越多个文件,应用程序可以明确指定与事务相关联的文件;通过启用窃取,开发了延迟失效(禁止回收页面的旧磁盘位置进行垃圾收集,直到事务提交为止)和重新定位记录(维护撤消和重做信息以中止和提交被逐出的页面),允许应用程序使用少量内存执行事务,并将大量更新封装到单个事务中;通过影子垃圾回收,允许日志结构文件系统在不影响正在进行的事务的原子性的情况下执行垃圾回收。

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

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

相关文章

小林Coding_操作系统_读书笔记

一、硬件结构 1. CPU是如何执行的 冯诺依曼模型:中央处理器(CPU)、内存、输入设备、输出设备、总线 CPU中:寄存器(程序计数器、通用暂存器、指令暂存器),控制单元(控制CPU工作&am…

自研人工智能小工具-小蜜蜂(国外ChatGpt的平替)

国内有非常多好用的人工智能工具,但均无法完全替代国外ChatGpt。 ChatGPT相较于其他国内工具的优势在于以下几点: 创新的语言生成能力:ChatGPT是由OpenAI开发的先进的自然语言生成模型,它采用了大规模的预训练和精细调整方法。因此…

蓝桥杯刷题day06——平均

1、题目描述 有一个长度为n 的数组(n 是 10 的倍数),每个数ai都是区间 [0,9] 中的整数。 小明发现数组里每种数出现的次数不太平均,而更改第i 个数的代价为bi, 他想更改若干个数的值使得这10 种数出现的次数相等&…

创建TextMeshPro字体文件

相比于Unity的Text组件,TextMesh Pro提供了更强大的文本格式和布局控制,更高级的文本渲染技术,更灵活的文本样式和纹理支持,更好的性能以及更易于使用的优点。但unity自带TextMeshPro字体不支持中文。这里使用普通字体文件生成Tex…

前端登陆加密解决方案

项目背景 环食药烟草的数据下载模块中,需要判断用户在进行数据下载时是进行了登录操作,如果没有登录要跳转登陆页面,输入账号和密码进行登录。 使用场景 项目中需要前端书写登录页面,用户输入账号密码,前端获取到用…

Allegro中设置让Route Keepout(禁止布线区)允许布线或打过孔的方法

Allegro中设置让Route Keepout(禁止布线区)允许布线或打过孔的方法 Chapter1 Allegro中设置让Route Keepout(禁止布线区)允许布线或打过孔的方法一、前言二、设置方法 Chapter2 Cadence Allegro PCB设计88问解析(二十三) 之 Alleg…

QT中QComboBox添加点击事件,实现下拉框自动刷新

因为项目需要,在QT中的ui界面添加QComboBox控件,需求是实现控件的点击事件,查了资料,发现这个控件类的本身是没有点击信号可以使用的。 但是QT是基于C的面向对象,有了这个特点,我们就可以继承原来的类&…

认识Tomcat (一)

认识Tomcat (一) 一、服务器 1.1 服务器简介 ​ 硬件服务器的构成与一般的PC比较相似,但是服务器在稳定性、安全性、性能等方面都要求更高,因为CPU、芯片组、内存、磁盘系统、网络等硬件和普通PC有所不同。 ​ 软件服务器&…

Docker 搭建mysql 集群(二)

PXC方案 很明显 PXC方案在任何一个节点写入的数据都会同步到其他节点,数据双向同步的(在任何节点上都可以同时读写) 创建MySQL PXC集群 1 安装PXC镜像 docker pull percona/percona-xtradb-cluster:5.7.21 2 为PXC镜像改名 docker tag pe…

从零开始手写mmo游戏从框架到爆炸(三)— 服务启动接口与网络事件监听器

上一章我们完成了netty服务启动的相关抽象(https://blog.csdn.net/money9sun/article/details/136025471),这一章我们再新增一个全局的服务启动类,方便后续扩展。 服务启动 新增的两个类如下: 定义一个接口IServer …

react native错误记录

第一次运行到安卓失败 Could not find implementation class com.facebook.react.ReactRootProjectPlugin for plugin com.facebook.react.rootproject specified in jar:file:/D:/Android_Studio_Data/.gradle/caches/jars-9/o_3a1fd35320f05989063e7069031b710f/react-nativ…

Linux命令·

debian linux: deb 软件包 deb软件包分为两种,.deb二进制软件包,.dsc源码包 软件包的两种管理工具 1.dpkg 软件包软件的安装包必须存在 不能从镜像点获得安装包 不能检测软件之间的依赖关系 dpkg -i package.deb #安装包 dpkg -r package …

Elasticsearch:使用 Inference API 进行语义搜索

在我之前的文章 “Elastic Search 8.12:让 Lucene 更快,让开发人员更快”,我有提到 Inference API。这些功能的核心部分始终是灵活的第三方模型管理,使客户能够利用当今市场上下载最多的向量数据库及其选择的转换器模型。在今天的…

SpringBoot 登录检验JWT令牌 生成与校验

JWT官网 https://jwt.io/ 引入依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version> </dependency>设置过期时间 LocalDateTime localDateTime LocalDateTime.now().…

uniapp中使用EelementPlus

uniapp的强大是非常震撼的&#xff0c;一套代码可以编写到十几个平台。这个可以在官网上进行查询uni-app官网。主要还是开发小型的软件系统&#xff0c;使用起来非常的方便、快捷、高效。 uniapp中有很多自带的UI&#xff0c;在创建项目的时候&#xff0c;就可以自由选择。而E…

React Native学习记录

一、创建RN项目的时候是空文件夹的问题 1.使用npx react-native init RNDemos初始化项目的时候&#xff0c;会报错&#xff0c;模版错误&#xff0c;然后创建出来一个空的文件夹 2.如果出现这种情况&#xff0c;需要设置npm install -g react-native-cli 3.安装完成以后再次初…

python 多线程编程(一)

文章目录 threading - 基于线程的并行线程对象thread 类thread方法thread 属性例子 锁对象递归锁对象 条件对象 队列Queue对象SimpleQueque 对象例子 最近的工作需要用到多线程提升程序的运行效率&#xff0c;以前一直没有机会进行多线程编程&#xff0c;所以一直没有机会学习p…

QEMU源码全解析 —— 内存虚拟化(2)

接前一篇文章&#xff1a; 本文内容参考&#xff1a; 《趣谈Linux操作系统》 —— 刘超&#xff0c;极客时间 《QEMU/KVM》源码解析与应用 —— 李强&#xff0c;机械工业出版社 QEMU内存管理模型 特此致谢&#xff01; QEMU内存初始化 1. 基本结构 在开始介绍内存初始化…

[Python] 什么是KMeans聚类算法以及scikit-learn中的KMeans使用案例

什么是无监督学习&#xff1f; 无监督学习是机器学习中的一种方法&#xff0c;其主要目的是从无标签的数据集中发现隐藏的模式、结构或者规律。在无监督学习中&#xff0c;算法不依赖于任何先验的标签信息&#xff0c;而是根据数据本身的特征和规律进行学习和推断。无监督学习…

随机图论基础

一&#xff0c;随机图、随机图空间 1&#xff0c;随机图 一个n个点的无向图&#xff0c;最多有sn(n-1)/2条边。 每条边都有一定的概率存在&#xff0c;有一定概率不存在&#xff0c;那么每个图都有一个出现概率。 2&#xff0c;随机图空间 一共有2^s种不同的图&#xff0c…