Filesystem Fragmentation on Modern Storage Systems——论文泛读

TOCS 2023 Paper 论文阅读笔记整理

问题

文件系统碎片是计算机系统随着时间的推移而变慢的主要原因之一。以前认为,碎片化对硬盘驱动器(HDD)等旋转存储设备有害,但不影响固态驱动器(SSD),因为SSD在访问数据时不需要寻道时间。然而,最近的研究表明碎片化对SSD也有影响。

根据本文的实验,文件系统碎片化不仅降低了现代存储设备的I/O性能,还带来了与I/O公平性相关的各种问题,如性能干扰。

  • 从性能的角度来看,当前的Linux I/O堆栈只允许单个I/O表示连续的LBA空间。而碎片化将单个系统调用拆分为多个小的随机I/O,增加了内核开销,阻碍了SSD内部并行性的有效利用,导致请求拆分。

  • 从公平性的角度来看,碎片会干扰I/O调度器的活动[46]。当前大多数用于I/O公平性的Linux I/O调度器都依赖于块层级别的I/O属性,如I/O数量及其大小。但碎片化使这些属性随机化,并导致性能干扰。

挑战

消除碎片的直观方法是将碎片块迁移到新的连续区域,称为碎片整理。现有的碎片整理工具[11,13,18],例如用于Ext4的e4defrag[11],主要是为旋转存储设备(如HDD)设计的,它们会导致SSD和现代计算环境出现各种问题。

  • 大多数碎片整理工具[2,10,11,18]将每个碎片文件的全部内容复制到新的空间中,这会产生过多的I/O操作。增加了碎片整理的时间,降低了可用性。

  • 显著降低了协同运行应用程序的性能。在现代计算环境中,为了更好地利用资源,大量应用程序同时运行。

  • 现有方法显著增加了底层存储设备的写入流量,从而缩短了现代存储设备的寿命,包括基于闪存的存储设备,甚至Optane SSD。

本文方法

本文提出了FragPicker,用于现代存储设备的碎片整理工具,适用于现代存储设备,如基于闪存和optane的存储设备。主要目标是最大限度地减少碎片整理引起的I/O量,同时实现与传统工具类似的性能改进。

传统的碎片整理工具倾向于保证每个文件的整个文件块的连续性,因为HDD的寻道时间占I/O开销的很大一部分。本文通过实验分析,在现代存储设备上,只要不发生请求拆分,碎片之间的距离与I/O性能无关。因此,FragPicker试图保证每个系统调用访问的数据的连续性,而不是整个文件,以防止请求分裂。

为此,FragPicker分析指定应用程序/容器的I/O特性,并找出每个文件中用于迁移的最佳数据片段。只有在迁移有助于提高性能时,才会将碎片数据迁移到新的空间,有效地将碎片整理的I/O量降至最低。

  • 在分析阶段,跟踪应用程序的I/O活动,并确定用于后续迁移的最佳文件系统块,避免无意义的复制操作。例如,当应用程序以偏斜的方式发出I/O时,热数据的位置和放置可能会决定I/O性能,迁移冷数据不会带来很大的性能提升。因此FragPicker在系统调用层跟踪I/O信息,并识别应用程序确实需要的数据。为了进一步减少I/O数量,FragPicker计算每个数据段的访问计数,并将其用于决定迁移的目标数据。

  • 在迁移阶段,首先确认分析阶段中的预定块是否分段。在迁移之前,调查这些数据的碎片状态,以确定数据是否需要迁移。之后,使用fallocate为迁移分配一个新区域,并执行碎片块的实际迁移。

开源代码:GitHub - jonggyup/FragPicker

通过YCSB-C的评估显示,FragPicker将碎片整理的I/O总量减少了约66%,所用时间减少了约84%,同时显示出类似的碎片整理效果。

实验

实验环境:

数据集:合成工作负载,RocksDB YCSB-C,filebench fileserver,FIO

实验对比:吞吐量、开销、读性能、运行时间

实验参数:读写方式、文件系统、硬件

总结

本文针对文件系统碎片化问题,现有方法整理碎片引入的I/O开销过高。本文实验分析了现代存储设备上碎片化导致的性能和公平性下降,主要原因是请求分裂,即碎片化将单个系统调用拆分为多个小的随机I/O。因此提出了新的碎片整理工具FragPicker,分为两阶段执行。(1)在系统调用层跟踪I/O信息,对数据段访问计数,确定最影响性能的数据段。(2)确定数据块是否分段,若分段则分配新空间进行实际数据迁移。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

单链表题-ysf-反转-中间节点-回文-合并-分割

环形链表的约瑟夫问题_牛客题霸_牛客网 经典的约瑟夫环 #include <stdint.h> #include <stdlib.h> //创建链表 typedef struct ListNode ListNode;ListNode* buyNode(int x){ListNode* newNode(ListNode*)malloc(sizeof(ListNode));if(newNodeNULL){exit(1);}newN…

Facebook国内账户与 Facebook海外账户的区别

Facebook国内户的封户速度和频率有时可谓令人崩溃&#xff0c;为这种情况伤脑筋的朋友&#xff0c;不妨考虑一下Facebook海外户&#xff0c;既不限额&#xff0c;又更稳定..... Facebook&#xff0c;Google 开企业广告账户/游戏代投 &#xff0b;V:Ukvo77 TG&#xff1a;ukv…

AIGC——Instant-Style文本到图像生成中的样式保留算法解析

0.概述 在过去的几年中&#xff0c;基于调整的扩散模型在广泛的图像个性化和定制任务中取得了显着的进展。然而&#xff0c;尽管有潜力&#xff0c;当前基于调整的扩散模型在生成和生成风格一致的图像方面仍然面临着一系列复杂的挑战&#xff0c;其背后可能有三个原因。首先&a…

震惊!原来cmd命令行还可以这么玩?!

不论是在程序开发&#xff0c;还是遇到一些系统问题&#xff0c;我们很多时候会用到cmd命令行来处理问题&#xff0c;而当我们在执行cmd命令的时候&#xff0c;经常遇到下面这样的问题&#xff1a; ①. 控制台内容复制出来换行了 这种场景在我们安装nodejs插件的时候&#xff0…

项目管理表格-项目总体计划(项目管理-项目经理干货资料Excel)

项目管理总体计划模板 1、项目基本信息 2、项目里程碑 3、项目干系人 4、项目团队组织架构管理 5、项目预算管理 6、项目项目任务计划管理 7、问题及风险管理 8、项目周报 9、项目相关要求 软件项目相关全套精华资料包获取方式①&#xff1a;点我获取 获取方式②&#xff1a;本…

如何实现Linux双网卡同时连接内网和外网的配置?

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

百度百科怎么创建自己的公司

创建百度百科公司页面可以帮助提升企业知名度、提高搜索引擎排名、增强企业公信力、建立企业形象和行业权威。以下是创建公司百度百科的步骤&#xff1a; 准备阶段 收集资料 在开始撰写百度百科公司页面之前&#xff0c;首先需要收集公司的相关资料&#xff0c;包括公司的历史、…

社群推广遇见瓶颈?点这里,教你一招立马激活 | C1N短网址

社群推广在当下互联网营销里可是相当重要的一环啊&#xff0c;靠着社群的力量能迅速提升品牌知名度以及用户互动性。但在搞社群推广的过程中&#xff0c;那可是会碰到好多瓶颈的&#xff0c;这可让社群运营人员脑壳疼得很呐。 先来说说 01 社群人气不足&#xff1a;在社群推广中…

项目中使用Elasticsearch的API相关介绍

项目中使用Elasticsearch的API相关介绍 0、域映射类型 text&#xff1a;会分词&#xff0c;不支持聚合对当前搜索关键词&#xff0c;先自身分词&#xff0c;分成多个词&#xff0c;然后去一个一个的词去利用倒排索引去查询es索引库一般应用在搜索关键字匹配的字段的类型。 商…

电商数据分析的秘籍|数据采集渠道与工具|电商数据采集API接口

【数据采集渠道及工具选择】 进行电子商务数据分析与采集时常用的数据来源渠道有电子商务网站、店铺后台或平台提供的数据工具、政府部门、机构协会、媒体、权威网站数据机构、电子商务平台、指数工具等。

电子资源|基于SSM+vue的电子资源管理系统(源码+数据库+文档)​

电子资源管理系统 目录 基于SSMvue的电子资源管理系统 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 5.2.1管理员功能模块 5.2.2用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&am…

C++ I/O流(一)——输出流

一、IO流概念 IO流可分为输入流和输出流,用于从设备(如键盘、文件、网络等)读取数据或向设备写入数据。C++标准库提供了丰富的IO流类,包括iostream、fstream、stringstream等,分别用于处理控制台输入输出、文件输入输出和字符串流操作。 读操作:输入流中读取数据到程序中…

Nginx配置文件conf解释

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 Nginx(“engine x”…

PHP黑魔法之strcmp与is_numeric绕过

1、strcmp绕过 PHP手册: int strcmp ( string $str1 , string $str2 )Return ValuesReturns < 0 if str1 is less than str2; > 0 if str1 is greater than str2, and 0 if they are equal 当输入的两个值为不是字符串时就会产生不预期的返回值 strcmp()在比较字符串和…

Java中的数据类型与变量

引言&#xff1a; 哈喽&#xff0c;各位读者老爷们大家好呀,long time no see!这里是小堇Java小课堂&#xff0c;在本课堂中我们将继续分享Java中的数据类型与变量&#xff0c;标识符&#xff0c;关键字等知识&#xff0c;那我们启程咯&#xff01; 数据类型与变量 1.字面变量…

MacOS docker 安装与配置

orbstack 安装 官网&#xff1a; https://orbstack.dev 下载链接&#xff1a;Download OrbStack Fast, light, simple Docker Desktop alternative 选择是Apple M系列处理器&#xff0c; 或 Intel系列处理器 到这里就安装好了Orbstack软件&#xff0c;下面开始配置docker 下…

QT状态机2-含终止状态的嵌套状态机

#include "MainWindow.h" #include "ui_MainWindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)

【C++小语法技巧】命名空间和输入输出

在使用C语言编程过程中&#xff0c;C语言的要求之严格&#xff0c;编程过程之繁琐&#xff0c;大同小异的重复性工作&#xff0c;令C之父使用C语言编程时也深受其扰&#xff0c;于是乎C兼容C小语法诞生了 一、命名空间域&#xff08;解决C语言中命名冲突&#xff09; 1.定义命…

Java 8 Supplier函数式接口介绍及实战案例

介绍直接看这篇文章比较详细&#xff1a;【Java 基础篇】Java Supplier 接口详解 Supplier 是 Java 8 引入的一个函数式接口&#xff0c;它属于 java.util.function 包。Supplier 接口表示一个不接受任何参数但返回某种类型结果值的函数。它定义了一个 get() 方法&#xff0c;该…

HAProxy系列文章二《Patroni+ETCD+PG14+HAProxy的安装部署》

瀚高数据库 目录 文档用途 详细信息 文档用途 本文主要介绍Patroni架构下单点HAProxy的安装部署&#xff0c;通过单点HAProxy实现数据库的负载均衡。本文为HAProxy系列文章之一&#xff0c;其他相关文章请点击文档下方的相关文档链接进行详细查看&#xff0c;文章内不在赘述。…