Skip to content

Latest commit

 

History

History
18 lines (16 loc) · 1.88 KB

Flash Translation Layer.md

File metadata and controls

18 lines (16 loc) · 1.88 KB
tags
flashmem

Flash Translation Layer

There are several challenges when it comes to making efficient use of flash memory for mass storage: the mismatch between the size of an erase block and a disk sector, the limited number of erase cycles per erase block, and the need for bad block handling on NAND chips. These differences are resolved by a flash translation layer, or FTL.

A flash translation layer has the following features:

  • Sub allocation: Filesystems work best with a small allocation unit, traditionally a 512-byte sector. This is much smaller than a flash erase block of 128 KiB or more. Therefore, erase blocks have to be subdivided into smaller units to avoid wasting large amounts of space.
  • Garbage collection: A consequence of suballocation is that an erase block will contain a mixture of good data and stale data once the filesystem has been in use for a while. Since we can only free up whole erase blocks, the only way to reclaim this free space is to coalesce the good data into one place, and then return the now empty erase block to the free list. This is known as garbage collection, and it is usually implemented as a background thread.
  • Wear leveling: There is a limit on the number of erase cycles for each block. To maximize the lifespan of a chip, it is important to move data around so that each block is erased roughly the same number of times.
  • Bad block handling: On NAND flash chips, you have to avoid using any block marked bad and also mark good blocks as bad if they cannot be erased.
  • Robustness: Embedded devices may be powered off or reset without warning, so any filesystem should be able to cope without corruption, usually by incorporating a journal or a log of transactions.

There are several ways to deploy the FTL:

  • In the filesystem: As with [[JFFS2]], [[YAFFS2]], [[UBIFS]]
  • In the block device driver
  • In the device controller