eMMC and FSTRIM

The new Nexus 7 obviously ships with the latest version of Android (4.3), which happens to add a major feature for keeping storage performance high: fstrim. Modern smartphones and tablets fundamentally use a very similar storage architecture to what we see in modern SSDs (solid state drives) in PCs. Instead of a drive featuring a discrete controller, DRAM and NAND flash, these ultra mobile devices typically feature one or two NAND devices with an integrated controller - typically eMMC. To keep costs (and power consumption) low there's also no DRAM cache, which definitely harms performance.

Since the underlying architectures are quite similar, the pitfalls are the same as well. The biggest issue? Performance when operating in a full or near-full state. With tons of files on your internal storage, the data structures that have to track all of those files and where they're located in NAND space get pretty complex, and traversing those structures takes a considerable amount of time. The part that many seem to forget is that once you delete a file in Android, it's not immediately removed from internal storage. The space is freed up in the OS, but the eMMC controller still tracks all of the data as valid bits. It's only when that data is overwritten that the controller knows the previous data didn't matter.

In other words, it's possible to have tons of free space on your internal storage, but have the drive appear full to the eMMC controller (and thus enjoy all of the terrible performance that goes along with it). To make matters worse, you never even have to fill your drive to get it into this state. In order to maintain even wear across all NAND cells (to extend the lifespan of the NAND flash), the eMMC controller will write to new/empty blocks in NAND as much as possible. Let's say you have 10GB of storage and Android writes 1GB of data to new addresses every month and deletes the previous 1GB each time. As long as the addresses being written to never overlap, your drive will be full in 10 months (from the eMMC controller's perspective) but Android will still report 9GB of free space.

fstrim establishes communication between the OS and the eMMC controller to address this problem - and it's enabled in Android 4.3.

Unlike TRIM on standard SSDs, FS_TRIM works more like the manual/scheduled TRIM tools from the early days of consumer SSDs. From Brian's original Android 4.3/TRIM article:

The Android framework will send out a “start idle maintenance window” event that the MountService listens for, and then invokes vold to fstrim filesystems when a few conditions have been met – the device hasn’t been touched for over an hour, no idle maintenance window event has been sent in 24 hours, and the device is either off-charger with 80% battery or on-charger with 30% battery. The goal is to have fstrim run roughly once every 24 hours if you’re in the habit of plugging the device in to charge every night.

Personally I feel like the rules are a bit excessive and I'd love to see us get to active TRIM on these devices, but I guess it's a bit too early for that. Basically if your device has enough charge and you're not using it, Android 4.3 will issue an fstrim command to the eMMC controller. The command passes along a list of all unallocated addresses in the filesystem, which the eMMC controller can then use to purge its logical to physical mapping table/list/datastructure. The process should complete relatively quickly as no new data has to be written, the controller just needs to do some cleanup of internal structures and add a bunch of addresses to the unused block pool. Keep in mind that this simply addresses the issue of your storage getting slower over time. fstrim does nothing to keep performance high if you actually fill your storage to capacity. Given how bad these eMMC solutions are, my recommendation is to try and keep at least 20% of your internal storage unused/as free space.

To showcase just how bad things can get I actually dusted off last year's Nexus 7 and treated it like an SSD. I first filled the device with sequential data, leaving only 300MB free. I then performed back to back random writes across the remaining free space and the performance reduction:

Nexus 7 (2012) Storage Performance
  Sequential Read Sequential Write Random Read Random Write
New After Factory Reset 25.18 MB/s 10.63 MB/s 7.08 MB/s 0.45 MB/s
1st Run After Fill 22.25 MB/s 1.21 MB/s 7.62 MB/s 0.14 MB/s
2nd Run After Fill 26.00 MB/s 1.97 MB/s 7.8 MB/s 0.11 MB/s
3rd Run After Fill 24.57 MB/s 3.18 MB/s 7.96 MB/s 0.16 MB/s
After ~24 hours Idle Time 27.03 MB/s 11.21 MB/s 7.65 MB/s 0.46 MB/s

The columns to pay the most attention to are the write columns (read performance shouldn't change over time). Note that sequential write speed drops by almost an order of magnitude. This incredible drop in performance manifests itself as pauses or stutters. Even when you're just performing simple tasks on your tablet, there are usually tons of background operations going on (e.g. updating system logs). If you look at random write performance here, we see performance drop down to 0.11MB/s - or roughly 27 IO operations per second. If you have more than that amount of IO coming in at the same time, what you'll get are long pauses while the eMMC controller works through its IO queue. Although I didn't include it in the table above, I spent a full day torturing the eMMC on this Nexus 7 and managed to get random write performance as low as 0.02MB/s or 5 IOPS. Sequential write performance in that case was 0.81MB/s, equally disheartening. My point here is that worst case storage performance can get very bad, but looking at the last line of the table you see the incredible impact fstrim has on restoring performance.

I/fstrim ( 118): Starting fstrim work...
I/fstrim ( 118): Invoking FITRIM ioctl on /cache
I/fstrim ( 118): Trimmed 445079552 bytes on /cache
I/fstrim ( 118): Invoking FITRIM ioctl on /data
I/fstrim ( 118): Trimmed 13637656576 bytes on /data
I/fstrim ( 118): Finished fstrim work.

Anyone who had issues with their Nexus 7 slowing down over time will want to upgrade to Android 4.3. Those users considering upgrading to the new Nexus 7 should be fine thanks to fstrim. The only situation where you should see tremendous decrease in storage performance, resulting in IO latency enduced pausing/stuttering is if you physically fill the internal storage close to capacity. Again - my recommendation here is to try and leave at least 20% of your internal storage free. Note that this recommendation applies across Android and iOS.

With all of that out of the way, how does the eMMC solution in the new Nexus 7 stack up? Sequential read performance continues to be quite good for such a small/lower power device. Sequential write speed isn't terrible either. Even random read performance looks solid. It's random write performance that just needs work across the industry. We realistically need to probably be at 10x where we are today in random write performance, perhaps a bit lower if the storage makers can focus on IO consistency/minimum sustained IOPS.

Storage solutions in these tablets are often sourced from multiple vendors, and we can see dramatic differences in performance between them. Brian's review sample was a 32GB model, while the tablet I reviewed had 16GB. The two solutions performed pretty similarly, although my 16GB model did have appreciably better random write performance. Ultimately if you need the space, the 32GB model will be the better performer (you're better off using 45% of a 32GB model than 90% of a 16GB model).

Storage Performance - 256KB Sequential Reads

Storage Performance - 256KB Sequential Writes

Storage Performance - 4KB Random Reads

Storage Performance - 4KB Random Writes

 

CPU & GPU Performance WiFi, GPS & Camera
Comments Locked

202 Comments

View All Comments

  • darwinosx - Thursday, August 22, 2013 - link

    I'll review it. It's a piece of junk with poor quality build, a washed out screen, and a really slow gpu. The iPad 4 blows the doors off it. Hows that?
  • smartypnt4 - Thursday, August 22, 2013 - link

    You're an incredibly negative individual, do you know that? Everyone knows the iPad 4 is better than the N10. That's never really been a debate. The N10 also costs $100 less, so there's that.

    I agree with your essential assessment, though. In essence, it had build quality issues, and a dreadful screen in comparison to the N7 and the iPad 3/4. Colors were washed out, it was incredibly dim, lacked contrast, etc. The really slow GPU thing I can't really attest to, although benchmarks indicate it's not *horribly* slow, especially for something that came out last year. Yes, it's slower than the iPad 4. Basically, anything released within ~6 months of an iPad historically can't match the GPU power. Comparing it to the Android space, it was relatively quick last year. Not so much now, though.

    I do agree with you, though. Proof: when my N10 was stolen, I replaced it with an iPad 4.
  • Midwayman - Friday, August 23, 2013 - link

    Anything from 2012 with a full HD screen or higher running Android was underspec'd anyways. They hadn't upped the hardware to deal with the demands of the higher res screens yet. 2013 is looking to be a different matter.
  • smartypnt4 - Sunday, August 25, 2013 - link

    After owning and using the N10 at launch last year, I can say that I never felt that the GPU held it back in the OS. The transitions were all very smooth throughout the OS. Some apps behaved weirdly, but that was because they rendered to a fixed size, which looks comical on a tablet with a pixel density that high. There were plenty of other things that were off about the N10, though. Supposedly ASUS got the nod for this year's Nexus 10, so I'm looking forward to their take on it.
  • jl0329 - Wednesday, October 9, 2013 - link

    Go home, time to change your diaper you little brat.
  • Krysto - Thursday, August 22, 2013 - link

    I agree they should move to 8" next year, or at least 7.7", and no more than a width of five inches, because then it becomes too wide (the iPad Mini is too wide for one-hand use).

    But yeah I'd prefer it was a bit bigger to justify getting one when you already have a big smartphone.
  • sherlockwing - Thursday, August 22, 2013 - link

    Don't know about you, but I bought a N7 2013 when I already have a GS4(5") and the Media viewing expewrience on the Nexus 7 is substantially better. The N7's display(22.02 in^2) is twice as large as GS4's(10.68 in^2), and 85% more space when viewing 16:9 content( 19.8 vs 10.68). I find it perfectly justifiable to buy even if I have a GS4.

    Now if your defination for "big smartphone" is a Note then I see your point. It won't take too much effort to get a 7.5" screen on N7 if the bezel is reduced to Ipad Mini level. The screen/front area ratio of N7 is only 62%, Ipad mini's is 71.8%.
  • CSMR - Thursday, August 22, 2013 - link

    "802.11ac is probably the only thing missing from this otherwise awesome platform"

    802.11ac will take years to start being used, and decades before it makes earlier wifi standards obsolete. In the life of a current device, there will be no occasions when 802.11ac will be available and providing internet but other wifi standards are not.

    Lack of cellular connectivity on the other hand results in lack of internet access in most locations, and is a major omission.
  • solipsism - Thursday, August 22, 2013 - link

    If you're defining it as not being used anywhere by anyone in favour of a new standard, then I guess I agree it will take decades. But by that notion there are people still using floppy disks.

    If you wish to be less draconian with your definition then your decades claim doesn't hold water. Including 802.11b in a device that supports 802.11g/n as a back up that is inexpensive for the component vendor to include doesn't mean it's being utilized extensively.

    Also note is was only a decade between the 802.11b and n standards and 802.11n took off faster (for various reasons) than 802.11b so I can't see how it will be at least 2x longer before it gains a foothold, especially considering the focus society has for WiFi and excellent job the committee did in ratifying ac compared to n.

    Finally, "there will be no occasions when 802.11ac will be available" and "802.11ac will take years to start being used" are just outright wrong. I use 802.11ac every single day. It's available! You can buy routers and devices that use this standard and they aren't priced at levels that make it unreasonable to obtain.
  • CSMR - Friday, August 23, 2013 - link

    I was not saying it will take decades for people to start using 802.11ac. What will take decades is for them to switch off 802.11g and 802.11n. You may use 802.11ac now and good for you, but you can still get an internet connection with 802.11g/n. The main advertised advantage of 802.11ac is speed, but it will at least 10 years until typical internet connections saturate an 802.11g link let alone 802.11n.

    I am not against putting 802.11ac in devices as soon as it becomes a standard integrated part of modern chipsets, but the point is always-on internet is important, and if you do not have cellular connectivity then you will lack internet whenever you are outside your wifi network.

Log in

Don't have an account? Sign up now