最近给家里的小主机挂了个尿袋,是绿联的 USB 3.2 外接硬盘盒,RTL9210 芯片(虽然 UASP 兼容性差,但通过折腾还是支持上了...),所以想测试下性能咋样,顺便连带两个用了半年的同型号 NVME 盘一起测了叭,作为对比记录在下面。

准备

平台:Arch Linux (6.17.1-arch1-1)

测试工具:fio

硬盘:均为 Samsung SSD 990 PRO with Heatsink 1TB

测试命令:

# 顺序读
fio --name=seqread_usb --filename=/foobar/testfile --size=1G --rw=read --bs=1M --runtime=30 --direct=1 --group_reporting

# 顺序写
fio --name=seqwrite_usb --filename=/foobar/testfile --size=1G --rw=write --bs=1M --runtime=30 --direct=1 --group_reporting

# 随机读
fio --name=randread_usb --filename=/foobar/testfile --size=1G --rw=randread --bs=4k --iodepth=32 --runtime=30 --direct=1 --group_reporting

# 随机写
fio --name=randwrite_usb --filename=/foobar/testfile --size=1G --rw=randwrite --bs=4k --iodepth=32 --runtime=30 --direct=1 --group_reporting

结果

性能对比表格

测试类型

指标

USB 3.2 (/data)

NVMe SSD 1 (/etc)

NVMe SSD 2 (/home)

NVMe相对USB提升

顺序读

带宽 (MB/s)

755

2463

2381

3.2倍 ↑

(1MB块)

延迟 (μs)

1387

425

440

68% ↓

IOPS

720

2348

2270

3.2倍 ↑

顺序写

带宽 (MB/s)

406

836

843

2.1倍 ↑

(1MB块)

延迟 (μs)

2578

1249

1237

52% ↓

IOPS

386

797

804

2.1倍 ↑

随机读

IOPS (4K块)

8,180

16,600

18,200

1.2倍 ↑

(队列深度32)

延迟 (μs)

122

60

55

55% ↓

带宽 (MB/s)

33.5

67.9

74.6

2.2倍 ↑

随机写

IOPS (4K块)

12,800

41,200

43,200

3.4倍 ↑

(队列深度32)

延迟 (μs)

77

24

23

68% ↓

带宽 (MB/s)

52.6

169

177

3.2倍 ↑

结论

  1. 带宽性能:

    • 这个 NVMe SSD 在顺序读写上可达 2.4GB/s,是USB 3.2外接硬盘(755MB/s)的 3倍以上

    • 随机读写带宽差距更显著,NVMe可达USB的 3.2倍(如169MB/s vs 52.6MB/s)。

  2. 延迟优势:

    • NVMe 平均延迟比 USB 低 52%-68%(如顺序写:1237μs vs 2578μs)。

    • 在随机操作中,NVMe 的延迟优势尤为明显(如随机写:23μs vs 77μs)。

  3. IOPS表现:

    • NVMe 的随机写 IOPS 高达 43,200,是 USB(12,800)的 3.4 倍

    • 即使在小文件场景下(4K 块),NVMe 仍能保持显著优势。

  4. USB外接硬盘瓶颈:

    • USB 的协议开销导致顺序读写不对称(读 755MB/s vs 写 406MB/s)。

    • 在高队列深度(QD32)时无法发挥潜力(受限于UAS 协议同步 I/O)。

💡 本质区别:
NVMe 通过 PCIe 直连 CPU,而 USB 依赖主机控制器转换协议(SCSI 命令集),导致额外的协议转换延迟和带宽限制。
NVMe 的并行队列机制(支持 64K 队列深度)使其在高并发场景下性能呈指数级优势。