虚拟机批量克隆工具_XSKY解读《关于如何高效率的对文件目录树进行快速克隆操作》...

这篇博客解读了一篇FAST'20会议论文,关注如何优化文件目录树的快速克隆操作。作者提出Nimbleclones概念,要求克隆操作快速、具有良好的读取局部性、写性能和空间利用率。为解决经典COW技术的拷贝粒度问题,他们引入了CAW技术,通过暂存微小修改来提升性能,并改造Bε-tree为Bε-DAG结构,以实现更高效的克隆。实验显示,改进后的BetrFS在克隆性能上相比传统文件系统有显著提升。
摘要由CSDN通过智能技术生成

XSKY解读FAST'20 论文 How to Copy File 《关于如何高效率的对文件目录树进行快速克隆操作》

01导读

这篇发表于FAST20会议的论文,是关于如何高效率的对文件目录树进行快速克隆操作,由来自北卡罗来纳大学教堂山分校的Yang Zhan,Yizheng Jiao以及 罗格斯大学,佩斯大学,石溪大学,VMWare研究中心的相关研究人员合作开发完成的。

本文并非是这篇论文的完整翻译稿,只是对里面的一些重点内容进行解读,有些地方解读不一定准确,建议感兴趣的同学结合原版论文一起阅读,以帮助大家拓宽思路。

文章中所用图表,除非特别注明,都来自于原版论文。

02概述

作者在一开始先介绍了快速克隆的背景和重要性。随着虚拟化的广为流行,各种应用对快速克隆都有着很强的需求,典型的,如快速创建虚拟机,就需要快速克隆出虚拟机的"root filesystem"即一个image磁盘文件。而在容器场景下,如docker会非常频繁的对一个特定的文件系统目录树进行快速拷贝,这些都需要高效的克隆机制。

针对于这些应用场景,现有的文件系统已经实现了一些"逻辑拷贝"功能,有别于"物理拷贝",逻辑拷贝一般在实现时只进行一些元数据级别的拷贝,而只有在后续的修改中,才按需对文件数据进行拷贝并修改,这种功能称作COW(copy-on-write),这种方法在拷贝的时效性和空间的利用率方面都得到了较大的提升,因此现在已经成为克隆的基础技术。在实现时,一般存在着基于block粒度的COW和基于file或者dir级别的COW,比如btrfs和xfs使用的cp –reflink技术。

这里作者指出,对于经典的COW技术,主要存在着"拷贝粒度"的问题,比如对于基于file级别的COW,一次微小的修改就可能导致昂贵的拷贝,比如1G大小的文件,只修改其中的1个字节,也会触发1G文件的拷贝。这会极大的增加初次COW写入时延,而且也不可避免的造成了空间上的浪费。反之,如果拷贝粒度过小,则初次COW写入时延有保证,但却容易造成碎片化(想象一下1个很大的文件,4K拷贝粒度,随机写入则会造成很多个4K COW块),后续顺序读的时候,因为这些4K数据并不是连续的,则读取速度会很慢。因此这里作者提出了自己对高效克隆的看法,需要满足如下4个特性才能被称作是合格的,作者称为"Nimble clones (敏捷克隆)"

· 必须能快速的完成克隆操作。

· 必须有良好的read locality (读取局部性),这样逻辑上相关的文件集读取起来会比较快,同时经过COW后,性能也应该保持一致。

· 必须有良好的写性能,不管是对克隆前的文件集和克隆后的文件集进行写入。

· 空间利用率必须要好。写放大应该尽量保持比较低的水平。

作者在图1举例了现有的几种支持COW文件系统在多次克隆操作并且修改其中一小部分内容后,使用grep查询文件内容的衰减情况:

f9f2930885ba8c284a1d7d93ba27d8e3.png

从图中可以看出,在每次克隆和修改之后,读性能都会衰减。看XFS和ZFS的结果,16轮后大概有3~5倍的衰减。Btrfs表现的好一些,大概只有50%的衰减。总体来看,这几个文件系统都出现性能单调递减的特征。

因此作者认为,这里的关键之处是应该将COW中的copy和write的大小进行解耦,即不应该使用一样的大小,如果是进行大的文件修改,那copy大块然后再覆盖写大块当然是合理的,但是如果是微小的修改,显然,应该将这次微小修改暂存起来,让多次微小修改进行聚合,在达到一定数量后,再批量处理显然会更合理一些。

这篇论文在现有的BetrFS基础上,实现了一种高效的克隆机制,以同时满足前述的Nimble clones需要具备的特征。作者引入了称作CAW(Copy-on-Abundant-Write)的技术,以暂存微小数据修改,等合适的时机再进行COW。另外,这篇论文在3方面对原来的Bε-tree数据结构进行了改进与增强,1.将原来的Bε-tree树结构改造成Bε-DAG结构(directed acyclic graph,有向无环图),以满足对整棵树进行更好的遍历。2.引入了GOTO message,可以快速的持久化克隆操作。3.引入"translation prefix(前缀转换)",用来满足对"延后数据拷贝"和 部分共享数据的查询。在引入这些优化和改进后,实验结果显示,对不同的模型,至少有33%到6.8倍的性能提升。

论文的贡献点归结为:

· 设计和实现了Bε-DAG数据结构,作为Nimble clones的基础。该方法扩展了Bε-tree,用来聚集小的修改,再择机进行批量写入。

· 写优化的克隆实现。在进行克隆操作时,仅需简单的向DAG root节点写入一个GOTO message消息。

· 量化的渐进分析表明,增加克隆不会影响其它的操作。克隆算法开销是对数级别的。

· 全面的测试表明,优化过的BetrFS并没有对原来的BetrFS基线产生不利的影响,而在clone特性上,对比传统的支持克隆特性的文件系统,在性能上有3-4倍的提高,而对比不支持克隆特性的文件系统,则有2个数量级的提高。

03BetrFS背景知识

为深入理解这篇论文,需要先理解BetrFS的背景知识。BetrFS是该团队开发的一个用于研究型的文件系统,从2015年到现在,作者团队已经基于该文件系统发布了多篇论文,详情请参考BetrFS官网。

BetrFS是一个内核态的基于KV存储的本地文件系统。不同于传统的文件系统,如XFS,Ext4,这些文件系统都是基于inode和B-tree(或B-tree变体)来管理和组织元数据和文件系统数据的。而BetrFS是基于Key-Value的,它有2个KV stores。其中,元数据KV存储的是 文件全路径(fullpath) 到 文件系统元数据(struct stat)的映射。数据KV 存储的是 {fullpath+block number} 到 4K block的映射。

8d728a67d55576715c73aabd0fd83600.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值