目录
[1. 关键概念与等级要求](#1. 关键概念与等级要求)
[2. 测什么](#2. 测什么)
[3. 测试条件](#3. 测试条件)
[负载(JESD219 Enterprise)](#负载(JESD219 Enterprise))
[4. 样本量](#4. 样本量)
[5. 测试流程](#5. 测试流程)
[6. FIO 实现](#6. FIO 实现)
[JESD219 企业负载](#JESD219 企业负载)
[检查点与 retention 校验](#检查点与 retention 校验)
[7. 判据](#7. 判据)
[8. 往期相关文章](#8. 往期相关文章)
**术语说明:**本文涉及以下专业术语,先做统一说明,便于后续阅读。
| 术语 | 英文全称 | 含义 |
|---|---|---|
| TBW | Total Bytes Written | SSD 在整个质保期内允许写入的主机数据总量,是衡量耐久度的核心指标。 |
| DWPD | Drive Writes Per Day | 每天可写满整盘容量的次数,与 TBW 的关系为 DWPD = TBW /(容量 × 365 × 质保年数)。 |
| WAF | Write Amplification Factor | NAND 实际写入量除以主机写入量,反映写入放大程度,WAF 越高耐久损耗越快。 |
| FFR | Functional Failure Rate | 功能失效率,指盘在应力测试后无法正常工作的比例。 |
| UBER | Uncorrectable Bit Error Rate | 不可纠正错误位数占总读取位数的比例,衡量数据完整性。 |
| Retention | Data Retention | 数据保持能力,指断电后数据在存储介质上能可靠保存的时间。 |
| P/E 循环 | Program/Erase Cycle | NAND 闪存的编程擦除周期,是颗粒寿命的基本单位。 |
| LBA | Logical Block Address | 逻辑块地址,主机访问 SSD 时使用的逻辑寻址单元。 |
| SMART | Self-Monitoring, Analysis and Reporting Technology | 硬盘自监测、分析和报告技术,用于记录健康状态和磨损信息。 |
| UECC | Uncorrectable ECC Error | 无法通过纠错码修复的错误,反映介质损坏程度。 |
先说结论:JESD218 定义"耐久度是什么、怎么判定合格",JESD219 定义"用什么负载去磨损盘"。企业级耐久度验证的核心,是证明 SSD 写满额定 TBW 后同时满足三点:
- 功能失效率 FFR ≤ 3%
- UBER ≤ 10⁻¹⁶
- 断电 40°C 存放 3 个月后数据不丢
置信度按 60% 统计。
下文中的数值部分由标准公式推导而来。标准有多个修订版(JESD218B、JESD219A 等),正式报告请以你手上版本的条款和表格为准。
1. 关键概念与等级要求
| 项目 | Client | Enterprise |
|---|---|---|
| 工作时长 | 8 h/天,40°C | 24 h/天,55°C |
| 断电数据保持 | 1 年 @ 30°C | 3 个月 @ 40°C |
| FFR | ≤ 3% | ≤ 3% |
| UBER | ≤ 10⁻¹⁵ | ≤ 10⁻¹⁶ |
| 负载 | JESD219 Client trace | JESD219 Enterprise 合成负载 |
- TBW:在上述条件下仍满足要求的最大主机写入量。DWPD = TBW / (容量 × 365 × 质保年数)。
- WAF:NAND 写入量 / 主机写入量。TBW ≈ 容量 × 额定 P/E / WAF,所以 WAF 必须用 JESD219 负载实测。
- 功能失效:盘无法正常工作,比如掉盘、只读、Critical Warning 置位、不可恢复的数据错误超限等。
- UBER:不可纠正错误位数 / 总读取位数。
2. 测什么
- WAF:用 JESD219 企业负载稳态下测量,用来推算或校核 TBW。
- 耐久应力:把盘写到额定 TBW(直接法),或者用颗粒级数据加实测 WAF 外推。
- 应力期间的数据完整性和 UBER:周期性全盘读校验,统计 UECC 和校验错误。
- 寿命末期数据保持:写满 TBW 后写入校验数据,断电高温烘烤,模拟 40°C 存放 3 个月,再读校验。
- 功能失效:全程监控掉盘、SMART 告警、Available Spare 跌破阈值等。
- 健康指标趋势(辅助项):Percentage Used、Media Errors、坏块增长,用于评估 TBW 标称是否合理。
3. 测试条件
负载(JESD219 Enterprise)
- 访问模式:100% 随机写,全盘 LBA 范围,不使用 TRIM。
- 数据:不可压缩的随机数据,防止压缩或去重带来收益。
- IO 大小分布(按 IO 个数计):
| 大小 | 占比 | 大小 | 占比 |
|---|---|---|---|
| 512B | 4% | 4KB | 67% |
| 1KB / 1.5KB / 2KB / 2.5KB / 3KB / 3.5KB | 各 1% | 8KB | 10% |
| 16KB | 7% | ||
| 32KB / 64KB | 各 3% |
- 对齐:≥4KB 的 IO 按 4KB 对齐,<4KB 的按 512B 对齐。
- LBA 热度分布:
- 50% 的访问落在前 5% LBA
- 30% 落在接下来的 15%
- 20% 落在剩余 80%
- 预处理:先全盘顺序写 2 遍,再运行该负载直到 WAF 和性能进入稳态。
温度
- 应力阶段:标准要求覆盖高温和低温两种应力。高温加速"自愈"(detrap),对 retention 偏乐观;低温对耐久更苛刻。常见做法是分组,一组控壳温在高温端(接近最高工作温度),一组在室温或低温端。具体温度区间请按标准条款设定,并在报告里写明壳温或 SMART 温度。
- 保持阶段:断电烘烤,Arrhenius 加速,retention 激活能取 Ea = 1.1 eV。
| 烘烤温度 | 加速因子(相对 40°C) | 等效 3 个月(约 2190 h)所需时间 |
|---|---|---|
| 70°C | 约 35 | 约 62 h |
| 85°C | 约 168 | 约 13 h |
烘烤温度不宜过高,避免引入实际使用中不存在的失效机理。
4. 样本量
JESD218 按 60% 置信度验证,基于卡方分布。
FFR 所需样本数:
n ≥ χ²(0.60; 2(f+1)) / (2 × FFR)
| 允许失效数 f | Enterprise / Client(FFR = 3%)最少样本 |
|---|---|
| 0 | 31 |
| 1 | 68 |
| 2 | 104 |
| 3 | 140 |
UBER 所需总读取量(所有样本累计):
bits_read ≥ χ²(0.60; 2(e+1)) / (2 × UBER)
| 允许错误数 e | Enterprise(10⁻¹⁶) | Client(10⁻¹⁵) |
|---|---|---|
| 0 | 约 9.2×10¹⁵ bit ≈ 1.15 PB | 约 0.115 PB |
| 1 | 约 2.0×10¹⁶ bit ≈ 2.5 PB | 约 0.25 PB |
实践建议:
- 至少 31 片,取自不少于 3 个生产批次。多批次是 JESD47 体系的惯例,JESD218 本身不强制,但客户审核常会问。
- 高温组和低温组分别统计。
- UBER 的读取量可以由应力期间的周期性全盘读校验加上 retention 读校验累计凑够。
5. 测试流程
- 初始检查:记录 FW 版本、容量、LBA 格式和 SMART 基线;做一次全盘写读校验。
- 预处理:全盘顺序写 2 遍,然后跑 JESD219 负载到稳态。
- 测 WAF:稳态下取一段区间,计算 ΔNAND写 / Δ主机写。
- 主机写:NVMe SMART 的 Data Units Written。
- NAND 写:OCP C0 日志的 Physical Media Units Written,或厂商日志。
- 耐久应力:持续跑 JESD219 负载,按温度分组控温。每累计写入约 10% TBW 做一次检查点:
- 全盘顺序写入带校验头的数据,再读校验
- 记录 SMART
- 记录 UECC 和校验错误
- 达到额定 TBW:最后写入一遍全盘校验数据,记录 SMART。
- 断电烘烤:按第 3 节的表格选择温度和时长。
- 恢复并读校验:回到室温后上电,先做全盘读校验,不要先写,再统计错误。
- 判定:汇总 FFR 和 UBER,并检查 retention 结果。
时间预估:以 3.84TB、1 DWPD、5 年为例,TBW 约 7 PB。按约 1.5 GB/s 混合随机写计算,直接法约 54 天;3 DWPD 约 160 天。周期太长时,可以用标准允许的外推法:颗粒级 P/E 循环测试结合实测 WAF。外推需要在报告中说明数据来源和假设。
6. FIO 实现
FIO 的 blockalign 对一个 job 全局生效,单 job 无法同时满足"小 IO 按 512B 对齐、≥4K 按 4K 对齐"。解决办法是拆成两个 job,用 flow 把 IO 个数比例控制在 10:90。
预处理
; precondition.fio - 全盘顺序写 2 遍
[global]
filename=/dev/nvme0n1
ioengine=libaio
direct=1
refill_buffers=1
buffer_compress_percentage=0 ; 不可压缩数据
[seq_fill]
rw=write
bs=128k
iodepth=32
loops=2
JESD219 企业负载
; jesd219_enterprise.fio
[global]
filename=/dev/nvme0n1
ioengine=libaio ; 也可用 io_uring
direct=1
rw=randwrite
norandommap=1
randrepeat=0
refill_buffers=1
buffer_compress_percentage=0
; JESD219 LBA 热度: 50% -> 前5%, 30% -> 接下来15%, 20% -> 剩余80%
random_distribution=zoned:50/5:30/15:20/80
time_based=1
runtime=86400 ; 每轮 24h,外部脚本循环并采集 SMART
group_reporting=1
flow_id=1 ; 两个 job 在同一个 flow 组内按权重分配 IO
; 小于 4K 的 IO,占总 IO 的 10%,512B 对齐
[small_io]
bssplit=512/40:1k/10:1536/10:2k/10:2560/10:3k/10:3584/10
blockalign=512
flow=1
iodepth=8
numjobs=1
; 大于等于 4K 的 IO,占总 IO 的 90%,4K 对齐
; 67/10/7/3/3 按 90 归一化后取整
[large_io]
bssplit=4k/75:8k/11:16k/8:32k/3:64k/3
blockalign=4k
flow=9
iodepth=32
numjobs=1
检查点与 retention 校验
; verify_write.fio - 检查点或 TBW 末期写入校验数据
[global]
filename=/dev/nvme0n1
ioengine=libaio
direct=1
bs=128k
iodepth=32
verify=crc32c
verify_fatal=0 ; 不在首个错误处停止,统计全部错误
do_verify=1
[write_and_verify]
rw=write
; verify_read.fio - 烘烤后只读校验,不重写数据
[global]
filename=/dev/nvme0n1
ioengine=libaio
direct=1
bs=128k
iodepth=32
verify=crc32c
verify_only=1 ; 只读并校验已有数据
verify_fatal=0
[read_verify]
rw=write ; verify_only 模式下需与写入时的参数一致
需要注意的地方
- 512B IO 要求盘是 512e 格式。4Kn 盘无法下发 512B IO,需要在报告中说明偏离,并把小 IO 部分并入 4K。
- 随机写和
verify叠加时,同一 LBA 的覆盖会导致误报。所以应力阶段不开 verify,数据完整性通过检查点的顺序写读校验来保证。 - 不要用 FIO 自带的带宽数字累计 TBW,以 SMART 的 Data Units Written 为准(单位是 1000 × 512B)。
- 外部循环脚本每轮记录以下 SMART 字段:
nvme smart-log的 critical_warning、temperature、percentage_used、available_spare、media_errors、data_units_written,再加上 OCP 或厂商日志里的 NAND 写入量。
7. 判据
| 判据 | 合格条件 |
|---|---|
| TBW | 主机写入量(SMART)≥ 额定 TBW |
| FFR | 失效数 ≤ 第 4 节表格中样本量对应的允许值,等效 ≤ 3% @ 60% 置信度 |
| UBER | 全部读校验累计的不可纠正错误数与读取量满足 ≤ 10⁻¹⁶ @ 60% 置信度 |
| Retention | 烘烤后全盘读校验,错误计入 UBER,结果仍满足 10⁻¹⁶;盘功能正常 |
| SMART | 达到 TBW 时无 Critical Warning,Available Spare 高于阈值;Percentage Used 应接近或低于 100%(辅助判断) |
| WAF | 实测 WAF 与厂商宣称的 TBW 计算假设一致(辅助判断) |
任何一条不满足,就判定该盘不支持所宣称的 TBW 或 DWPD。
8. 往期相关文章
更多关于 SSD 性能测试与 FIO 实战的内容,欢迎阅读我的 CSDN 往期文章: