YY3568开发板 | Android文件系统EXT4与EROFS的对比
Original 风火轮科技 风火轮技术团队 年月日 : 广西 听全文反馈
- 标题有误导性
多年以来,EXT4一直是android默认的文件系统,而从android13开始,安卓系统完全支持 EROFS,因此,用户也可以选择EROFS作为文件系统。
?EROFS(Enhanced Read-Only File System)?是由华为公司开发的一种高性能、低资源开销的只读文件系统,最早发布于年3月的华为P30发布会。
本文以RK3568的Android14 SDK为例,首先介绍如何将文件系统配置为EXT4或者EROFS,然后将从开机时长,文件包大小等方面对比EXT4与EROFS。
硬件环境
笔者使用的主板为风火轮科技的YY3568开发板,主控RK3568。此开发板的相关介绍可以参考
https://wiki.youyeetoo.cn/zh/YY3568
YY3568开发板的配置为2GB RAM加16GB EMMC,其中EMMC型号为KLMAG1JETD,容量16GB,标准为EMMC ,支持HS400。
本文调试时需要使用到调试串口,用于查看启动时的log,RK3568使用UART2作为其调试串口,位置如下
软件环境
笔者使用的软件环境为RK的Android14 SDK。此SDK基于AOSP build ID UQ1A..B1。内核版本为。
编译的device配置基于SDK默认的rk3568_u,仅修改文件系统相关配置。
SDK默认文件系统配置
参考AOSP的官方文档,可以通过修改
BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE
BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
等一系列构建时的环境变量,来指定文件系统类型。
在SDK的device/rockchip目录搜索一下这些环境变量,可以看到这些环境变量在common/build/rockchip/Partitions.mk 被指定。内容如下
因此可以通过在对应device的mk文件中配置
ROCKCHIP_READ_ONLY_FILE_SYSTEM_TYPE
来指定使用的文件系统。如果不指定,默认就是ext4。
此外,如果要使用erofs,需要修改内核的defconfig,否则无法挂载。确保Linux内核开启了如下配置
另外还需要修改下android的fstab文件,此文件可以通过在对应device的mk配置
PRODUCT_FSTAB_TEMPLATE
环境变量来指定
然后在这个fstab.in中,默认已有ext4的条目,要添加erofs对应的条目,如下
由于android10开始,默认将system/vendor等分区合并为super分区,此分区在recovery模式下不需要挂载,因此不用修改recovery的分区表配置。如果在构建时,使用的不是这种合并super分区的配置,则需要修改recovery的分区表。
此外,根据AOSP的官方文档,这个EROFS还可以选择压缩或者不压缩,压缩的话默认使用的是lz4hc,如果停用压缩功能,则需要在device的mk中指定
BOARD_EROFS_COMPRESSOR := none
按如上的配置方式,构建三个不同的镜像,一个使用EXT4,一个使用压缩的EROFS,一个使用不压缩的EROFS,来分别测试其性能和大小。
EXT4和EROFS对比测试
先做构建后的镜像大小对比测试。使用EXT4的super分区大小约为1.42GB,整个固件大小约为1.53GB
主要分区大小如下
使用压缩的EROFS的super分区大小约为901MB,整个固件大小约为0.99GB
主要分区大小如下
使用未压缩的EROFS的super分区大小约为1.38GB,整个固件大小约为1.50GB
主要分区大小如下
由于EROFS是只读文件系统,而android系统读取操作性能可以通过启动时间来判断。因此这里着重对比三个系统的启动速度。android启动完成后会将sys.boot_completed这个property置为1,此时会进入launcher界面。因此可以将出现如下内核日志的时间作为开机时间
使用未压缩的EROFS,测试其开机时间,连续测试三次,开机时间分别为
.063739s/ .052748s/ .336794s
使用压缩的EROFS,测试其开机时间,连续测试三次,开机时间分别为
.863491s/ .005689s/ .625804s
使用EXT4,测试其开机时间,连续测试三次,开机时间分别为
.964493s/ s/ .942621s
使用三种方式构建出来的镜像,在系统流畅度上面没有明显区别。
结语
通过上面几个测试,可以得到如下结论
1、默认压缩的EROFS跟EXT4在启动时间上差不多,对于Android系统来说,可以视为读取性能差不多
2、EROFS压缩的相比不压缩的,启动时间大概长1s左右,影响不大,如果非要纠结这1s的启动时间,可以考虑压缩的EROFS
3、不压缩的EROFS和EXT4在空间占用上面差不多,但是压缩后的EROFS相比前两者,可以减少三分之一的空间占用
可见,作为Android的只读ROM,EROFS相比EXT4确实有优势。因此,在选择文件系统上面,可以做如下结论
1、如果内核版本较老,那只能选择EXT4
2、如果内核版本高于,且对启动时间要求不高,不需要极致优化的情况下,选择默认压缩的EROFS,毕竟可以大幅度减少存储空间占用。现在的android设备通常需要OTA,这样可以减少OTA时间和流量消耗。
3、如果对启动时间要做极致优化,可以考虑未压缩的EROFS,这个解压缩过程对于高性能设备来说影响其实有限,对于低性能设备来说,会有一定意义。
写到这里,笔者还想说一点,就是这个EROFS当年是华为开发出来的,最终被AOSP应用,造福的是多个厂商的设备。而现在,华为的一些先进技术只能在鸿蒙看到,AOSP也用不了了。所以,开放合作有利于大家共同进步,搞技术封锁严重违逆时代潮流,只会损人害己。