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

  • coldpower27 - Thursday, August 22, 2013 - link

    Though bare in mind iPad mini is an old device due for a refresh in the Fall. A Retina display version, with a lower power A6X chip would do wonders. Unless you really love iOS, and the features Apple gives with their product, spec wise the Android tablet has them beat. But specs has never been all that is important when it came to these products. User experience is still key.
  • looper - Thursday, August 22, 2013 - link

    Coldpower27, I agree. Imagine the cost of a possible upcoming iPad Mini w/ Retina display.

    I wonder how much bigger one can make the default font size on the new Nexus7. My eyesight is not the best.

    Oh, BTW, the word is "bear", not "bare"; and "specs *have* never been", not "has never been"... sorry.
  • mmarafie - Friday, August 23, 2013 - link

    Yes of course :) When the new iPad mini is released that's when you'll see the Anand compare directly with the Nexus 7, and talk about how amazing the CPU/GPU in the mini are while again omitting mention of the price difference (probably double the cost of the N7) or any other strengths the N7 might have (higher ppi, more RAM, faster CPU etc).

    I'm still waiting for the review of the Nexus 10 which got released last year around the same time as iPad 4 (I own both), and the iPad 4 got the review in December while the Nexus 10 just got a preview.
  • weiran - Friday, August 23, 2013 - link

    > any other strengths the N7 might have (higher ppi, more RAM, faster CPU etc).

    If a Retina iPad mini is released, it will have a higher PPI than this N7. And we all know that comparing specs in tablets is pointless if the comparison involves different OSes.
  • mmarafie - Friday, August 23, 2013 - link

    Well define Retina please? If I'm not mistaken Apple considers 300 ppi and higher displays as Retina, yet the iPad 4 only has a 264 ppi display. The new Nexus 7 is over the 300 ppi magic number at 323. For the iPad mini to have a higher ppi than that it will need a higher resolution screen than the full HD one of the N7. It will need the same resolution as the iPad 4 (2048x1536) or higher. Its possible the new iPad mini will be released with a high res screen so we'll have to wait and see.
  • kascollet - Saturday, August 24, 2013 - link

    Retina is an Apple world, they can put it on whatever device they want but it always means :
    - pixels not visible at usual distance (more than 300 for a phone, more than 200 for a laptop, I between for a tablet...)
    - high res is obtained by quadrupling the pixel count and thus conserving screen ratio and graphical elements size (makes all apps immediately compliant).

    So if a Retina iPad Mini is made, it WILL feature a 2K x 1.5K resolution like the iPad 4.
  • retrospooty - Saturday, August 24, 2013 - link

    "Retina is an Apple world, they can put it on whatever device they want but it always means :
    - pixels not visible at usual distance "

    With a disclaimer - for 20/20 vision... Which is average eyesight, not above and not at all amongst the best. Most people with better eyesight may out around 400-450 DPI at 12 inches - some even higher.
  • Fri13 - Thursday, November 14, 2013 - link

    20/20 is for normal eye sight, and it is the for most people.
    For most people (<90%) the 300 DPI at 20cm distance is more than enough, they can not see differences between that and 150 DPI without using magnification glass (lope actually) and compare exactly same content. With PPI there is no difference either unless you start looking trough very small details like in fonts from distance of 5-10cm and it isn't good for your eyes anyways. At normal viewing distance with tablet is 35-40cm.

    When it comes to very good eye sight, last time what I read about the record (over decade ago) it was that a person could detect 6mm long string from distance of 2km, would be like display should have so high resolution that its density would be over 1.5 million on inch. But not even then a person with great eye sight could care less does display have a 150 PPI or 300 PPI.

    I had once a friend and her eye sight was very good, she could read a normal news paper font (10-11 points) from distance of 20 meters. You couldn't not believe it without being there testing it. It was just jaw dropping that you could take any page and present it to her from 20m distance and she could read it a loud (we didn't test longer distance). But it was amazing how she could read a traffic signs text from few kilometer distance. It was like having a hawk what can talk to you.

    The most important part in display pixel density is that font is rendered in manner it is clear to read. So you don't mistake letters and you don't need to spend much time quessing what letter is what.

    Like how many is whining about 72-90 PPI in their workstation/laptop displays? They can read it perfectly fine, they don't find them disturbing to have much lower pixel density in their much bigger computer screen, but then they whine about smartphones and tablets if it is below 300 PPI.
  • retrospooty - Saturday, August 24, 2013 - link

    "Well define Retina please?" - Retina is a marketing name Apple came up with for higher res screens. Apple fans, being a mostly non-technical bunch think it means something, but its arbitrary specs are just that... Arbitrary. 330+ isnt the end all be all of the DPI usefullness. The average eye cannot detect pixels at much higher DPI, but the other 1/2 of the world with above average eyesight can. IF you can see pixels, the higher hte better. If you cannot, save your $$$ and get something cheaper.
  • abazigal - Saturday, August 24, 2013 - link

    Retina is actually a combination of both PPI and distance of the screen from your eyes.

    Apple would probably explain that since users tend to hold the ipad further away from their eyes compared to a smartphone, the ipad4 can still be considered retina despite its lower PPI.

    The ipad mini will likely have the same 2048x1536 display to maintain backwards compatibility with existing ipad apps. That gives it a PPI of 324 (same as iphone), putting it on par with the Nexus7.

    My, hardware certainly has come a long way.

Log in

Don't have an account? Sign up now