当前位置: 首页 > 科技观察

横向对比EXT4,感受真正的Linux文件系统F2FS

时间:2023-03-20 15:18:56 科技观察

一、概述F2FS是FlashFriendlyFileSystem的缩写。该文件系统由韩国三星电子于2012年开发,仅适用于运行Linux内核的系统。该文件系统对NAND闪存存储介质非常友好。而F2FS是一种全新的开源闪存文件系统,专为基于NAND的存储设备而设计。它专为NAND闪存存储介质而设计。F2FS于2012年12月进入Linux3.8内核,目前F2FS仅支持Linux操作系统。根据内部几何结构和闪存管理机制(FTL),闪存设备具有许多不同的属性,因此F2FS的设计者添加了多种参数,不仅用于配置磁盘布局,还用于选择分配和cleaningalgorithmtooptimizeperformance(ParallelIOimprovesperformance)F2FS的早期开发者是JaegeukKim,当时是三星员工,但是三星自己的机器并没有直接使用F2FS,而是CM开源ROM组做了相关适配。后来这个开发者被MOTO挖走了,所以才看到MOTOX系列使用F2FS。后来去了华为,于是就有了全线的F2FSEMUI5.0,号称可以提升20%的流畅度。华为P9和Mate9都采用了F2FS,流畅度有了明显提升。当然F2FS没有版权纠纷,Linux系统下的东西自然要遵守开源协议。对于F2FS,官方文档等博主大多是从原理和代码的角度来分析的。今天我就从实战的角度横向对比一下EXT4文件系统,带你看看真正的F2FS!代码作用域设备/$platform/device.mkvendor/proprietary/hardware/fstab/$platform/fstab.binkernel-4.4/arch/arm64/configs/$platform_n_defconfigexternal/f2fs-tools/*system/extras/f2fs_utils/*二、F2FSArchitectureF2FS文件系统数据结构说明:F2FS使用三种节点:inode、directnode、indirectnode。F2FS为一个inode分配了4KB的空间,包括929个数据块索引指针,两个主索引块(直接节点)指针,两个二级索引块(间接节点)指针,一个三级索引块(二级节点)指针级间接节点)指针。一级索引块包括1018个数据块指针,二级索引块包括1018个一级索引块指针,三级索引块包括1018个二级索引块指针。一个文件可以被索引的最大大小是:4KB*(929+2*1018+2*1018*1018+1018*1018*1018):=3.94TBF2FS文件系统的标准磁盘布局:数据结构F2FS文件系统(节点结构):3.F2FS和EXT4文件系统比较EXT4文件系统碎片整理:据EXT文件系统作者介绍,EXT分区空闲空间多的时候不会碎片化超过2%。F2FS文件系统:为了管理磁盘上一个大的连续空间来快速写入数据,使用SegmentCleaner从碎片严重的Segment中转移有效信息,然后清理Segment以便后续写入数据。DiskInfo可以清楚地显示占用的空间。Data分区的文件系统格式为EXT4和F2FS时,占用空间大小对比:从Android系统来看,同样的AndroidROM包在F2FS文件系统下占用闪存的容量会更多.F2FS文件系统在每个文件索引节点块中包含如下f2fs_inode和node_footer。其中,f2fs_inode结构中的数据索引区共有923个数据块指针,每个指针对应一个大小为4KB的数据块。不过一般情况下,系统文件索引并不需要用到所有的数据块。在最极端的情况下,当文件大小为4KB时,只需要使用一个数据块,其余数据块闲置,这在一定程度上造成了存储容量的浪费,即同一个手机,在同样是Android系统,其中在F2FS文件系统下,对闪存容量的占用会比较高。数据恢复数据恢复机制与数据写入磁盘的方式密切相关。对于Linux系统,它的pagecache机制通过延迟写入的方式来写入数据,内存中标记为dirty的pages不会立即回写到磁盘,以保证系统性能。因此,当系统发生意外情况时,内存页中的数据将丢失。对于一种情况,即同步操作发生在数据写入磁盘之后但元数据写入磁盘之前。系统事故,数据已经写入磁盘但由于没有索引而无法检索,F2FS提供了相应的恢复机制来检索这些文件数据。集成手机或其他Android设备集成F2FS很常见,但早期为了兼容性和性能,数据分区会使用F2FS,而系统和缓存仍然是EXT4,所以F2FS只会影响第三方一段时间的应用第一次读写文件的速度只是使用流畅度的一部分。此外,更重要的系统和更小的缓存分区仍然使用EXT4。读写速度左边EXT4文件系统,右边F2FS文件系统的连续读写:两者的连续读写性能变化不大。随机读写:F2FS的随机读性能比EXT4提升25%左右;但是F2FS的随机写入速度相比EXT4文件系统有了很大的提升,随机写入性能提升了三倍以上。由于随机写入的性能有了很大的提升,在类似软件安装和系统重启的情况下,需要写入大量小文件时,F2FS文件系统有了非常可喜的变化。4.性能测试使用工具AdroBench.apk和安兔兔测试。在不同的场景中进行测试。作者简介:许庆伟:龙蜥社区eBPF技术探索SIG组Maintainer&LinuxKernelSecurityResearcher