- `blockMappingTable`: map logical block number -> physical block number
- `blocks`: physical block number -> block info.
- `SWBlock`: The SW log block.
- `RWBlocks`: All RW log blocks.
- `RWlogMapping`: All lpn in RW log block -> (pbn, pageOffset)
# Algorithm design:
## read:
1. check block mapping table, suppose block pbn X.
- no mapped: no data
2. check the corresponding page status:
- if valid, just return
- if erased && invalid: no data
- if invalid: check log blocks.
3. If not found: otherwise: no data
## write (a page):
Follow the psuedo code in the paper.
1. Check if this page can insert to block_mapping_table[lbn] directly.
2. Otherwise, there are two situations:
1. offset = 0 (the beginning of a block)
Merge and recycle the current SW log block.
Create a new one that begins with the page inserted.
2. offset != 0
1. if the current logical owner of SW log block contains the page inserted.
Try to insert to the corresponding location of the SW log block.
If conflict, merge the current SW log block, the original data block
(and the page inserted).
2. if not
Try to write to RW log block.
If no free page, then recyle one of RW log block (in round robin style),
and create a new one.
*/
Total SSD Capacity.
Channel = 8
Package = 4
Die = 4
Plane = 1
Block = 512
Page = 512
PageSize = 4096
8*4*4*1*512*512*4096/2^30=128G
BlockCnt = 8*4*4*1*512=65536
- `blockMappingTable`: sizeof(uint32_t) * 2 * (65536) = 524288 B
- `blocks`: 65536 * sizeof(Block) =
- `SWBlock`: The SW log block.
- `RWBlocks`: All RW log blocks.
- `RWlogMapping`: All lpn in RW log block -> (pbn, pageOffset)
TODO. 见附件
共有六种模式。
总体延迟统计量: 延迟点图:
总体延迟统计量: 延迟点图: