誰人沒試過猶豫,達到理想不太易 —–Beyond
本文介紹如何將Android系統的/data分區改變成F2FS格式。修改的原因是F2FS分區格式擁有更加的I/O性能。
修改文件系統格式成F2FS方法
在改動之前我們先看看當前Android系統的主要分區格式,可以用如下方式查看
$ adb shell df -t ext4
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/block/bootdevice/by-name/system 1007736 907964 83388 92% /system
/dev/block/bootdevice/by-name/userdata 12168972 6740960 5411628 56% /data
/dev/block/bootdevice/by-name/cache 259856 332 254160 1% /cache
/dev/block/bootdevice/by-name/persist 28144 200 27292 1% /persist
大多數情況下可以看到我們系統當前的主要分區格式都是EXT4。
現在來將/data分區格式更改成F2FS格式,因爲應用的好多私有數據都存放在該分區知悉,比如database,SharedPreferences.更改成F2FS格式能有效提升應用的I/O訪問速度,提升性能。
修改的地方有三點:
1.打開kernel config中對F2FS的支持
項目的kernel config 文件中加入
CONFIG_F2FS_FS=y
CONFIG_F2FS_STAT_FS=y
CONFIG_F2FS_FS_XATTR=y
CONFIG_F2FS_FS_POSIX_ACL=y
CONFIG_F2FS_FS_SECURITY=y
CONFIG_F2FS_CHECK_FS=y
2.配置/data分區文件格式爲F2FS.
在文件BoardConfig.mk中做如下修改
TARGET_USERIMAGES_USE_F2FS := true
BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE := f2fs
3.更改分區文件fstab,使得mount /data分區時的文件類型爲F2FS。
fstab可能有多個類似文件,需要根據具體項目定位。修改形式大致如下:
- /data ext4 noatime,nosuid,nodev,discard
+ /data f2fs noatime,nosuid,nodev,discard
第3點的修改可以參考:
https://github.com/anpage/android_device_asus_grouper/commit/9d6899d95af972ae7613d02dc30eb36bb74062b8
以上修改完畢,查看當前的/data分區已經變成了F2FS格式。
F2FS vs EXT4
修改了之後爲了驗證I/O性能確實提升了,可以藉助Androbench APK測試。結果如下圖。
從跑分結果看f2fs格式的結果要好於ext4,但似乎優勢不明顯。我們在用dd命令測試:
最後放上一個官方的分區格式不同的性能對比圖。
拓展知識點
- 什麼是文件系統:
文件系統是用來控制如何存取數據的一套規則。如果沒有這套規則,那麼所有數據都會放在一個大的存儲區域上,我們很難找到需要的數據位於該區域的哪一個地方。於是就制定了一套規則,它將整個大的存儲區域分割成若干個獨立的子區域,每個子區域對應一個名稱,如何分割子區域,以及從子區域中讀寫目標數據的整套規則就是文件系統。
F2FS文件系統優缺點
F2FS (Flash-Friendly File System)文件系統格式是由三星公司開發的,它專爲移動設備而生。
優點:
- 卓越的讀寫速度
- 降低了寫的的次數,因此延長了磁盤的壽命。
缺點:
- 佔用的空間更大
- 沒有ext4穩定
- 沒有ext4通用,某些手機可能不支持
EXT4文件系統優缺點
EXT4是Linux的標準文件系統,它基於EXT3而來,EXT3又基於EXT2而來,但從EXT3到EXT4做的改動巨大。
優點:
- 良好的穩定性,使用廣泛
- 所有的智能手機都支持。
缺點:
- 相對與F2FS I/O速度較慢。