Flash Storage Performance on a Mobile Device
I have been following writings on flash storage performance from storagemojo blog. Now, that I had a little time to sit down and a Nokia N800 at hand it was time to do a small experiment. I ran some benchmarks with a Java program that creates random data (in chunks of kilobyte) and writes the data to a file. For comparison I ran the same program with the cheapest Intel based MacBook available using Java 1.4. I used the same source level and the same Java binary that I used on N800 running Java CDC.
So, the comparison does not measure only storage performance, but also Java. Anyways, storage performance counts often only when some application is using the storage, and this application might as well be written on Java. In the tests, each size of file was created consecutively 10 times and average was calculated. For file size of 0 kB I measured only time to create an empty file. So here we go with the results:
Update: After seeing a post referring to my benchmark, I felt urgent need to look into an independent benchmark and see whether I had been writing nonsense or not. Using my home desktop and connecting via a WLAN router I copied several files of different sizes (100kB to 1MB as in the above benchmark) by using secure copy over ssh. Now, the average bandwidth of 10 transfers was 278 KB/s. From this, we can calculate copy time of 1.84 s for 512KB file and 3.68 s for a file of 1 MB. These figures have very similar order of magnitude than my earlier measurements with mobile Java.
Today, the tests only included local file creation but there is more to come. I am interested on looking into combined wireless download and write performance (and to compare this somehow with iPod Touch) as well as read performance the applications experience from the local storage.

October 30th, 2007 at 4:06 pm
Good stuff. Let me know when you get more results.
October 30th, 2007 at 5:32 pm
Do you know that the Mac test performed any disk access at all, rather than simply accumulated the results in RAM for later write-back to disk? Or, even if the disk was accessed, do you know that it didn’t just accumulate the data in its on-disk cache for later write-back to its platters?
It’s still discouraging if indeed you only realized about 250 KB/second writing data to flash, but even the relatively slow benchmark results I’ve seen suggest that even relatively slow flash can write at well over 1 MB/second. So I wonder whether the performance that you’ve measured may be specific to the Nokia device rather than to the flash it uses.
- bill
November 4th, 2007 at 5:07 pm
Robin, thanks for referencing (and also thanks for some of those who commented on your blog)! Following these comments, I have continued to do a little more benchmarking and wish to post next results soon.
And Bill, also thanks for your comments. I have been doing a little bit more testing with more standard *nix tools, using tools like”/usr/bin/time” and “dd”, these should also help to remove some of the unknowns that you have listed above.
I think the above measurements are very device specific, but they give an example how limitations of a mobile device affect the storage performance. My first experiences on n800 are that the write performance is really limited, but the read performance is very rapid. Then it all becomes to the used application, which of the figures counts more.
December 19th, 2007 at 8:12 pm
I’m just curious how you got the CDC running on your N800. I’ve unziped the pre-built binaries on my N810 but cannot even get “./bin/cvm -version” to execute.