赞
踩
华为最近发布了一个新的linux文件系统,EROFS ( Extendable Read-Only File System ),是一个基于ROM的只读文件系统。目前已经并入内核主线4.19分支,代码可以在driver/staging/erofs目录上获取
支持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-size input就是总是以固定大小,如4K作为压缩输入,压缩输出是变长的。这样每4K的文件逻辑块对应的压缩后的文件块会小于或等于4K。如果文件随机访问block 2的话,物理块block 1和block 2的灰色部分的读取会造成写放大。
fixed-sized output就是压缩后的物理块的大小总是4K。压缩率要比fixed-sized input高些。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。