浅谈华为EROFS文件系统的两个主要技术

EROFS(Extendable Read-Only File System)华为最近发布一个新的Linux文件系统,是一个基于ROM的只读文件系统。目前已经并入内核主线4.19分支该文件系统因为其所宣传的“可提升随机读写速度数倍”引起了业内外广泛关注。下面将从两个方向对该文件系统取得如此成效的原因进行解读。

 

通过fixed output压缩缓解读放大问题

一般存储器以4K为最小的读写单元,要找到一个读写单元就要寻址。如果有一组数据大小在5K左右,压缩后占用3.5K的空间。当这3K的数据全部在一个单元内时,一次读写就能完成我们的操作,但是如果这3K的数据前1.5K在第一个存储单元内,后2K在另一个存储单元内,就需要进行至少两次读写会导致性能下降

在以往Linux内核使用的压缩只读文件系统squashfs中,每4K数据进行一次压缩。数据不同,压缩率也不一样,有的数据可以压缩到很,有的数据几乎没办法压缩。这样就会压缩出很多大小不一的数据块。尽管这些数据块全部小于4K,然而可以说,这些数据块几乎完全不能和4K单元对齐,因此读写时会造成很多的额外消耗。

例如一个128k的文件, squashfs会采用固定大小(比如32K)为输入,即会将每32k数据压缩成不确定的大小,如可能是12K;那么读取文件中的任意4k数据,都需要至少读取完整的12k压缩数据,然后解压再读取其中的4k,这多读取的8K就是所谓的读放大问题

 

EROFS是一种压缩文件系统,采用了一种叫做fixed-sized output文件压缩算法该算法在EROFS中应用的示意图如下:

一个文件4K不对齐的结尾的部分会作为内联文件数据和inode head连接在一起压缩后的物理块大小为固定值(4K)。相比于以固定大小为输入,变长输出的fixed-size input能够有效的缓解读放大问题,降低I/O读取量。对于上面的情况,EROFS采用的是固定大小为压缩输出,即可能会将这128k数据的0-7k压缩成4k,7-25k也压缩成4k,25-32k也压缩成4k,以此类推那么读取文件中的任意4k数据,只要读取最少4k,最多8k(任意4k数据压缩后最多分布到两个block中的压缩数据相比squashfs读放大问题明显减少了。

 

只读特性

EROFS被应用于Android的只读系统分区。以往Android只读系统分区使用ext4文件系统的只读挂载参数和挂载dm-verity虚拟块设备(用于文件系统校验)来配合实现只读。这并非是一种结构上的限制,通过去除Ext4只读挂载选项并且不挂载dm-verity设备,就可以对系统分区进行写操作。

而EROFS在结构上即为天然只读,由于时间有限,其具体实现我还没有了解的很清楚,但根据网络上的一些讲解,EROFS存储单元间通过一种类似链表的结构进行连接,前面的存储单元保存着其后一个存储单元的位置,不通过全局bitmap管理所有可写区域。因此外来者无法知道哪个区域是有效可写入的,即使强行写入,其内容也不会被其它存储单元承认。

 

保障只读为整个系统的设计带来了很多好处,由于数据空间大小已经事先确定,文件系统可以消除直接inode/间接inode这样的设计,也省略掉了inode bitmap和block bitmap(记录空的block)这种区域来节省空间。直接把每个文件压缩后的数据顺序储存,然后保留压缩后每个簇对应的原始数据范围作为元数据即可。这样一来对文件的顺序访问变成了顺序读取,性能得到了很大提升。EROFS磁盘层数据结构示意图如下:

实现细节上,EROFS的inode table是变长的,里面包含了inode结构体和少量的内联文件数据。xattr和压缩特性都是可选的,未选择的情况下inode table空间将进一步缩小。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android UFS是指Android系统使用的一种闪存存储技术。在Android启动过程中,UFS扮演着重要的角色。Android启动可以被称为UFS启动,它包括以下几个阶段:开机、RomCode、Pre UEFI、UEFI、Kernel和Android。这些阶段依次进行,最终完成Android系统的启动。 在手机上,常见的文件系统包括F2FS、EXT4、EROFs和APFs。华为手机使用EROFs,苹果手机使用APFs。文件系统的选择对于提升闪存的随机读写能力非常重要。文件系统可以使闪存更高效地存储和管理数据,从而快速准确地找到所需的数据。就像在一个仓库中寻找特定物品一样,文件系统可以帮助我们快速找到我们想要的内容。 关于闪存协议,iPhone一直使用NVMe协议的闪存,而安卓手机从eMMC协议闪存逐渐升级到现在的UFS3.1协议闪存。一些高端安卓手机已经开始使用UFS3.1协议闪存,而一些中低端手机仍然使用UFS2.1、2.2或者甚至eMMC混合使用。这些不同的协议闪存具有不同的性能和速度特点,UFS3.1协议闪存通常具有更高的读写速度和更好的性能表现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [UFS 启动](https://blog.csdn.net/guozhidixian/article/details/120384068)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [iPhone上用的NVMe闪存,与Android旗舰上用的UFS2.1闪存,各自的优劣是什么?](https://blog.csdn.net/cwtxyi/article/details/120592346)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值