I think you're confusing what I mean by internal/external. I'm referring to Androids use of those terms: http://developer.android.com/guide/topics/data/data-storage.html
Your article states (correctly) that RW on /data is faster than /sdcard. This is because /sdcard is the mounted volume for primary external storage (and, thus, uses FUSE). The /data partition is where all the internal storage is mounted, which does not use FUSE.
Cheers,
--
Dave Smith, PE
@devunwired
--
You received this message because you are subscribed to the Google Groups "android-platform" group.
To unsubscribe from this group and stop receiving emails from it, send an email to android-platfo...@googlegroups.com.
To post to this group, send email to android-...@googlegroups.com.
Visit this group at http://groups.google.com/group/android-platform.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "android-platform" group.
To unsubscribe from this group and stop receiving emails from it, send an email to android-platfo...@googlegroups.com.
To post to this group, send email to android-...@googlegroups.com.
Visit this group at http://groups.google.com/group/android-platform.
For more options, visit https://groups.google.com/d/optout.
Yep, in that context you are correct.
So, to clarify: the "/sdcard" folder is physically internal flash (eMMC) mounted via FUSE. There can be also other location, like for instance "/sdcard1", that can be physically external uSD card and is also mounted via FUSE. For the application developer, the "external" storage will be those mounted via FUSE ("/sdcard" or "/sdcard1") and "internal" will be some folder inside /data partition which is EXT4 partition on eMMC flash. Is that correct? :)
Although not all data files from apks are stored via FUSE, still there are use cases when FUSE limits performance: offline maps or photos can be stored that way.
We're definitely feeling the overhead that you described, and we'd like to improve it over time. There are a couple different things coming into play with how this could evolve:Because FUSE is a nice stable API, there is essentially zero maintenance work required when moving between kernel versions. If we migrated to an in-kernel solution, we'd be signing up for maintaining a set of patches for each stable kernel version.I've heard that some OEMs have moved to an in-kernel solution, but I haven't looked at any of them. The one tricky problem we'd need to solve is communicating the package-name-to-appId mapping into the kernel. I'd *strongly* oppose using the current FUSE inotify-based approach inside the kernel, and we should instead look at the framework pushing those mappings through an ioctl() somewhere. (That also has the benefit of being able to do lightweight delta updates, instead of a full packages.list reparse.)
A potential middle-ground would be writing and upstreaming a new in-kernel FUSE feature to "off-load" the I/O for an opened file so the kernel can shortcut normal read/write() traffic to an underlying file handle. We'd still have all the directory traversal overhead, but this would at least help with single-file I/O performance.
So in summary, we'd like to improve things, and there are a few different options, but we can't promise anything.