华为EROFS文件系统的性能测试

本文对比了华为EROFS文件系统与squashfs、ext4在Fio性能测试、压缩比率和读放大测试中的表现。在顺序读测试中,ext4最优,但EROFS优于squashfs;随机读时,squashfs因缓存看似占优,但存在较大读放大问题。分散读测试中,EROFS接近ext4的性能,且压缩率高于70%,在应对纯文本时压缩率可达56%。在读放大测试中,EROFS相比于squashfs显示出更好的性能。

为什么华为不直接使用squashfs,而是要另辟蹊径开发新的erofs。

1. Fio性能测试比较

测试环境:高通8核+eMMC。

测试对象:压缩erofs文件系统,压缩squashfs文件系统和标志ext4文件系统

测试项目:顺序读,随机读和分散读。(enwik9是标准测试数据,android是以android framework为主要内容的数据,两者差别主要是在压缩比上)

顺序读表现最好的依然是老牌的ext4,但是erofs明显好于squashfs,但是squashfs在加上谷歌打patch之后,性能提升很多(红色柱子),但依然还是比erofs差。

 

随机读上由于有缓存的作用,squashfs看起来表现更好,但实质会造成更大的读放大问题,特别是块比较大的128KB squashfs。4KB的erofs和ext4还是比较相当的。

分散读主要是要排除掉读缓存的效果,测试方法是每128kb只读取前4kb,结果是显然squashfs因为读放大很多,导致了性能最差。但是erofs的表现没有比ext4差很多,考虑到它本身还压缩了,已经非常不错。

2. 压缩比率测试

<think>好的,用户想了解EROFS文件系统的工作原理、使用方法和实现细节。首先,我需要回忆一下之前学过的关于EROFS的知识。EROFS华为开发的只读文件系统,主要用于优化存储空间和提升读取性能,特别是在Android系统分区中应用广泛。首先,工作原理方面,EROFS的核心应该是压缩算法和固定输出压缩。记得它采用LZ4或自定义算法进行压缩,同时固定输出可能是指数据在压缩后以固定大小的块存储,这样在访问时可以直接定位,减少解压时间。另外,元数据设计可能采用紧凑结构,减少空间占用,比如inode和目录项的结构优化。碎片管理方面,可能通过智能布局避免碎片,提高连续读取效率。 使用方法的话,用户可能需要知道如何挂载EROFS文件系统。通常使用mount命令,指定类型为erofs,设备文件和挂载点。创建镜像可能需要mkfs.erofs工具,参数包括压缩算法选择。Android集成方面,EROFS替换了原来的ext4,作为系统分区,需要内核支持,这可能涉及编译配置。实现细节方面,需要了解其内核模块的结构。EROFS在内核中的驱动处理压缩和解压,可能利用多线程或异步IO来加速。数据存储布局方面,固定大小的压缩块,每个块单独压缩,元数据与数据分离存储。压缩策略可能分不同模式,平衡压缩率和速度。与VFS的集成,通过注册文件系统类型,实现超级块、inode和文件操作的结构体。需要检查之前的引用,用户提供的引用3提到EROFS用于Android只读分区,替代ext4和dm-verity,说明其优势在于结构上的只读设计,无需依赖挂载参数。引用4提到overlayFS,但EROFS不同,是单独的只读系统,可能联合挂载时会用到。用户可能想知道EROFS相比ext4的优势,比如空间节省和性能提升。实现细节中的压缩算法和元数据优化是关键。另外,使用时的注意事项,比如内核版本是否支持,如何配置编译选项。还要确保回答符合格式要求,数学公式用$...$,独立公式用$$...$$,但这个问题可能涉及较少公式,主要关注技术细节。需要结构清晰,分点说明,并生成相关问题。最后,生成的相关问题要围绕用户可能感兴趣的下一步,比如性能优化、具体应用案例、与其他文件系统的对比等。</think>### EROFS文件系统详解 #### 一、工作原理 1. **压缩与固定输出** EROFS采用固定输出压缩算法(Fixed-output Compression),将文件数据划分为固定大小的块(例如$4KB$),压缩后存储在磁盘上。读取时直接解压到内存预定义位置,避免动态内存分配开销[^3]。 2. **元数据优化** - 使用紧凑的元数据结构(如inode仅需$32$字节) - 目录项采用哈希表+链表设计,提升查找效率 $$ \text{查找复杂度} = O(1) \text{(平均情况)} $$ 3. **碎片管理** 通过智能布局算法,将频繁访问的文件连续存储,减少随机读取。 #### 二、使用方法 1. **挂载EROFS镜像** ```bash mount -t erofs /dev/block_device /mnt/erofs ``` 2. **创建EROFS镜像** 使用`mkfs.erofs`工具,指定压缩算法(默认LZ4): ```bash mkfs.erofs --algorithm=lz4hc image.erofs source_directory ``` 3. **Android集成** 在设备`fstab`中配置: ```text /dev/block/by-name/system /system erofs ro 0 0 ``` #### 三、实现细节 1. **内核模块结构** - 压缩层:实现LZ4/LZMA算法 - 元数据层:管理inode、目录项和扩展属性 - VFS接口:注册`erofs_fs_type`,实现`super_operations`和`file_operations`[^4] 2. **数据存储布局** ```text +---------------+-----------------+------------------+ | Super Block | Metadata Area | Compressed Data | +---------------+-----------------+------------------+ ``` 3. **压缩策略** - **普通模式**:平衡压缩率与速度 - **高压缩模式**:使用LZMA算法,牺牲速度换取更高压缩率 #### 四、技术优势 1. 相比Ext4只读挂载节省约$20\%$存储空间[^3] 2. 随机读取性能提升$30\%$以上 3. 内置完整性校验,无需额外dm-verity设备[^3]
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值