轉:http://www.2cto.com/kf/201412/363638.html
一、基於fuse的sdcard存儲方案缺點
android 默認的方案,是基於用戶空間文件系統,最最大的優點是移植性好。
http://en.wikipedia.org/wiki/Filesystem_in_Userspace
通過分析android 默認的fuse方案操作流程,如上圖。 我們可以看到其最最大的缺點是:
fuse文件系統和sdcard dameon必需頻繁的進行命令交互、數據交換,
引入內核態和用戶態切換系統開銷。
根據前面文章的分析,android用戶數據空間data目錄和用戶sdcard目錄,物理上在emmc中是同一個分區。
而文件系統也採用同一個文件系統:ext4 。 如下圖:
既然硬件上是emmc的同一個分區/軟件上直接文件系統都是ext4 !那麼問題來啦!
我們是否有理由希望data目錄和sdcard目錄的存儲性能接近呢?
這個問題是值得期待的!
但結果是我們期待的嗎?請看測試結果:
data目錄基於ext4性能
sdcard目錄基於fuse+ext4性能
由以上測試數據,可以看出fuse性能表現是令人失望的!直接導致存儲性能非常大的損耗!
二、基於wrapfs的sdcard存儲方案優點
前面的所有一切、一切都是爲了這一節。
既然前面說了fuse給存儲系統帶來了這麼大損耗,那如何改進呢? 繼續……
基於wrapfs的android sdcard存儲優化方案原理如下圖:
由圖上,可以看出,wrapfs將上層的請求直接傳遞給了底層ext4文件系統,看起來比fuse簡單多了。
那麼同樣的問題來啦!
請看測試結果:
data目錄基於ext4性能
sdcard目錄基於wrapfs+ext4性能
由以上測試數據,可以看出基於wrapfs sdcard存儲性能已經無限接近ext4啦!
總結:
android基於fuse sdcard存儲方案,移植性強,但性能差。特別是針對性能好的emmc,性能drop更明顯。
基於wrapfs sdcard存儲方案,性能更強,越好的emmc,表現真好。但需要投入更多人力開發、維護。