NVMe
NVMe
Peter Onufryk
Director of Engineering
IDT
NAND
NAND
NAND
NAND
...
NAND
NAND
NAND
NAND
NVMe
PCIe x8 NAND Flash
Gen3 ...
NAND
NAND
NAND
NAND
Controller
BW ~6 GBps
...
...
...
...
...
NAND
NAND
NAND
NAND
8KB Page
TREAD = 75s 109 MBps Read BW
Need:
TPROG = 1ms 8 MBps Write BW
55 parallel 8KB reads
732 parallel 8KB writes
NVMe Controller
Submission Completion
Queue Host Memory Queue
Ring Ring
Doorbell Doorbell
New Tail Tail Head New Head
2 8
Head Tail
NVMe Controller
SQ
SQ
Urgent RR
...
SQ
SQ
High SQ
RR
Medium Strict Priority
Priority
Priority
...
SQ
High WRR Priority
SQ
Medium SQ
RR
Medium WRR Priority
WRR
Priority
...
SQ
Low SQ
RR
Priority
...
SQ
1 Namespace Identifier 1
DWord
2 2 SQ Identifier SQ Head Pointer
3 3 Status Field P Command Identifier
4
Metadata Pointer
5
6
PRP Entry 1
7
DWord
8
PRP Entry 2
9
10
11
12
13
14
15
...
Cmd Queue Queue
Cmd
PCIe 7 Element Element
Memory
... 3
Commands Commands
Fixed Sized Commands Simplify Command Parsing, Arbitration, and Error Handling
Storage
Logical Block
Address Range
SLC
NAND Flash
TLC
Logical NVMe
PCIe NAND Flash
to Controller
Physical
Mapping
Other NVM
Wear (MRAM, PCM …)
Leveling
DRAM
NVM Controller with Tiered Storage
0,1,2
Read(7-0)
PCIe NVMe NAND NAND NAND
NAND Flash Erase
Controller 5 3 7
D7 D0 D6 D5 D1 D2 D4 D3
Host Read
Physical
Memory
C3
NAND
C1 Data
D0
Address Length C0
C4 C0 a D1
C1 b C1
C2 c D2
C3 d
C0
C2 D3
D4
Address Length
C3
C4 e D5
C2 C5 f C4
D6
C5
D7
C5
C5
bufPtr
read(buPtr, numBytes)
C0 C6
Page Offset
C1 C0
C2
C3 C1
numBytes C4 C7
C5
C6 C2
C7 C3
C8
C8
C4
C5
bufPtr
read(buPtr, numBytes) NAND
C0 C6
Page Address Offset
Data
C0 offset
C1 C0
C1 - C0
D0
C2 -
C2 C1
C3 -
D1
C3 C1 C2
D2
Page Address Offset
numBytes C4 C7 C3
C4 -
D3
C5 -
C5 C4
C6 -
D4
C7 -
C6 C2 C5
D5
C7 C3 C6
Page Address Offset
D6
C8 -
C8 C7
- -
D7
- -
C8 C8
- -
D8
C4