Flash Translation Layer¶
In this page, we will explain how we design and implement Flash Translation Layer - FTL.
FTL provides abstract class, so you can implement your own FTL by inherit the class.
By default, we provide
PageMapping, which implements Page-level FTL.
AbstractFTL class is defined in
It defines six virtual functions (+ three virtual functions derived from
initialize function handles warm-up procedure.
PageMapping::initialize function for more details.
format handles each I/O command.
getStatus function returns current mapping status.
This function exists for
Identify Namespace of NVMe Interface.
We provides page-level mapping FTL, which defined as
If you set
[pal] SuperblockSize configuration, this FTL will work as superpage-level FTL.
- (Super) page-level address translation: See each I/O functions
- Garbage collection: See
- Wear-leveling: See
GC invoked when configured threshold is triggered (See
PageMapping::table stores LPN -> PPN mapping and
FTL::Block stores block metadata and reverse mapping table.
Random I/O tweak¶
Commercial SSDs uses special algorithms to enhance random write performance. Instead of implementing such algorithms, SimpleSSD modified FTL for implementation convenience.
This tweak has same memory requirement with pure page-level FTL (without superpage configuration). It still uses superpage-level I/O for exploit internal parallelism, but also supports fine-granule (page-level) write handling.