[RK3288][Android6.0] Fuse将被SDCardFS替换

这里写图片描述


External实际上是Internal

很久以前,每台Android设备都使用外插microSD卡用于存储,这是因为内部的storage容量太小了。不过外部SD卡由于速度原因,所以用户体验不是太好。

早期的sd卡是被当做外部storage,这样就有两个目录/scdard和/sdcard1,前者指内部storage,这部分其实就是内部sd或者emmc分出来的一个空间,后者指外部插入的卡。

到后来随着内部存储容量的增大,Google开发了虚拟文件系统来存储application的data以及media文件,挂载点在/sdcard,实际上是在/data/media下,sdcard分区的存在是为了兼容。也就是说,对/sdcard的内容的增加会导致整个data分区空间的减少。

我们现在所说的external storage是指实际的可插入和移除的microSD或者是内部的sd分区,即/sdcard或者/data/media,更多情况是指后者。


Android虚拟文件系统:

Android2.3之后,Google利用virtual filesystem把sdcard格式化为VFAT,VFAT利于外部设备访问设备,比如pc.但是这也带来了两个问题:
1. 当PC连接Android设备时(作为usb mass storage时),sdcard分区需要先umount, 这时候设备端就无法访问sdcard分区了。
不过此问题后来通过MTP的连接方式解决了,MTP的原理是PC请求文件列表,MTP从设备端返回PC所要的信息。PC发送删除请求时,MTP收到去删除对应的文件。
2. 每个appliction可以访问sdcard分区下的所有目录以及文件,安全性得不到保证。


Fuse:

Fuse(filesystem in userspace)就是为了解决虚拟文件系统的问题而诞生。但是Fuse在使用过程中又出现了问题。

  • I/O Overhead

正常的文件读写只要 open -> read/write -> close就可以,而且通过fuse的i/o操作却要多执行多个步骤(如下图),效率低。
这里写图片描述
以下是例子,明显fuse要慢很多。
这里写图片描述

  • Double Caching

用了Fuse之后,由于Linux有page cache机制,这样Fuse和EXT4 FS都会Cache相同的一份内容。


SDCardFS:

这种情况下,SDCardFS诞生,此机制基于WrapFS,由三星开发(已经用来一段时间),现在Google将它从Android 8.0开始引进。

  • SDCardFS的特征:

这里写图片描述


参考:

Diving into SDCardFS: How Google’s FUSE Replacement Will Reduce I/O Overhead
Why does FUSE on Android suck?
Android O will be bringing the new SDCardFS to replace FUSE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值