基于Linux系统对btrfs文件系统性能的对比分析

2022-01-19 06:30
江苏通信 2021年6期
关键词:压缩算法拷贝磁盘

苗 杰

国家计算机网络应急技术处理协调中心江苏分中心

0 引言

ext2和ext3文件系统在发展中遇到越来越多的扩展性问题,随之产生了ext4文件系统。btrfs曾被称为是下一代Linux文件系统,其目标是为了取代Linux平台的ext3文件系统。btrfs加入了目前ext3、ext4并未支持的功能,如支持快照功能、具有COW特性(Copy-on-write)、支持创建子卷,以及在线调整文件系统大小等一系列新功能。

1 btrfs文件系统的新特性

btrfs具有extent特性、BTree结构、SSD优化、COW特性、校验和、快照功能、创建子卷、内建磁盘阵列、延迟分配、内联文件、目录索引、预分配和压缩、修改文件系统大小、文件系统转化以及debug功能等新特性。本节主要介绍其中如下几种新特性。

1.1 extent特性(extent feature)

btrfs采用了基于extent的文件存储来减少元数据开销,ext4也采用extent的技术来对文件进行存储。与ext4不同的是,btrfs将所有文件的元数据保存在一个BTree中,而ext4针对每个文件,则单独用一个BTree来保存元数据。

1.2 BTree结构(BTree structure)

btrfs内部所有元数据都采用BTree管理,相比于ext4采用线性表来存储目录文件,则拥有良好的可扩展性。btrfs内部不同的元数据由不同的Tree管理。在superblock中由指针指向这些BTree的根。

1.3 COW特性(Copy-on-write)

btrfs是一种COW(copy-on-write)文件系统,btrfs在普通操作中不会直接覆盖数据,而是将元数据和数据的新值写到别的地方,然后在文件系统中指向新的位置,这就提供了强大的一致性和完整性保证。而ext4可以看成是一种overwrite文件系统,当更新数据时,直接对原来的数据内容进行更新。图1是btrfs进行单一数据COW操作示意图。

图1 COW示意图

A是FS Tree的根节点,若对元数据C进行更新,此时并不会立即更新C。Btrfs首先将元数据插入一个新分配的block C’中,并修改上层节点B,使其指向新的block C’;修改B也将引发COW,依此类推,引发一个连锁反应,直到最顶层的 root A。整个过程结束,节点A’变成了FS Tree的根节点。Btrfs修改superblock 使其指向A’。图1仅显示了更新单一元数据COW过程,但文件系统中很多操作需要更新多个不同的元数据。利用COW 事务能保证文件系统一致性,且系统重启后不需要执行fsck,因为superblock要么指向A,要么指向A’,无论哪个都是一致的数据。

1.4 校验和(Checksum)

btrfs采 用checksum技 术 来保证数据的可靠性,btrfs在读取数据的同时会读取其相应的checksum,采用单独的checksum tree来管理数据块的校验和,将checksum和checksum保护的数据块分离开,从而提供更严格的保护。ext2/ext3并没有提供校验和特性,对磁盘数据完全信任。而ext4采用日志校验和特性来提高文件系统的可靠性,对数据部分并未提供校验和保护措施。由于硬件原因,从磁盘上读出的数据可能会出错,即使数据从磁盘读出正确,也很难保证数据在网络上安全传输。

1.5 内联文件(Inline file)

系统中往往存在大量的小文件,比如几百个字节甚至更小。如果为其分配单独的数据block,便会引起内部碎片,浪费磁盘空间。btrfs将小文件的内容保存在元数据中,不再额外分配存放文件数据的磁盘块。改善了内部碎片问题,也增加了文件的访问效率。

图2 为btrfs采用inline file的示意图。假设现在有文件file1,大小15B,file2 大小为1MB。在BTree中存在一个叶子节点,叶子节点中的extent1 metadata,extent2 metadata 分别用来表示file1和file2的磁盘使用空间。采用inline file,btrfs将大小为15 B的file1直接内嵌在元数据extent1 metadata后面。而对于大小1MB的file2,采用普通的extent表示方法,由extent2 metadata指向一段extent,存放file2。若对file1采用如绿色虚线表示,指向一个extent,由于file1仅有15 B,剩余空间便成了碎片。

图2 内联文件示意图

采用inline file技术,读file1时只需读取extent1 metadata的block,而对于file2则先读取extent2 metadata,再读取其指向的extent,这便减少了磁盘IO。得益于inline file技术,btrfs处理小文件的效率非常高,也避免了磁盘碎片问题。

1.6 预分配和压缩(Fallocate and compress)

btrfs文件系统支持对磁盘的预分配,由于所有空间都是一次分配,因而更有可能使用连续的磁盘空间,所以能够有效减少磁盘碎片。在将数据写入磁盘之前进行压缩,有时能够大大减少磁盘IO的次数,提升IO效率。btrfs内置压缩功能,从2.6.39内核开始默认采用lzo算法来进行压缩和解压,zlib算法则在2.6.39内核版本之前作为默认压缩解压算法。然而当压缩使能后,整个文件系统下的所有文件都将被压缩。

2 btrfs与ext4文件系统性能的对比

下面主要从如下几点对btrfs和ext4进行性能对比分析。

(1)对比btrfs和ext4创建不同大小文件系统的性能,其测试结果如表1所示。

表1 创建文件系统性能对比

表1 的图形效果如图3所示。

图3 创建文件系统性能对比

btrfs创建文件系统时,无论磁盘空间大小,仅创建文件系统的元数据,使用磁盘空间时再进行格式化。而ext4在创建文件系统时,不仅创建文件系统元数据,还会对磁盘进行格式化。因此创建文件系统时,ext4比btrfs需要更长的时间。

(2)对比btrfs和ext4删除不同大小文件的性能,其测试结果如表2所示。

表2 的图形效果如图4所示。

表2 删除文件性能对比

图4 删除文件性能对比

btrfs具有目录索引技术,相比ext4删除文件,btrfs删除文件时会同时删除文件的目录索引,额外删除文件的目录索引需要时间开销,这是造成btrfs删除文件的性能比ext4差的原因。

(3)对比btrfs和ext4文件拷贝的性能,其测试结果如表3所示。

表3 的图形效果如图5所示。

图5 文件拷贝性能对比

表3 文件拷贝性能对比

当对目录下的大量文件进行拷贝时,btrfs是顺序读取文件进行拷贝,而ext4是通过hash方法,文件读取的效率不如顺序读取,因此btrfs的文件拷贝性能更优。

(4)对比btrfs和ext4文件读写性能,利用iozone测试工具得到的结果如表4所示。

表4 文件读写性能对比

表4 的图形效果如图6所示。

图6 文件读写性能对比

从上述数据可以看出,btrfs文件的随机读写性能明显优于ext4。由于btrfs的预读写缓存大小为4MB,而ext4的预读写缓存大小为128KB,这可能是导致btrfs随机读写性能优于ext4的原因。

3 btrfs新功能对读写性能的影响

本节主要对btrfs新增的COW功能和压缩功能进行了性能测试,主要验证了是否开启新功能对读写性能带来的影响并进行了测试分析。

(1)对比btrfs的COW功能是否开启对读写性能的影响,其测试结果如表5所示。

表5 COW功能对读写性能影响

表5 的图形效果如图7所示。

图7 COW功能对读写性能影响

从上述结果可以看出btrfs开启COW功能虽会涉及元数据操作,但并未对读写性能带来较大影响。

(2)对比btrfs采用不同压缩算法对读写性能的影响,其测试结果如表6所示。

表6 不同压缩算法性能对比

表6 的图形效果如图8所示。

图8 不同压缩算法读写性能对比

btrfs文件系统默认挂载项并未选择压缩算法,若要选择zlib或lzo压缩算法,则需要添加相应的挂载参数。从实验结果看出zlib和lzo压缩算法均能大幅提升文件的读写效率。

4 结束语

本文首先简要介绍了btrfs文件系统一些功能特性,并对比分析了btrfs与ext4文件系统在创建文件系统、删除文件、拷贝文件、读写文件方面的性能差异。从实验数据可以看出btrfs在创建文件系统、拷贝文件以及随机读写文件性能明显优于ext4,但删除文件性能比ext4差。btrfs具有的COW机制对读写性能并未造成明显影响,选择btrfs的zlib和lzo算法可以大幅提升文件的读写性能。btrfs作为新一代文件系统具有良好的功能特性,目前其仅在Fedora33中成为默认的文件系统,后期有望在Linux平台得到广泛使用。

猜你喜欢
压缩算法拷贝磁盘
基于参数识别的轨道电路监测数据压缩算法研究
解决Windows磁盘签名冲突
修改磁盘属性
唐氏综合征是因为“拷贝”走样了
文化拷贝应该如何“拷”
一种基于嵌入式实时操作系统Vxworks下的数据压缩技术
磁盘组群组及iSCSI Target设置
创建VSAN群集
PMU数据预处理及压缩算法
曲线数据压缩方法与实现