SSD Page Allocation #
Page allocation happens at write, while read directly lookup in FTL. A request is parsed into page-sized request for address translation. Allocation is divided into two: plane allocation (PLAlloc
) and block allocation (BLAlloc
):
Plane allocation #
Goal: determine physical (channel, way, die, plane, block, page)
Write requests are striped to various units to increase parallelism, following a certain allocation order:
- Static Allocation: assign pages to free blocks based on certain fixed order
- Dynamic Allocation: further take into considering: wear leveling, busy/idle channels. For example, if target chip is busy, writes can be re-directed to another chip. The drawback is maintenance of another mapping table below FTL 1. Tavakkol et al. 2 conclude the superiority of dynamic allocation in terms of degree of parallelism
- OCSSD 2.0 defines a sequential page allocation scheme at chunk level: it maintains a write pointer and requires sequential allocation to advance the pointer until the chunk is fully consumed.
Block allocation #
Goal: determine physical block
:
- Either wear-aware or first-fit allocation
- Inside a block, pages are programmed sequentially, so the page ID is determined by the write frontier
Static Allocation #
There are 24 possible combinations of allocation schemes:
The optimal allocation scheme is PFCD: Plane → Flash-chip → Channel → Die, concluded by Myoungsoo Jung et al. with detailed analysis 4.
Exploiting Intra-Request Slack to Improve SSD Performance, ASPLOS 2017, Nima Elyasi et al. ↩︎
Performance Evaluation of Dynamic Page Allocation Strategies in SSDs, Tavakkol et al., 2016 Trans on Modeling and Performance Evaluation of Computing Systems. see here ↩︎
An Evaluation of Different Page Allocation Strategies on High-Speed SSDs, USENIX HotStorage 2012, Myoungsoo Jung et al. ↩︎