盘点只读压缩文件系统( 二 )


  1. 根据上层要读取范围计算要解压的数据块(这个例子中是0 , 1 , 2 , 3 , 4)
  2. 分配临时缓存页(可选)存放解压内容(0 , 1 , 2) , VFS已分配数据页不用再分配
  3. 通过vmap将上述物理页映射为连续虚拟页
  4. 如果有原地I/O占用了VFS分配的数据页 , 则将数据拷贝到临时页
  5. 解压数据到指定虚拟地址

盘点只读压缩文件系统文章插图
为优化内存占用 , EROFS还提供了缓存解压/滚动解压(预分配一定数量的内存页)、原地解压等策略 。 另外 , 通过调度优化和协同解压进一步改善了数据读取性能 。 理论上 , 解压的过程增加了CPU计算时间 , 而压缩数据读取减少了I/O时间(特别是对于顺序读取来说) 。 所以对于只读压缩文件来说 , 压缩率达到一定收益后读性能会好于不压缩的文件系统 。 即CPU时间的增加小于I/O时间的减少 , 这从EROFS的测试数据也可以看出:当压缩节省空间超过35%以上时 , 随压缩比提升EROFS的读性能(特别是顺序读)会越来越好于EXT4 。
以上就是对只读压缩文件系统的一个简单介绍 , 可以看出根据应用场景的不同各个只读压缩文件系统在压缩比、压缩/解压效率上各有侧重 。 EROFS相比其他只读压缩文件系统引入了更多的设计思路 , 实现细节和一些优化值得肯定 。