Flash Filesystem Benchmarks

Free Electrons has performed flash filesystem benchmarks, with funding from the CE Linux Forum, and presented the results at ELC Europe 2010.

Test methodology
See our ELCE 2010 presentation for complete details and benchmark results.

Test automation scripts
Free Electrons created Python scripts that automate the execution of commands through a serial line (including bootloader and kernel booting), and measure the time taken to execute these commands. The scripts were designed to be generic, and support for new boards can easily be added by creating board specific Python definitions.

A first version of these scripts can be found on, and are released under the terms of the GPLv2 license. Working board automation files are provided for the CALAO USB-A9263-C02, Beagle and IGEPv2 boards. An ARM root filesystem containing all the filesystem utilities is also given in the same location.

Tested filesystems
At the time of these tests (Linux 2.6.36), only the jffs2, yaffs2 and ubifs filesystems were available for testing. Logfs, even though it is supported in mainline Linux, could not be tested because it segfaulted at unmount time.

Partition sizes
The same tests were performed on various MTD partition sizes: 8 MB, 32 MB, 128 MB and 252 MB. We used 252 MB instead of 256 MB because some of the boards need to keep a few MBs of NAND space for the bootloader and kernel.

These multiple partition sizes allow to see how the filesystems scale, and allow to predict the behavior with even bigger partitions.

Individual tests

 * init_time: time taken to load the filesystem driver, and initialize it. In particular for ubifs, this includes the ubi_attach operation.
 * mount_time: time taken to mount the filesystem in the partition.
 * used_space: the amount of spaced used by the filesystem, as reported by the df utility. This shows how well data are packed in the filesystem.
 * read_time: time taken to read all the files in the mounted filesystem
 * remove_time: time taken to remove all these files. This reflects the performance modifying directories.
 * write_time: time taken to write a number of compressible data files.
 * video_write_time: time taken to write a number of copies of files that cannot be compressed any further. This mimics what happens in a digital camera, for example.

Linux 2.6.36 results
These results were obtained on a CALAO Systems USB-A9263-C02 board.

See our ELCE 2010 presentation for complete details and graphical representations of results.

Test: init_time (s) size	 ubifs  jffs2   yaffs2 8	 0.34	 0.12	 0.07 32	 0.78	 0.39	 0.25 128	 1	 0.41	 0.26 252	 1.17	 0.42	 0.26

Test: init_mem (KB) size	 ubifs  jffs2   yaffs2 8	 888	 444	 96 32	 916	 464	 96 128	 956	 576	 88 252	 988	 436	 80

Test: mount_time (s) size	 ubifs  jffs2   yaffs2 8	 0.14	 0.11	 0.03 32	 0.36	 0.48	 0.34 128	 0.43	 1.38	 0.51 252	 0.33	 2.08	 0.96

Test: mount_mem (KB) size	 ubifs  jffs2   yaffs2 8	 544	 184	 8 32	 532	 316	 20 128	 548	 712	 664 252	 540	 1540	 2336

Test: init_time + mount_time (s) size	 ubifs  jffs2   yaffs2 8	 0.48	 0.23	 0.1 32	 1.14	 0.87	 0.59 128	 1.43	 1.79	 0.77 252	 1.5	 2.5	 1.22

Test: init_mem + mount_mem (MB) size	 ubifs  jffs2   yaffs2 8	 1432	 628	 104 32	 1448	 780	 116 128	 1504	 1288	 752 252	 1528	 1976	 2416

Test: used_space (KB) size	 ubifs  jffs2   yaffs2 8	 4520	 4196	 8000 32	 16164  13940   30204 128	 64748   54028   117428 252	 127192  109880  233676

Test: read_time (s) size	 ubifs  jffs2   yaffs2 8	 4.46	 1.48	 1.18 32	 1.84	 5.46	 1.8 128	 4.86	 19.53  4.81 252	 11.59   43.97   11.51

Test: remove_time (s) size	 ubifs  jffs2   yaffs2 8	 7.4	 5.76	 9.52 32	 6.93	 5.11	 7.77 128	 10.16  8.97	 16.42 252	 17.26   9.82	 37.56

Test: write_time (s) size	 ubifs  jffs2   yaffs2 8	 4.83	 15.97  4.31 32	 16.47   60.83   11.14 128	 61.41   236.96  37.09 252	 118.38  459.58  70.56

Test: video_write_time (s) size	 ubifs  jffs2   yaffs2 8	 -	 16.06  3.69 32	 19.03   60.92   8.45 128	 72.76   238.99  28.85 252	 140.16  461.35  55.16