UBIFS

About Flash File Systems

Most embedded systems, such as PDAs, mobile phones, GPS devices, digital cameras etc., use flash chips as storage devices. The behavior of flash chips is different from that of hard disks.

Ordinary file systems (vfat, ntfs, ext3, ...) are designed for hard disks, they can only be used efficiently if the I/O operands are rarely performed, like in the case of digital cameras. Using ordinary file systems for a base file system can make the flash chip wear out prematurely and can also cause a relevant performance penalty.

Flash file systems were designed to avoid these spillovers. Today, the most efficient and popular Linux flash file system is JFFS2. Our department is making relevant efforts to improve it.

UBIFS

In spite of the many new tricks, JFFS2 is still not usable on flash chips larger than 512M. The problem is in its design level: it uses data structures which are good for small flashes, but in the case of large ones it needs a large amount of memory and becomes very slow. It was necessary to develop a new flash file system. In strong cooperation with Nokia engineers, we have designed UBIFS, a fast and scalable file system. Main differences:

JFFS2 UBIFS
Indexing on flash None B+ tree with wandering algorithm
Indexing in memory Chained list, containing information about every node, keeping always in memory TNC (Tree Node Cache) which caches indexing nodes may be shrunk if Linux VM needs more memory
Write operation Write through (write data immediately) Write back (do caching at writing)

UBIFS is now part of the official Linux kernel.