当前位置:   article > 正文

华为EROFS文件系统浅析_linux huawei filesystem

linux huawei filesystem

华为最近发布了一个新的linux文件系统,EROFS ( Extendable Read-Only File System ),是一个基于ROM的只读文件系统。目前已经并入内核主线4.19分支,代码可以在driver/staging/erofs目录上获取

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/staging/erofs?h=v4.19.8

支持xattr,支持LZ4文件压缩节约存储空间。目标针对的是android手机文件系统中的只读分区,当然也可以用于其他对存储和性能都有要求的嵌入式系统领域。

目前开放出来的mkfs tools可以在github上下载到

https://github.com/hsiangkao/erofs_mkfs_binary

maintainer贴的一段性能测试如下:

https://lkml.org/lkml/2018/5/31/306

Kirin970 (A73 Big-core 2361Mhz, A53 little-core 0Mhz, DDR 1866Mhz):
compression  EROFS seq read  EXT4 seq read        EROFS random read  EXT4 random read
ratio           bw[MB/s]       bw[MB/s]             bw[MB/s] (20%)    bw[MB/s] (20%)
  4              546.7          544.3                    157.7              57.9
10              535.7          521.0                    152.7              62.0
15              529.0          520.3                    125.0              65.0
26              418.0          526.3                     97.6              63.7
35              367.7          511.7                     89.0              63.7
48              415.7          500.7                     78.2              61.2
53              423.0          566.7                     72.8              62.9
66              334.3          537.3                     69.8              58.3
76              387.3          546.0                     65.2              56.0
85              306.3          546.0                     63.8              57.7
94              345.0          589.7                     59.2              49.9
100              579.7          556.7                     62.1              57.7

测试结果上看低压缩比的下性能比传统EXT4要好近3倍,高压缩比的情况下性能也与EXT4相当。

 

下面对EROFS做一个简单的剖析

1. EROFS on-disk layout

由于是只读文件系统,因此省略掉了inode bitmap和block bitmap这种区域节省空间。inode table是变长的,里面包含了inode结构体体和少量的内联文件数据。xattr和压缩特性都是可选的,未选择的情况下inode table空间将进一步缩小。

EROFS目前基本以4K大小为block,一个文件4K不对齐的结尾的部分会作为内联文件数据和inode head连接在一起,以提高page cache的利用和命中率。

2. EROFS 目录项结构

EROFS的目录项每项12字节,文件名被联合在一起放在目录项的后面节约存储空间,inode number用64字节大小保存。紫色部分是一个inode结构体的启始,可以简单的通过inode number * 32 + super block offset = paddr来得到inode结构体的分区物理存放位置,缩小了dirent结构体的大小,因为不用保存inode结构体的位置。

3. 文件压缩

EROFS支持LZ4压缩,节约空间的同时能保证性能。按maintainer的说法,EROFS支持的是一种叫做fixed output文件压缩形式,与之对应的是fixed-sized input文件压缩形式。

fixed output压缩据说可以提高压缩率,提高缓存利用率,节省内存消耗。

  • fixed-sized input压缩例子

fixed-size input就是总是以固定大小,如4K作为压缩输入,压缩输出是变长的。这样每4K的文件逻辑块对应的压缩后的文件块会小于或等于4K。如果文件随机访问block 2的话,物理块block 1和block 2的灰色部分的读取会造成写放大。

  • fixed-sized outpu压缩例子

fixed-sized output就是压缩后的物理块的大小总是4K。压缩率要比fixed-sized input高些。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/308944
推荐阅读
相关标签
  

闽ICP备14008679号