Embedded Conference Europe 2010

Flash filesystem benchmarks

Michael Opdenacker Bootlin

© Copyright 2010, Bootlin. 1 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com Bootlin Bootlin

Free embedded Linux and kernel materials https://bootlin.com/docs

Linux BSPs, device drivers and plumbing

Buildroot http://buildroot.org

Questions

Who uses? yaffs2 nftl?

3 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com Introduction

Work started in 2008 at ELC-E Showed benchmarks on jffs2, yaffs2 and ubifs What has happened during the last 2 years Project continued with funding from the CE Linux Forum Automation scripts now supporting multiple boards New armel root filesystem for the tests (replaces Buildroot). Easier access to MTD and filesystem utilities. Udev simplifies the use of UBIFS. Now measuring driver initialization time through loading external modules (instead of static drivers - boot time was not measured). LogFS mainlined in 2.6.34

4 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com jffs2

http://www.linux-mtd.infradead.org/doc/jffs2.html Standard file Today's standard filesystem for MTD flash API Nice features: on the fly compression (saves storage space and reduces I/O), power down reliable, wear- JFFS2 leveling and ECC. filesystem Drawbacks: doesn't scale well Mount time depending on filesystem size: the kernel must scan the whole filesystem at mount MTD driver time, to read which block belongs to each file. Need to use the CONFIG_JFFS2_SUMMARY kernel option to store such information in flash. This dramatically reduces mount time (from 16 s to 0.8s for a 128 MB partition). Flash chip

5 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com yaffs2

http://www.yaffs.net/ Standard file API Mainly supports NAND flash No compression YAFFS2 , ECC, power failure resistant filesystem Fast boot time

Code available in a separate git tree MTD driver Should be included in the mainline kernel soon.

Flash chip

6 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com UBI (1)

Unsorted Block Images http://www.linux-mtd.infradead.org/doc/ubi.html Volume management system on top of MTD devices. Allows to create multiple logical volumes and spread writes across all physical blocks. Takes care of managing the erase blocks and wear leveling. Makes filesystem easier to implement.

7 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com UBI (2)

Volume1 Volume2 UBI Logical LEB LEB LEB LEB LEB LEB LEB Erase Blocks

MTD Physical PEB PEB PEB PEB PEB PEB PEB PEB PEB Erase Blocks Free block Free block

8 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com UBIFS

http://www.linux-mtd.infradead.org/doc/ubifs.html Standard file The next generation of the jffs2 filesystem, API from the same linux-mtd developers. UBIFS Available in Linux 2.6.27 Works on top of UBI volumes UBI

Has a noticeable metadata overhead on very MTD driver small partitions (4M, 8M)

Flash chip

9 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com LogFS

http://en.wikipedia.org/wiki/LogFS New comer in mainline (integrated in 2.6.34) Still experimental (at least in 2.6.36) Designed to be very fast at mount time (even faster than UBIFS): O(1) mount time Supposed to consume less RAM than JFFS2 Ability to run on block devices but with poor performance

10 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com Logfs in action

kernel BUG at fs/logfs/segment.c:858! Unable to handle kernel NULL pointer dereference at virtual address 00000000 pgd = ced00000 [00000000] *pgd=8edbd031, *pte=00000000, *ppte=00000000 Internal error: Oops: 817 [#1] last file: /sys/devices/virtual/vc/vcsa6/uevent Modules linked in: logfs zlib_deflate CPU: 0 Tainted: G W (2.6.36 #2) PC is at __bug+0x1c/0x28 LR is at __bug+0x18/0x28 pc : [] lr : [] psr: 20000013 sp : cfb7fe38 ip : 00000928 fp : 00000080 r10: c0580b20 r9 : 00000009 r8 : ffffffff r7 : cfb7fea4 r6 : 00000080 r5 : cf50cd58 r4 : c0580b20 r3 : 00000000 r2 : cfb7fe2c r1 : c02fd4b7 r0 : 0000002c Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user Control: 10c5387d Table: 8ed00019 DAC: 00000015 Process umount (pid: 868, stack limit = 0xcfb7e2e8) Stack: (0xcfb7fe38 to 0xcfb80000) fe20: With Linux 2.6.36. bf0122dc bf0122ec Reported on the linux-embedded ML 11 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com SquashFS

http://squashfs.sourceforge.net/ Filesystem for block storage, so it doesn't support the MTD API. However, as it is read-only, it works fine with mtdblock, as long as the flash chip doesn't have any bad blocks. You could use it for read-only sections in your filesystem, but you cannot rely on it (bad blocks can always happen).

12 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com Benchmark hardware (1)

Calao Systems USB-A9263 AT91SAM9263 ARM CPU 64 MB RAM 256 MB flash 2 USB 2.0 host 1 USB device 100 Mbit Ethernet port Powered by USB! Serial and JTAG through this USB port. Multiple extension boards. Approximately 160 EUR

Supported in mainstream Linux since version 2.6.27! 13 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com Benchmark hardware (2)

TI Beagle Board TI OMAP 3530 ARM CPU 256 MB RAM, 256 MB flash RS-232 serial USB Host USB OTG JTAG DVI-D, S-Video Audio In and Out MMC/SD Only 150 USD

14 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com Benchmark methodology

Using a Debian Squeeze root filesystem for armel. Supports armv4 (Ubuntu on arm only supports v7) Contains all the tools to manipulate flash, as well as utilities for each filesystem. Using automated scripts supporting multiple boards Take care of sending commands to the boards through a serial line. Test rootfs and GPL scripts available on https://bootlin.com/pub/utils/board-automation/

15 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com Initialization tests

Time to load the filesystem drivers Special case of UBIFS: ubi module initialization ubiattach time ubifs module loading time

16 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com Initialization benchmarks

1,4 1,2 CALAO Board 1 ubifs 0,8 e jffs2 m

0,6i

T yaffs2 0,4 0,2 0 0 50 100Partition150 size 200 250 300 0,3 Beagle Board 0,25 0,2 ubifs 0,15e jffs2 m i

T 0,1 yaffs2 0,05 0 0 50 100Partition150 size 200 250 300 Note: couldn't measure ubifs on Beagle (bug) 17 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com ubifs issue on Beagle

Methodology: ubiattach, mount, file, detach, attach again... oops No problem on Calao! ... UBI error: ubi_io_read: error -74 (ECC error) while reading 64 bytes from PEB 53:0, read 64 bytes UBI error: ubi_io_read: error -74 (ECC error) while reading 64 bytes from PEB 54:0, read 64 bytes UBI error: ubi_io_read: error -74 (ECC error) while reading 64 bytes from PEB 62:0, read 64 bytes UBI error: ubi_io_read: error -74 (ECC error) while reading 64 bytes from PEB 63:0, read 64 bytes UBI warning: check_what_we_have: 29 PEBs are corrupted corrupted PEBs are: 3 4 8 10 11 13 14 15 18 20 21 23 24 25 29 33 34 35 36 38 39 40 41 44 50 51 53 62 63 UBI error: check_what_we_have: too many corrupted PEBs, refusing this device ubiattach: error!: cannot attach mtd1

18 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com mount time benchmarks

2,5 CALAO Board 2

1,5 ubifs e jffs2 m i 1

T yaffs2 0,5

0 0 50 100Partition150 size 200 250 300 1,8 1,6 Beagle Board 1,4 1,2 ubifs e 1 jffs2 0,8m i

0,6T yaffs2 0,4 0,2 0 0 50 100Partition150 size 200 250 300 Note: couldn't measure ubifs on Beagle (bug) 19 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com init + mount time benchmarks

3 CALAO Board 2,5 2 ubifs 1,5e jffs2 m i

T 1 yaffs2 0,5 0 0 50 100Partition150 size 200 250 300 1,8 1,6 Beagle Board 1,4 1,2 ubifs e 1 jffs2 0,8m i

0,6T yaffs2 0,4 0,2 0 0 50 100Partition150 size 200 250 300 Note: couldn't measure ubifs on Beagle (bug) 20 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com init + mount memory usage

3000 CALAO Board 2500

2000) B ubifs K

1500( jffs2

1000M yaffs2 A

R 500 0 0 50 100Partition150 size 200 250 300 3000 Beagle Board 2500

2000) B ubifs K

1500( jffs2

1000M yaffs2 A

R 500 0 0 50 100Partition150 size 200 250 300 Note: couldn't measure ubifs on Beagle (bug) 21 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com Used space

250000 CALAO Board 200000 )

B ubifs

150000K ( jffs2 e

100000c yaffs2 a p 50000 S

0 0 50 100Partition150 size 200 250 300 120000 Beagle Board 100000 80000 ubifs e ) c

60000B jffs2 a K p 40000( yaffs2 S 20000 0 0 50 100Partition150 size 200 250 300 Note: data missing on Beagle (bug to investigate) 22 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com Read time benchmarks

50 45 CALAO Board 40 35 30 ubifs 25e jffs2 m 20i

T yaffs2 15 10 5 0 0 50 100 Partition150 size 200 250 300 35 30 Beagle Board 25 ubifs 20 e jffs2 m

15i

T yaffs2 10 5 0 0 50 100 Partition150 size 200 250 300 Note: couldn't measure ubifs on Beagle (bug) 23 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com Remove time benchmarks

40 35 CALAO Board 30 25 ubifs 20e jffs2 m 15i T yaffs2 10 5 0 0 50 100 Partition150 size 200 250 300 35 30 Beagle Board 25 ubifs 20 e jffs2 m

15i

T yaffs2 10 5 0 0 50 100 Partition150 size 200 250 300 Note: couldn't measure ubifs on Beagle (bug) 24 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com Write time benchmarks

500 450 CALAO Board 400 350 300 ubifs 250e jffs2 m 200i

T yaffs2 150 100 50 0 0 50 100Partition150 size 200 250 300 120 Beagle Board 100 80 ubifs 60e jffs2 m i

40T yaffs2 20 0 0 50 100 Partition150 size 200 250 300

25 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com Video write time benchmarks

500 450 CALAO Board 400 350 300 ubifs 250e jffs2 m 200i

T yaffs2 150 100 50 0 0 50 100Partition150 size 200 250 300 120 Beagle Board 100 80 ubifs 60e jffs2 m i

40T yaffs2 20 0 0 50 100 Partition150 size 200 250 300

26 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com Flash filesystem conclusions

logfs Unusable so far. Crashes on both Beagle and Calao boards (2.6.36). jffs2 Poor performance compared to the others. May only make sense on small partitions where space matters. yaffs2 Best choice for write performance. Good choice for small partitions when read/write performance and boot time matter more than space. Show get in mainline in the next months ubifs Good or best performance in medium and big partitions Time to replace your jffs2 partitions by ubifs or by yaffs2!

27 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com Future of MTD devices?

Embedded MMC (eMMC) starting to replace NAND flash Cheaper: ~30 EUR for 8 GB (Source: Calao Systems) Bad blocks managed internally No more issue with the sector going corrupt. Wear leveling could apply to the whole storage space (In theory, like with UBI. Not true with some devices). Automatic sleep mode Faster boot time: driver-less initialization. Can take advantage of block filesystems with optimizations for SSDs. How reliable, trustworthy and resistant are these? Loosing control on wear leveling.

28 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com Quick block fs benchmarks

Methodology Tests run on the Beagle board Copy 800 MB of rootfs files from USB to MMC Flush caches Read MMC contents Flush caches Remove MMC contents Write 100 copies of a 6 MB video to MMC

29 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com Disk usage after format

40

35

30

25 ) B M (

20 e c a

15p S

10

5

0 vfat nilfs2 Filesystem

30 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com MMC copy from USB (ext3)

4000

3500

3000

2500 ) s ( 2000 e m i 1500T

1000

500

0 ext2 ext3 ext4 btrfs reiserfs jfs xfs vfat nilfs2 Filesystem

31 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com MMC read time

180

160

140

120

100) s (

e

m 80 i T 60

40

20

0 ext2 ext3 ext4 btrfs reiserfs jfs xfs vfat nilfs2 Filesystem

32 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com MMC remove time

70

60

50

40) s (

e m

30i T

20

10

0 ext2 ext3 ext4 btrfs reiserfs jfs xfs vfat nilfs2 Filesystem jfs: 2872s! xfs: 239s! 33 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com MMC write video time

450

400

350

300

250) s (

e

200m i T 150

100

50

0 ext2 ext3 ext4 btrfs reiserfs jfs xfs vfat nilfs2 Filesystem

34 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com MMC video write speed (MB/s)

8

7

6

5 s 4/ B M 3

2

1

0 ext2 ext3 ext4 btrfs reiserfs jfs xfs vfat nilfs2 Filesystem

35 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com block storage: conclusions

ext4 is great! Best compromise between maturity and performance. btrfs rocks! Though not production ready (still experimental). xfs is very disappointing (it has good performance on rotating disks) Hard to tell which filesystem will work best on your system. Make your own experiments (switching filesystems is cheap)!

36 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com Call for change

Squashfs on top of UBI Too much overhead today SquashFS Block device on top of UBI MTD block

Yaffs2 in mainline! MTD API Merge the Logfs Forum with the MTD UBI Foundation ;-) MTD driver

Flash chip

37 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com Thanks!

Questions? Comments?

Scripts and test root filesystem on https://bootlin.com/pub/utils/board-automation/

38 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com Flash fs mini-BOF

Do you think that eMMC will completely replace NAND flash? Would you feel comfortable to use block flash storage as a swap area? How do you limit the number of writes in a read/write partition? Any project you would like CELF to support?

39 Bootlin. Kernel, drivers and embedded Linux development, consulting, training and support. https://bootlin.com