最近在 Jetson AGX Thor 上测试一块 Lexar ARES PRO 4TB Gen5 SSD,遇到一个值得研究的现象:读取约 14.9 GB/s,写入约 5~6 GB/s。
PCIe 已经工作在 Gen5 x4,为什么读写仍有这么大差距?要理解这个问题,需要分清三个层次:PCIe 带宽、主机数据访问路径,以及 SSD 内部 NAND 的读写能力。
一、Gen5 SSD 到底是什么?

图1:Lexar ARES PRO SSD。图片来源:Lexar 官方产品页面。
| 名称 | 含义 |
|---|---|
| NAND Flash | 真正保存数据的非易失性存储介质 |
| SSD Controller | 管理 NAND、地址映射、纠错和缓存的主控 |
| PCIe Gen5 | 主机与 SSD 之间的接口代际 |
| NVMe | 主机访问 SSD 的通信协议 |
| M.2 2280 | 外形规格:宽 22mm、长 80mm |
典型数据路径为:
应用程序 → Linux 文件系统 → NVMe 驱动 → PCIe → SSD 主控 → NAND Flash
Gen5 说明接口传输能力,不能直接代表 NAND 的实际写入速度。
M.2 也不等于 NVMe。 M.2 是外形与连接器规范,既有 M.2 SATA SSD,也有通过 PCIe 连接的 M.2 NVMe SSD;U.2、E1.S 等其他形态的 SSD 同样可以使用 NVMe。选型时要同时确认外形、接口和协议。
Gen5 x4 有多快?
PCIe Gen5 每条 Lane 的速率为 32 GT/s,采用 128b/130b 编码。四条 Lane 的单向理论带宽为:
32 × (128 ÷ 130) × 4 ÷ 8 ≈ 15.75 GB/s
其中,4 表示 Lane 数,除以 8 是将 bit 换算为 Byte。这个结果只扣除了编码开销,还没有扣除 PCIe 数据包等协议开销。
| PCIe 版本 | 单 Lane 速率 | x4 单向理论带宽 |
|---|---|---|
| Gen3 | 8 GT/s | 3.94 GB/s |
| Gen4 | 16 GT/s | 7.88 GB/s |
| Gen5 | 32 GT/s | 15.75 GB/s |
单位也要统一:GB/s 是十进制,GiB/s 是二进制,1 GiB/s ≈ 1.074 GB/s。例如 5107 MiB/s,约等于 5.35 GB/s。
二、NAND 为什么读写速度不同?
HDD 使用磁性介质保存数据;SSD 主要使用 NAND Flash,通过存储单元的电荷状态改变阈值电压,表示不同的数据。

图2:3D NAND 垂直堆叠结构。来源:Electronics 论文。
从材料和结构看,NAND 是半导体存储器,涉及硅沟道、绝缘介质及电荷存储结构;不同工艺采用浮栅或电荷俘获等方式。3D NAND 将存储单元垂直堆叠,提高单位面积的容量。
读取主要是检测阈值电压;写入则需要对单元编程,精确控制电荷状态,还可能涉及有效数据搬移、块擦除和垃圾回收。NAND 通常以 Page 为单位编程,以 Block 为单位擦除,因此写入过程往往更加复杂。
已经编程的数据不能像 RAM 一样随意原地覆盖。SSD 通常把更新数据写到新位置,再回收旧块;搬移和整理会产生额外写入,这就是写放大(Write Amplification)。例如主机写入 100GB、NAND 实际写入 150GB,写放大系数就是 1.5。它会影响持续写入性能和耐久度。
SLC、MLC、TLC、QLC 的区别
| 类型 | 全称 | 每个 Cell 存储 | 状态数 | 一般特点 |
|---|---|---|---|---|
| SLC | Single-Level Cell | 1 bit | 2 | 快、耐久度高、单位容量成本高 |
| MLC | Multi-Level Cell | 2 bit | 4 | 这里按行业常用的 2 bit MLC 理解 |
| TLC | Triple-Level Cell | 3 bit | 8 | 容量、成本与性能较均衡 |
| QLC | Quad-Level Cell | 4 bit | 16 | 容量密度高,持续写入更依赖具体设计 |
一个 TLC 单元需要区分 8 种状态,SLC 只需区分 2 种。状态越多,编程通常越精细。但最终性能还取决于 NAND 代际、主控并行度、固件和温度,不能只凭类型判断一块 SSD 的全部表现。TLC 的性能、成本与耐久度较均衡;读取密集、容量优先的应用也可以考虑 QLC,重点仍是目标负载下的表现。
三、pSLC、DRAM 和 HMB 别混淆
pSLC:让部分 NAND 暂时以 SLC 方式工作
pSLC 是 pseudo-SLC,即模拟 SLC。主控让部分 TLC 或 QLC 单元只保存 1 bit,以换取更快的写入。同样数量的 TLC 单元,以这种方式工作时,容量约为原来的三分之一。
写入过程可以概括为:
- 数据优先写入较快的 pSLC 区域。
- 主控在后台将数据整理到高密度存储区。
- 持续写入超过整理能力时,空闲缓存逐渐耗尽。
- 后续速度可能下降,具体表现取决于主控策略和 NAND 能力。
pSLC 主要用于加速写入,不会提高 PCIe 链路带宽。 已存在 pSLC 区域的数据也能从那里读取,但这是另一回事。
这里的 pSLC 通常不是额外增加一颗 SLC 芯片,而是 NAND 的一种工作模式。动态缓存往往随空闲容量减少而缩小,还受后台整理影响;同系列 4TB 型号的缓存,也不能简单按 2TB 型号翻倍估算。
短时间写入 8~32GiB,可能只测到缓存内速度;持续写入几百 GiB,才更容易观察耗尽后的变化。因此,不能给所有 SSD 规定一个固定测试量。
DRAM 与 HMB:主要辅助主控管理
SSD 的 FTL(Flash Translation Layer)负责将逻辑地址映射到 NAND 实际位置。主控还要执行磨损均衡,避免少数块过度擦写,并处理垃圾回收、坏块管理和纠错。
| 技术 | 使用的介质 | 主要用途 |
|---|---|---|
| pSLC | SSD 内部 NAND | 加速写入 |
| 板载 DRAM | SSD 上的独立内存 | 缓存映射表等数据,具体用途由主控决定 |
| HMB | 主机内存 | 为 SSD 提供辅助管理空间 |
DRAM-less 指没有独立板载 DRAM。部分 NVMe SSD 使用 HMB(Host Memory Buffer),借用少量主机内存。例如:
nvme nvme0: allocated 32 MiB host memory buffer.
这表示驱动分配了 32MiB HMB,不能将它理解为 32MiB 的 pSLC 缓存。一块 SSD 可以同时采用 TLC、没有独立 DRAM、支持 HMB,并拥有动态 pSLC 缓存。
DRAM-less 不等于顺序速度低。 大块连续访问的映射访问模式相对简单,主控并行度、NAND 和 pSLC 仍可能提供很高的吞吐量;随机 I/O、满盘和持续写入表现则需要分别测试。
DRAM 与 HMB 都是易失性内存,pSLC 属于非易失性 NAND。但 NAND 非易失不等于整盘具备完整掉电保护,仍要看固件、元数据保护和具体硬件设计。
四、Thor 上的读写实测说明了什么?
本次型号为 Lexar ARES PRO 4TB。此前查阅的官方规格标称最高顺序读取 14,000 MB/s、写入 11,000 MB/s;标称值对应厂商测试条件,并非所有平台的保证速度。
| 测试状态 | 顺序写入 |
|---|---|
| 默认功耗模式 | 约 2.7 GB/s |
| MAXN + jetson_clocks | 约 5.35 GB/s |
此前读取测试记录为:
READ: bw=13.9GiB/s (14.9GB/s)
最高性能状态下的写入记录为:
WRITE: bw=5107MiB/s (5355MB/s)
读取值略高于厂商标称,需结合完整 fio 命令、数据路径和重复测试复核,不能仅凭这一组记录宣称稳定超过标称性能。
目前最明确的现象是:切换平台功耗与频率配置后,写入速度明显提高。 这提示主机平台状态会影响结果,但还不足以锁定具体瓶颈。
为什么不能直接归因于 IOMMU?
从 SSD 设备的角度看:
-
主机读取 SSD:SSD 通过 DMA 将数据写入主机内存。
-
主机写入 SSD:SSD 通过 DMA 从主机内存取走待写数据。
两者的 PCIe 事务不同。后者通常涉及设备发起 Memory Read 请求、接收 Completion,实际效率可能受到请求并发、主机控制器及内存路径影响。
IOMMU 提供 DMA 地址映射和访问隔离,参与两个方向的数据访问。读快写慢本身,不能证明 IOMMU 就是瓶颈。 还需要相同条件下的持续写入、温度记录,以及跨平台对比。
五、Linux 怎样测试才有说服力?
- 先确认链路和设备状态
以下 PCI 地址和设备节点仅为本次示例,实际使用前先通过 lspci 和 nvme list 确认。
nvme list
lspci -vv -s 0005:01:00.0 | grep -E 'LnkCap:|LnkSta:'
cat /sys/bus/pci/devices/0005:01:00.0/current_link_speed
cat /sys/bus/pci/devices/0005:01:00.0/current_link_width
nvme smart-log /dev/nvme0
dmesg | grep -Ei 'nvme|aer|rxerr|pcie'
Gen5 x4 应显示 32 GT/s、宽度 x4。除此之外,还要记录 SSD 固件、温度、介质错误和热管理状态。
如果反复出现 AER RxErr,应优先排查链路稳定性,包括连接器、信号完整性和供电,而不能只调整 fio 参数。协商到 Gen5 x4,也不代表实际吞吐量一定跑满。 - 用独立文件做顺序读写
不要对装有系统或业务数据的裸盘直接执行写入测试。 下面在已挂载的 /data 中创建新目录,先确认它确实位于目标 SSD,并有足够空间。
findmnt -T /data
df -h /data
BENCH_DIR= ( m k t e m p − d / d a t a / s s d − b e n c h . X X X X X X ) e c h o " (mktemp -d /data/ssd-bench.XXXXXX) echo " (mktemp−d/data/ssd−bench.XXXXXX)echo"BENCH_DIR"
顺序写入:
fio --name=bench \
--directory="KaTeX parse error: Undefined control sequence: \- at position 18: ...NCH\_DIR" \\ \̲-̲-rw=write --bs=...BENCH_DIR" \
--rw=read --bs=1M \
--ioengine=libaio --iodepth=32 \
--direct=1 --numjobs=4 \
--size=8G --allow_file_create=0 \
--group_reporting
direct=1 用于绕过 Linux Page Cache,但不会绕过 SSD 的内部缓存,也不等于每次 I/O 都强制数据持久化。
报告整次任务吞吐量时,优先使用 Run status group 下的 READ: bw= 和 WRITE: bw=,不要将瞬时采样最大值当作持续性能。 - 持续写入,观察速度下降点
确认空间充足并接受约 300GiB 测试写入后,可执行:
fio --name=slc_test \
--directory="KaTeX parse error: Undefined control sequence: \- at position 18: ...NCH\_DIR" \\ \̲-̲-rw=write --bs=...BENCH_DIR/slc_bw" \
--log_avg_msec=1000 \
--group_reporting
这里是四个 Job 各写 75GiB,合计 300GiB,会额外占用测试空间。各 Job 的带宽日志应按时间对齐后求和,不能将一个 Job 的日志误认为整盘带宽。
重点观察初始速度、下降位置、下降后的稳定值,以及温度是否同时升高。300GiB 只是一个起点,未必耗尽缓存。
比较多次结果时,应保持功耗模式、SSD 空闲容量、温度和后台负载尽量一致。如果主机先达到约 5~6GB/s 的上限,就可能看不到 SSD 自身更高的缓存内速度。
六、SSD 为什么贵,选型看什么?
SSD 的成本主要来自 NAND、主控、内存、封装与验证;价格还受容量、供需和产品定位影响。Gen5 接口只是其中一个因素。
| 分类 | 主要特点 | 常见用途 |
|---|---|---|
| SATA SSD | 顺序速度通常约 550MB/s | 旧设备升级、普通存储 |
| Gen4 NVMe SSD | 带宽高,性能与成本较均衡 | 主流电脑、工作站 |
| Gen5 NVMe SSD | 更高带宽,需要关注散热与功耗 | 大文件处理、高吞吐任务 |
| 企业级 SSD | 关注持续性能、耐久度及掉电保护等能力 | 服务器、数据中心 |
| 工业级 SSD | 关注温度范围、供货周期和环境适应性 | 工控、嵌入式产品 |
上述分类维度并不互斥,企业级、工业级产品也可能使用 SATA 或 PCIe 接口,具体能力应查看型号规格。
NAND 制造商包括 Samsung、Micron、SK hynix、KIOXIA、YMTC 等;成品 SSD 品牌包括 Samsung、Lexar、Kingston、WD_BLACK、SanDisk、KIOXIA、Solidigm、致态等。成品品牌不等于全部核心芯片的制造商。
实际选型时,我更关注 NAND 类型、缓存耗尽后的持续速度、主控与散热、TBW 和保修,以及目标平台的兼容性。不能仅凭品牌或最高 GB/s 判断。
例如四路摄像头,每路 H.265 码率为 50Mbps,视频净数据量为:
4 × 50 ÷ 8 = 25 MB/s
这远低于 Gen4 的接口能力。实际还需考虑码率峰值、封装和其他写入负载,但录制场景更应关注稳定性、长时间延迟和异常断电处理。
七、这次测试的结论
| 层次 | 可能的限制 | 验证方法 |
|---|---|---|
| PCIe 链路 | 代际、Lane 数、链路错误 | lspci、sysfs、内核日志 |
| 主机平台 | 功耗模式、DMA、内存路径、IOMMU | 控制变量、平台统计、重复对比 |
| SSD 内部 | NAND、pSLC、主控、温度 | 持续 fio、SMART、跨平台测试 |
目前确认的是:此前测试记录显示 Gen5 x4 链路下读取可达约 14.9GB/s,写入约 5~6GB/s,并且平台性能配置会明显影响写入结果。至于最终瓶颈在主机还是 SSD 内部,还需要进一步验证。

PCIe 带宽、主机数据路径和 NAND 写入能力,是三个不同的性能边界。 把它们分开分析,比只盯着一个跑分数字更有价值。
参考资料: