临近年末,手机界无论大小厂商纷纷炸出自己王牌机型,在这个收官大战中,华为无疑是一家战果累累的公司,前面三星Note7不幸夭折,苹果公司今年新品创新不足,后面又无与之分庭抗礼的通讯大咖,一时间华为今年的年度新品Mate9成了消费者严重的年度超新星,赚尽了无数用户的眼球,尤其是华为移动部门老大余承东在新品发布会上宣称Mate9手机至少保持使用18个月不卡,简直就像突然丢出一张王炸,让所有关注移动市场的用户大吃两三惊。
华为Mate9手机所谓的18个月使用不卡肯定是集结了很多不同的先进技术,但是值得一提的是,其中使用了一项关于f2fs技术,并非华为Mate9首发,早在几年前就已经有手机用上这一技术,而且对于一些爱钻研的手机发烧友们,也早早尝鲜了这中技术,那这到底是怎样的一项技术呢?接下来本文将做一个简单的介绍,帮助读者更好的了解关于f2fs的知识。
F2FS文件系统是什么?
简单来说,f2fs是一种较先进的文件系统,与手机上的ext4文件系统、电脑上的ntfs文件系统一样,f2fs是Flash Friendly File System的简称。该文件系统是由韩国三星电子公司研发,只提供给运行Linux内核的系统使用,所以安卓手机上肯定也是能够使用的。
从f2fs中的Flash Friendly可以看出,这种文件系统对于闪存类存储介质是非常友好的,特别是NAND这种较新的介质,f2fs提供了更加适应新介质的文件系统方案,同时还修复了以往旧日志结构文件系统的一些问题,使其在新存储介质下具备了更有利的使用条件,特别是在小文件数据传输方面。
f2fs文件系统读写流程图(图片来源网络)
如之前所述,f2fs文件系统修复了旧日志的一些结构问题,从代码结构上进行了二次优化,使其在能够在底层更加快速的索引到目标数据,简单来说就是小文件数据传输变快了,这是f2fs文件系统的优势,但是在代码结构上f2fs文件系统同样存在一些问题,譬如空间浪费的问题和作为较新的文件系统兼容性问题,这一点会在接下来的测试数据进行说明。
目前移动市场中,手机存储的文件系统大多采用ext4格式,虽然早在2013年Moto手机就率先推出了采用f2fs文件系统的Moto X手机,由于种种原因,这款手机中采用的较为先进的f2fs文件系统并没有在市场上掀起太大的波澜,反而被埋没在茫茫机海之中。
对于Moto X手机中采用的f2fs文件系统,国外网站AnandTech当时就有相对应的评测,虽然结果差强人意,但该评测中并没有很直观的对比出同样手机在ext4文件系统下和f2fs文件系统下的区别,所以笔者接下来将会以单部手机为例,在两种不同的文件系统下,分别对手机的存储性能做出实际的测试结果对比,观察在两种不同的文件系统下,哪些存储性能发生了变化。
F2FS文件系统下实际手机测试
笔者首先是以一直被公认为是刷机小丸子的一加1手机测试,测试内容是让同一部手机在ext4和f2fs两种不同的文件系统下,进行androbench软件的数据测试,两种环境下手机均是空盘情况下刷入CM14.1(安卓7.1)系统,闪存内没有多余的文件。测试对比如下:
一加1:左ext4、右f2fs
根据闪存读写性能测试软件的数据可以看出,在ext4和f2fs两种文件系统下,手机闪存的连续读写性能并没有太大的变化,但是经过比对可以看到,两种不同的文件系统在同一部手机下的随机读写性能,也就是4K文件的随机读写发生了令人惊奇的变化,特别是在随机写入性能中,f2fs文件系统的提升可以说是飞跃式的巨变,从数据中也可以很直观的反映出闪存的随机写入性能提升了不止一倍之多;而在随机读取性能方面,f2fs文件系统相比EXT4文件系统也有相当的优势,从测量得出的数据可以知道,较为优越的f2fs文件系统的随机读取性能提升了25%左右。
为了测试f2fs文件系统相比ext4文件系统在闪存随机读写性能上的巨大提升的普遍性,笔者在对比中又加入了过气旗舰三星Galaxy S5手机和当下炙手可热手机一加3的测试,令人惊奇的是,在两款附加手机的测试中,经过几轮测试得出的数据均表明,两种文件系统的随机读取性能并没有与之前一加1手机测试中类似的提升,甚至略有下降(不会相差太远),但是在随机写入性能的测试中,f2fs文件系统下三星S5和一加3手机确实有着非常凶猛的优势,特别是在一加3手机中,随机写入速度的提升可以说是超乎想象。这也就很明显的说明了相较于传统的ext4文件系统,f2fs文件系统在小文件随机写入性能中有非常大的优势,而且这种优势具有普遍性,但是随机读取性能的变化基本不大。
三星S5:左ext4、右f2fs
一加3:左ext4、右f2fs
测试中发现F2FS文件系统的一些不足
在测试的过程中,对比ext4文件系统和f2fs文件系统,笔者还有个意外发现,那就是经过几次转换文件系统之后,相同的安卓ROM包,在f2fs文件系统下占用闪存的容量会多一些。带着f2fs文件系统下为什么会占用空间容量较高的疑问,笔者查阅了相关的资料。
根据f2fs文件系统相关函数的定义,在每一个文件索引节点块中包含了f2fs_inode和node_footer两部分,其中f2fs_inode结构中的数据索引区又存在923个数据块指针,每个指针对应一个大小为4KB的数据块,但是在通常情况下系统文件索引并不需要用到所有数据块,在最极端情况下文件大小为4KB时,只需要用到一个数据块,剩下的数据块则处于闲置状态,这就造成了存储容量在一定程度上的空间浪费,也就是笔者所遇到的同样一部手机,在相同的安卓系统中,f2fs文件系统下,闪存容量的占用会相对高一些。
在f2fs文件系统下会造成空间浪费的问题不仅会影响用户数据存储空间,而且缓存cache区也会受到一定影响,一般来说安卓手机的缓存池设置的可用空间都是比较小的,在空间浪费的情况下会在一定程度上造成缓存裕量不够,进而使得软件在使用的过程中无故崩溃,而且f2fs作为一种新型的文件系统,也会有部分软件在使用中出现不兼容现象等等,不过根据笔者体验至今的感受,只有少数软件会出现崩溃情况。
可以看到在空盘刷入仅为700M不到的系统下,在data分区下f2fs的数据占用更多
F2FS文件系统测试总结
最后简单讲讲从ext4文件系统转到f2fs文件系统的使用体验,在笔者拖稿两周时间里,f2fs文件系统下手机确实是快了很多,尤其安装软件以及重启设备的时候,由于随机写入的性能大大提升了,在类似软件安装和系统重启中,需要大量写入小文件的情况下,f2fs文件系统下有非常喜人的变化,而在日常使用中也可以明显感受到整体的数据交换快速了许多。
前面说的是性能提升的一方面,但是f2fs文件系统依旧有些不足,譬如磁盘空间浪费问题、新文件系统下可能出现兼容性问题等等,在笔者测试的过程中,也出现了一些软件安装错误的问题(如哔哩哔哩客户端),考虑到手机的测试环境是最新的CM14.1系统,怀疑是软件调用的API过于老旧的问题,但也不排除是f2fs文件系统的兼容性问题。
在笔者看来,f2fs文件系统总归是利大于弊的,特别是在小文件的读写方面有巨大优势,这对手机本身读写性能有举足轻重的帮助,特别是现在国内大厂华为公司乘着Mate9的新机潮宣传了使用18个月手机使用不卡的优势,相信f2fs文件系统很快会扩散开来,这也会是以后手机存储文件系统的大趋势。
目前笔者发现,在一加手机最新的氢OS2.5底包中,已经有相关的格式化选项可以把手机文件系统转换成f2fs,现在的f2fs文件系统虽然或多或少有点小问题,但是已经可以正常使用,而且部分内部工程师也透露已经加紧对f2fs文件系统的刷机包进行开发和手机的适配,以后的f2fs文件系统将不再新鲜。
如何才能体验F2FS文件系统
目前在CM提供支持的手机中,只要是CM13以上的系统均支持f2fs文件系统,而在OEM厂商定制的系统中,大部分的基于安卓7.0系统的手机也支持f2fs文件系统,对于一些旧设备想要体验f2fs文件系统的话,大致可以通过两种方式,一种是通过最新的TWRP recovery将手机转换为f2fs文件系统,另一种方法则是通过ADB Shell的方式将手机的文件系统转换为f2fs文件系统。因为通过ADB shell的方式操作较为繁琐,这里简单介绍下通过TWRP recovery的方式对手机进行转换。
首先确认你的手机有对应的3.0版本以上TWRP recovery刷机包并刷入设备,重启进入TWRP recovery,点击“清除”,再进入“高级清除菜单”,选择需要转换的分区进行文件系统转换,此处转换“Cache”和“data”分区,系文件系统转换之后会清除所有文件,所以操作之前请注意备份。
成功转换文件系统之后,重新回到TWRY recovery界面,点击“挂载”,从电脑端将支持f2fs文件系统的ROM包传到手机进行卡刷,之后的步骤基本和普通的卡刷系统基本一致。