应读者评论之邀,今天聊一个 NAND 里的小特性:Snap Read。
很多人第一次看到这个词的时候,容易把它和 Cache Read 混在一起。但实际上:
Snap Read 和 Cache Read 完全不是一回事。
它出现的原因只有一个:
提高 NAND 的读取性能。
不同厂商对这个功能的叫法不同,比如:
虽然名字不同,但本质其实是一件事:
减少 NAND 内部读取的数据量,从而降低读取延迟。
在讲这个“快读”之前,我们先回顾一下 普通 NAND Read 是怎么工作的。
一、普通 NAND 读操作
目前主流 NAND 中,一个 Page 通常是 16KB。
但主机请求的数据往往是 4KB。
这就产生了一个问题:
NAND 的物理读取粒度和主机请求粒度是不一致的。
二、NAND Page 结构(关键理解)
很多人不理解 Snap Read,是因为没有理解 Page 的结构。
一个 16KB Page 通常可以理解为这样:
NAND Page(16KB)+--------+--------+--------+--------+|4 KB |4 KB |4 KB |4 KB ||SubPg0|SubPg1|SubPg2|SubPg3|+--------+--------+--------+--------+
主机的请求通常是:
读取SubPg1(4KB)
但传统 NAND 的读取方式是:
读取整个Page(16KB)
也就是说:
读取16KB只使用4KB浪费12KB
这就是为什么 传统 NAND 读效率不高。
三、普通 Read 的内部流程
一次 NAND Read 通常分为 两个阶段。
第一阶段:Array → Cache Register
NAND 会先把 整个 Page(16KB) 从 NAND Array 读到 Cache Register。
这个过程叫:
tR(read latency)
示意:
NAND Array││16KB▼CacheRegister
这个步骤通常是 整个读取中最耗时的部分。
第二阶段:Cache → Host
随后控制器再把 Cache Register 的数据通过接口读出来:
CacheRegister│▼Host/Controller
如果主机只需要 4KB:
控制器只会读出 对应的 4KB。
但注意:
即使只需要 4KB,NAND 仍然必须先读取完整 16KB Page。
四、Snap Read 是如何提升性能的?
Snap Read 的核心思想其实非常简单:
减少 Array → Cache Register 的读取数据量。
普通读取:
Array→Cache16KB
Snap Read:
Array→Cache8KB
也就是说:
只读取 Page 的一部分,而不是整个 Page。
这样带来的结果就是:
- tR 减少
- 读取延迟降低
- 随机读性能提升
五、Read Timing 对比(核心差别)
普通 Read:
Array read (16KB)|-------------------------| tR↓Data output
Snap Read:
Array read (8KB)|-------------| tR↓Data output
IWL Read(4KB):
Array read (4KB)|------| tR↓Data output
可以看到:
读取数据越少,tR 就越短。
而 NAND 的读延迟 主要就是由 tR 决定的。
六、不同 NAND 的实现
随着 NAND 技术的发展,“快读”的粒度越来越小。
Micron B27 NAND
使用 Snap Read
NormalRead:16KBSnapRead:8KB
Micron B47 / B58 NAND
升级为 IWL Read
NormalRead:16KBIWL Read:4KB
也就是说:
直接读取主机需要的最小数据单位。
YMTC NAND
在 YMTC NAND 中,这个机制通常叫:
Fast Read
原理和 Snap / IWL 基本一致。
七、为什么新一代 NAND 随机读越来越快?
很多人会有一个疑问:
为什么新一代 NAND 的随机读性能越来越高?
其实原因有很多,其中一个非常关键的因素就是:
读取粒度越来越小。
演进大概是这样:
早期 NAND必须读取16KB
↓
SnapRead读取8KB
↓
IWL Read读取4KB
而 SSD 的随机读请求几乎都是:
4KB random read
当 NAND 可以 直接读取 4KB 时:
Host request 4KBNAND read 4KB
这就意味着:
- NAND latency 下降
- SSD read latency 下降
- Random IOPS 提升
所以很多 SSD 控制器厂商其实 非常依赖这个特性。
八、一句话总结
Snap Read / IWL Read / Fast Read 的本质其实非常简单:
只读取需要的数据,而不是整个 Page。
通过减少 Array → Cache Register 的读取数据量:
- 降低 tR
- 降低 读延迟
- 提升 随机读性能
这也是为什么:
新一代 NAND 的随机读性能越来越好。
Alipay
Wechat