SSD固件技术

读延迟 65 µs 的逐段拆解:从 SQ 取指到 CQ 回写

作者:军航科工半导体读延迟拆解 / QD1 / L2P映射命中

CORE 7 规格定义 4KB 随机读 QD1 平均 65 µs。拆开这段时间可以看到 NAND tR 占绝对大头,链路几乎不构成约束,而尾延迟的形状主要由 L2P 命中率与后台任务争用决定。

一次 4KB 读请求的时间去向

CORE 7 系列 J750/J770 的 4KB 随机读延迟定义为 QD1 平均 65 µs。把这 65 µs 拆开,NAND 阵列本身的 tR(把页读出到页寄存器)占绝对大头,通常是数十微秒量级;剩下的部分分散在门铃写入与 SQ 取指、命令解析与 LBA 到物理地址的转换、通道命令下发与数据搬运、LDPC 解码,以及 DMA 回写主机内存并投递 CQ 与中断。在 PCIe 4.0 x4 链路上,一笔 4KB 传输的线上时间不足 1 µs,低队列深度下链路带宽几乎不构成约束——这也解释了为什么 QD1 延迟和 1,500 KIOPS 的峰值随机读要用两套完全不同的手段去优化。

映射命中率决定尾部形状

平均值好看不代表分布好看。读路径上唯一可能凭空多出一次 NAND 访问的环节是 L2P 未命中:条目不在盘内 DRAM 中时,控制器必须先取一次映射页,再取一次数据页,这笔请求的延迟直接翻倍。按容量比例配置映射表驻留空间、让热区常驻,本质上就是把这个尾部事件的概率压到接近零。J750 的 15.36TB 档位是这条约束最紧的点,因此在当前的产品定义/EVT 阶段被列为重点采样 P99.9 的容量档。

被后台任务偷走的时间

读请求本身不改写介质,但它排在共享资源的队列里。同一个 Die 上若正在执行擦除(毫秒量级)或编程(数百微秒量级),读命令要么等待,要么依赖控制器的编程/擦除挂起能力抢占。垃圾回收强度、后台数据刷新、读电压重试都以同样方式挤占通道时间。所以读延迟不是读路径的独立属性,而是整机调度策略的结果——只有在稳态、盘接近写满、且叠加写流量的条件下测出来的数才有参考价值。

口径先固定,数字才有意义

在 JH-E4U-C 工程平台上对读路径的采样固定几个前提:先跑到 SNIA 定义的稳态,再按 QD1、QD32、QD128 分别取平均值与 P99、P99.9,同时记录温度与后台任务占空比。65 µs 是规格定义的目标值,每一版固件都要拿同一套口径回归比对,观察分布是否发生位移。口径一旦松动,前后两次的数字就不再可比,而这比数字本身低几微秒要严重得多。

关键词
读延迟拆解QD1L2P映射命中P99.9尾延迟NAND tR测试口径CORE 7