MIUI9的文件管理系統是什麼?
看了好幾個評測並不是F2FS,而是對現有的EXT4做了一定的修改。有人說是EXT4+sdcardfs的形式,我不清楚這是什麼情況?還有人說,F2FS不是不做,而是沒法對已使用機型升級,還有就是小米本身進度就不夠快,最早也要等下一款親兒子6C或者高端機才有可能會用。F2FS應該是三星研發,工程師去了華為,華為用上了。
米6的MIUI9用的是ext4+sdcardfs。
ps,如果我沒記錯的話,f2fs的maintainer現在去Google了。所謂的sdcardfs,就是三星基於wrapfs,進行二次開發的產物。更準確的說,是重寫了fuse.把fuse在用戶態(在Android中是sdcard這個可執行文件)。工作原理是,由掛載觸發(mount -t sdcardfs... 或者寫在init.rc中也可以)。內部會起一個線程通過inotify監控packages.list這個文件。該文件保存了所有安裝APK的包名,uid,gid,路徑名等,內部使用一個hashlist來保存。發現有新的包安裝後,會去重新reload這個文件,比對包名。讀取其中的信息,開始修改對應inode節點的屬性,並傳遞給下一層的具體文件系統。其實本質上理解了fuse,就理解了sdcardfs.相對於fuse,減少了用戶態和內核態之間交互數據的過程。在讀寫大文件時,性能提升顯著。
對於現有的多數android手機使用fuse文件系統的基本方法是,創建fuse設備,並將fuse設備掛載到與內置SD卡目錄關聯的目錄。那麼,對內置SD卡的訪問變成了先訪問fuse文件系統,再訪問ext4文件系統。fuse的內核部分創建了多個隊列,其中包含一個pending隊列和一個processing隊列。每當有調用者對內置SD卡的系統調用時,fuse把文件訪問路徑轉換為對ext4文件系統的操作路徑,設置對應的操作碼,並放入一個請求中。fuse在用戶態有3個監控線程,循環地讀取fuse設備。對fuse設備的讀取操作在內核部分轉換從pending隊列讀取請求,如果隊列中沒有請求,則對應的線程進入睡眠狀態。監控線程讀取到pending隊列中的請求後,把請求轉換為對ext4文件系統的系統調用操作。系統調用執行完成後,監控線程把執行結果寫入到fuse設備,對fuse設備的寫操作在內核部分轉換為把結果放入processing隊列。processing隊列依次取出結果,返回給調用者。
早期的Android系統沒有使用fuse文件系統。後來android為了控制不同APP對文件訪問的許可權,使用了fuse文件系統。早期手機內置SD卡使用一個獨立vfat文件系統格式的分區。使用fuse之後,將手機內置SD卡與 userdata分區合併成為一個分區。userdata分區使用ext4文件系統存儲數據,訪問userdata分區是直接操作ext4文件系統,而訪問內置SD卡,則是先訪問fuse文件系統,然後再訪問ext4文件系統。
android手機中sdcardfs的作用與fuse相同,也是用於控制文件訪問的許可權。sdcardfs的工作方式是把內置SD卡目錄掛載到用於許可權控制目錄。對內置SD卡的系統調用,先經過sdcardfs,然後把訪問路徑改為ext4文件系統的真正路徑,再到達ext4文件系統。ext4執行完以後,把結果返回給sdcardfs,再返回給調用者。對比fuse和sdcardfs,對同一個文件訪問,fuse需要經過6次用戶態與內核態的切換,但是sdcardfs只需要經過2次切換。另外fuse在內核中有多個隊列,隊列中元素的出列要等帶前面的元素先出列。因此單次文件訪問,fuse比sdcardfs需要更多的時間。但是,不管是fuse,還是sdcardfs,對文件的單次訪問,大部分情況下時間是很短的,人從感官上無法區分。而對於耗時的文件讀寫操作的時間來說,上述多出來的時間微不足道。而真正訪問時間差異在來源於量變引起質變。當需要進行大量的文件訪問時,累積產生時間差異是可以明顯感覺出來的。
著作權歸一貼吧靚麗樓主
用的sdcardfs。
為啥不用f2fs呢?一個dalao的言論是f2fs對UFS有負優化(我去又乳滑),我覺得有道理,雖然沒驗證過。
你再想想f2fs是三星搞出來的,為啥三星不用?sdcardfs。至於為什麼不上f2fs,個人認為f2fs現階段問題太多。華為突然丟失文件的案例可以查到,連三星自己都不用,小米還要當華為助攻?
sdcardfs !原生Android o 也引入了,這次miui又領先了google一步。
ext4
用的是sdcardfs
推薦閱讀:
※如何看待小米 5s 用上 MIUI 9 後超聲波指紋解鎖變得特別好用?
※MIUI9、IOS11、鎚子OS就功能實現、效率提升角度,哪款OS最優秀?
※如何評價紅米 4 和紅米 Note 3 用戶在 MIUI 論壇抗議沒有 Android 7.0 更新?