Flash Filesystem Benchmarks

From eLinux.org
Revision as of 21:11, 4 January 2011 by Michael Opdenacker (Talk | contribs)

Jump to: navigation, search

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

Test methodology

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.

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