android sdcard存储方案三(基于fuse文件系统):

来源:互联网 发布:入门单板吉他推荐 知乎 编辑:程序博客网 时间:2024/06/06 00:33

前面我的两篇文章重点描述了Android基于fuse的sdcard存储方案,请参考:

《android sdcard存储方案(基于fuse文件系统):之一》  和

《 android sdcard存储方案(基于fuse文件系统):之二》

这两篇文章主要是为了说明清楚基于fuse的sdcard存储原理,及特点。

同时,前面我的文章也介绍了一些关于wrapfs文件系统的知识,只是没有说明它的用处。 请参考:

《Wrapfs : a stackable file system(一种堆栈式文件系统)》


这篇作为终结篇,咱们主要讨论基于fuse的sdcard存储方案缺点,及基于wrapfs的android sdcard存储方案改进。

一、基于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目录和sdcard目录的存储性能无限接近呢? 

请看测试结果:

        

                                      data目录基于ext4性能 


        

                               sdcard目录基于wrapfs+ext4性能

由以上测试数据,可以看出基于wrapfs sdcard存储性能已经无限接近ext4啦!


总结: 

    基于 fuse  android默认sdcard存储方案,移植性强,但性能差。特别是针对性能好的emmc,性能drop更明显。

    基于wrapfs android优化sdcard存储方案,性能更强,越好的emmc,表现越好。但因为属于内核一部分,移植性差。 

参考:

•《AStackable File System Interface For Linux》
•http://www.fsl.cs.sunysb.edu/
0 0