4. 性能指标定义
在 PCIe 读写性能基准测试中,最容易出现的错误不是工具用错,而是指标口径混淆。有人把带宽当成吞吐量,有人用 IOPS 比较不同块大小的设备,有人只看平均值忽略尾延迟,最终得出“A 卡比 B 卡快三倍”的错误结论。本节把七个核心指标拆开定义,并说明它们之间的换算关系与测试约束。
一、七个指标的精确定义
带宽(Bandwidth)指 PCIe 链路在物理层可提供的理论最大数据传输能力,由链路宽度(x1/x4/x8/x16)和速率(Gen1~Gen5)共同决定。例如 PCIe 4.0 x16 的单向理论带宽约为 31.5 GB/s,这是编码后的线路速率,不是应用层可用速率。
吞吐量(Throughput)指单位时间内实际成功传输的有效数据量,通常以 GB/s 或 MB/s 表示。吞吐量永远小于等于带宽,差距来自协议开销、TLP 头、DLLP、ACK/NAK、流控信用等待以及主机侧瓶颈。
IOPS(Input/Output Operations Per Second)指每秒完成的 I/O 请求次数,强调“次数”而非“字节数”。IOPS 必须绑定块大小才有意义:4KB 随机读 100 万 IOPS 与 128KB 顺序读 100 万 IOPS 是完全不同的负载。
延迟(Latency)指一个请求从发出到收到完成响应的时间,单位通常是微秒或纳秒。延迟要区分平均值、P50、P99、P99.9 和最大值,尾延迟往往比平均值更能反映真实体验。
队列深度(Queue Depth, QD)指同时未完成的 I/O 请求数量。QD=1 是串行模型,延迟≈服务时间;QD 增大后 IOPS 上升但延迟也上升,直到设备内部并行度饱和。
有效载荷(Payload)指 TLP 中真正承载用户数据的字节数,PCIe 最大有效载荷由 MPS(Max Payload Size)决定,常见 128B、256B、512B。
开销(Overhead)包括 TLP 头、ECRC、序列号、DLLP、物理层编码以及 ACK 等非用户数据部分。开销直接压缩有效吞吐。
二、指标之间的换算与约束
七个指标不是孤立的,它们通过两条基本公式耦合:
吞吐量 = IOPS × 块大小
IOPS = 队列深度 ÷ 平均延迟 (Little's Law)
示例:QD=32,平均延迟 80μs
IOPS = 32 / 0.00008 = 400,000 IOPS
若块大小 4KB,则吞吐量 = 400,000 × 4KB ≈ 1.6 GB/s
这条公式解释了为什么“提高 QD 能提升 IOPS”:在延迟不变的前提下,并发越多,单位时间完成的请求越多。但延迟不会一直不变,当设备内部队列饱和后,继续加 QD 只会让延迟线性上升,IOPS 不再增长,这就是饱和点。
三、有效载荷与开销对吞吐量的影响
PCIe 传输的不是裸数据,而是 TLP 包。一个 TLP 由头、可选 ECRC、有效载荷、LCRC、序列号组成,再经过物理层 128b/130b 编码。以 256B MPS 为例,有效载荷占比约 90.8%;若 MPS 只有 128B,占比降到约 82%。这意味着同样链路带宽下,MPS 设置不同,实测吞吐量可能相差 8% 以上。
| 指标 | 单位 | 决定因素 | 测试注意点 |
|---|---|---|---|
| 带宽 | GB/s | Gen × Lane | 理论值,不可直接当实测目标 |
| 吞吐量 | GB/s | 有效数据 / 时间 | 需说明块大小与读写方向 |
| IOPS | 次/秒 | QD、延迟、块大小 | 必须绑定块大小与随机/顺序 |
| 延迟 | μs / ns | 路径、队列、设备处理 | 报告 P50/P99/P99.9,不只看均值 |
| 队列深度 | 个 | 测试工具配置 | 需扫描 QD 曲线找饱和点 |
| 有效载荷 | Byte | MPS 设置 | 确认两端设备支持的最大 MPS |
| 开销 | Byte / % | TLP 头、编码、ACK | 用有效载荷占比评估效率 |
四、案例:同一设备为何测出三种“带宽”
某 NVMe SSD 在 PCIe 4.0 x4 平台上测试,三份报告分别给出 6.8 GB/s、5.9 GB/s 和 3.2 GB/s。排查后发现:
- 6.8 GB/s 是线路带宽,由 Gen4 x4 计算得出,属于理论值;
- 5.9 GB/s 是顺序读吞吐量,块大小 128KB,QD=32,接近设备上限;
- 3.2 GB/s 是4KB 随机读吞吐量,IOPS 约 78 万,受随机访问和开销影响明显下降。
三个数字都没有错,错的是把它们放在同一张对比表里。基准测试报告必须同时标注:链路配置、块大小、读写比例、队列深度、随机/顺序、有效载荷设置。
五、复盘:建立指标口径清单
每次测试前先固定以下口径,才能保证数据可复现、可对比:
- 链路:Gen 速率、Lane 宽度、MPS 设置;
- 负载:块大小、读写比例、随机/顺序、QD 扫描范围;
- 指标:吞吐量、IOPS、平均延迟、P99 延迟、有效载荷占比;
- 环境:CPU 主频、内存带宽、驱动版本、是否开启 IOMMU;
- 报告:明确区分理论带宽、实测吞吐量与有效吞吐。
把这七个指标的定义和换算关系固化下来,后续的 fio、perf、PCIe 协议分析才有统一的比较基准,也才能从“跑出一个数”升级为“解释这个数为什么是这样”。