应读者评论之邀,今天聊一个 NAND 里的小特性:Snap Read。

很多人第一次看到这个词的时候,容易把它和 Cache Read 混在一起。但实际上:

Snap Read 和 Cache Read 完全不是一回事。

它出现的原因只有一个:

提高 NAND 的读取性能。

不同厂商对这个功能的叫法不同,比如:

厂商
技术名称
Micron B27 NAND
Snap Read
Micron B47 / B58 NAND
IWL Read
YMTC NAND
Fast Read

虽然名字不同,但本质其实是一件事:

减少 NAND 内部读取的数据量,从而降低读取延迟。

在讲这个“快读”之前,我们先回顾一下 普通 NAND Read 是怎么工作的。


一、普通 NAND 读操作

目前主流 NAND 中,一个 Page 通常是 16KB。

但主机请求的数据往往是 4KB。

这就产生了一个问题:

NAND 的物理读取粒度和主机请求粒度是不一致的。


二、NAND Page 结构(关键理解)

很多人不理解 Snap Read,是因为没有理解 Page 的结构。

一个 16KB Page 通常可以理解为这样:

  1. NAND Page(16KB)
  2. +--------+--------+--------+--------+
  3. |4 KB   |4 KB   |4 KB   |4 KB   |
  4. |SubPg0|SubPg1|SubPg2|SubPg3|
  5. +--------+--------+--------+--------+

主机的请求通常是:

  1. 读取SubPg1(4KB)

但传统 NAND 的读取方式是:

  1. 读取整个Page(16KB)

也就是说:

  1. 读取16KB
  2. 只使用4KB
  3. 浪费12KB

这就是为什么 传统 NAND 读效率不高。


三、普通 Read 的内部流程

一次 NAND Read 通常分为 两个阶段。

第一阶段:Array → Cache Register

NAND 会先把 整个 Page(16KB) 从 NAND Array 读到 Cache Register。

这个过程叫:

tR(read latency)

示意:

  1. NAND Array
  2. │
  3. │16KB
  4. ▼
  5. CacheRegister

这个步骤通常是 整个读取中最耗时的部分。


第二阶段:Cache → Host

随后控制器再把 Cache Register 的数据通过接口读出来:

  1. CacheRegister
  2. │
  3. ▼
  4. Host/Controller

如果主机只需要 4KB:

控制器只会读出 对应的 4KB。

但注意:

即使只需要 4KB,NAND 仍然必须先读取完整 16KB Page。


四、Snap Read 是如何提升性能的?

Snap Read 的核心思想其实非常简单:

减少 Array → Cache Register 的读取数据量。

普通读取:

  1. Array→Cache
  2. 16KB

Snap Read:

  1. Array→Cache
  2. 8KB

也就是说:

只读取 Page 的一部分,而不是整个 Page。

这样带来的结果就是:

  • tR 减少
  • 读取延迟降低
  • 随机读性能提升

五、Read Timing 对比(核心差别)

普通 Read:

  1. Array read (16KB)
  2. |-------------------------|  tR
  3. ↓
  4. Data output

Snap Read:

  1. Array read (8KB)
  2. |-------------|  tR
  3. ↓
  4. Data output

IWL Read(4KB):

  1. Array read (4KB)
  2. |------|  tR
  3. ↓
  4. Data output

可以看到:

读取数据越少,tR 就越短。

而 NAND 的读延迟 主要就是由 tR 决定的。


六、不同 NAND 的实现

随着 NAND 技术的发展,“快读”的粒度越来越小。

Micron B27 NAND

使用 Snap Read

  1. NormalRead:16KB
  2. SnapRead:8KB

Micron B47 / B58 NAND

升级为 IWL Read

  1. NormalRead:16KB
  2. IWL Read:4KB

也就是说:

直接读取主机需要的最小数据单位。


YMTC NAND

在 YMTC NAND 中,这个机制通常叫:

Fast Read

原理和 Snap / IWL 基本一致。


七、为什么新一代 NAND 随机读越来越快?

很多人会有一个疑问:

为什么新一代 NAND 的随机读性能越来越高?

其实原因有很多,其中一个非常关键的因素就是:

读取粒度越来越小。

演进大概是这样:

  1. 早期 NAND
  2. 必须读取16KB

↓

  1. SnapRead
  2. 读取8KB

↓

  1. IWL Read
  2. 读取4KB

而 SSD 的随机读请求几乎都是:

  1. 4KB random read

当 NAND 可以 直接读取 4KB 时:

  1. Host request 4KB
  2. NAND read   4KB

这就意味着:

  • NAND latency 下降
  • SSD read latency 下降
  • Random IOPS 提升

所以很多 SSD 控制器厂商其实 非常依赖这个特性。


八、一句话总结

Snap Read / IWL Read / Fast Read 的本质其实非常简单:

只读取需要的数据,而不是整个 Page。

通过减少 Array → Cache Register 的读取数据量:

  • 降低 tR
  • 降低 读延迟
  • 提升 随机读性能

这也是为什么:

新一代 NAND 的随机读性能越来越好。