3、吞吐测试基础:吞吐量定义、测试指标、常用测试工具与场景设计

在 DMA 传输优化中,吞吐测试是判断优化是否有效的核心手段。很多工程师在调优时只关注“传输完成时间”或“CPU 占用率”,却忽略了吞吐量本身是一个受多因素耦合影响的系统指标。理解吞吐量的定义、掌握正确的测试指标、选择合适的工具并设计贴近真实业务的场景,是后续所有 DMA 优化工作的前提。

一、吞吐量的定义与计算模型

吞吐量(Throughput)指单位时间内系统成功传输的有效数据量,通常用 MB/s 或 GB/s 表示。在 DMA 场景中,必须区分三个容易混淆的概念:

  • 理论峰值带宽:由总线位宽和时钟频率决定,例如 PCIe Gen3 x8 理论带宽约 7.877 GB/s。
  • 有效吞吐量:扣除协议开销、握手、重传后实际传输的用户数据速率。
  • 应用层吞吐量:经过驱动、文件系统、内存拷贝后,应用真正拿到的数据速率。

三者之间往往存在数倍差距。DMA 优化的目标,就是缩小“应用层吞吐量”与“理论峰值带宽”之间的差距。其基本计算关系为:

有效吞吐量 = 传输数据总量 / 传输总耗时
传输总耗时 = 启动开销 + 数据搬运时间 + 中断/完成处理时间
数据搬运时间 = 数据量 / 实际总线带宽
关键认知:当数据量较小时,启动开销和中断处理时间占比高,吞吐量上不去;当数据量足够大时,吞吐量趋近于总线实际带宽。因此测试必须覆盖不同数据块大小。

二、吞吐测试的核心指标

仅看一个“MB/s”数字远远不够。完整的吞吐测试应同时采集以下指标,才能定位瓶颈:

指标 含义 典型观测方式
平均吞吐量 总数据量除以总时间 测试工具汇总输出
瞬时吞吐量 按时间窗口统计的速率波动 perf、iostat 采样
传输延迟 单次 DMA 从启动到完成的时间 时间戳打点、ftrace
CPU 占用率 CPU 参与数据搬运的比例 top、pidstat
中断次数 单位时间内 DMA 完成中断数量 /proc/interrupts
总线利用率 实际带宽占理论带宽的比例 硬件性能计数器

其中,CPU 占用率与吞吐量的比值最能反映 DMA 效率。理想情况下,DMA 传输应让 CPU 占用率接近零,吞吐量接近总线带宽。

三、常用测试工具与命令

不同层级需要不同工具。以下命令可直接用于 DMA 吞吐测试环境:

# 1. 内存到内存 DMA 吞吐(基于 dmaengine 的 dmatest)
echo 1 > /sys/module/dmatest/parameters/run
cat /sys/module/dmatest/parameters/run

# 2. 块设备顺序读吞吐
fio --name=seqread --rw=read --bs=1M --size=2G --direct=1 --iodepth=32

# 3. 网络 DMA 吞吐(PCIe 网卡)
iperf3 -c 192.168.1.100 -t 30 -P 4

# 4. 实时观测中断与 CPU
watch -n 1 'cat /proc/interrupts | grep dma'
pidstat -u 1
fio 的 --direct=1 绕过页缓存,能真实反映 DMA 路径性能;--iodepth 控制并发深度,用于测试 DMA 描述符队列的承载能力。

四、场景设计:从理想模型到真实业务

吞吐测试场景必须分层设计,否则容易得出“实验室很好、上线就崩”的结论。建议按以下四类场景递进:

  1. 理想场景:大块连续数据、单通道、无竞争,用于测量 DMA 上限。
  2. 分块场景:按 4KB、64KB、1MB 等不同块大小测试,找出吞吐量拐点。
  3. 并发场景:多通道 DMA 同时工作,观察总线仲裁与带宽分配。
  4. 混合场景:DMA 传输与 CPU 计算、网络中断、存储 IO 同时发生,模拟真实负载。

下面这张图展示了吞吐测试场景的分层结构与关键观测点:

吞吐测试场景分层与观测点 ① 理想场景 大块连续 · 单通道 · 无竞争 观测:峰值吞吐 / 总线利用率 ② 分块场景 4KB / 64KB / 1MB 块大小扫描 观测:吞吐拐点 / 启动开销占比 ③ 并发场景 多通道 DMA 同时工作 · 总线仲裁 观测:带宽分配 / 通道公平性 ④ 混合场景 DMA + CPU 计算 + 网络中断 + 存储 IO 观测:尾延迟 / CPU 占用 / 中断风暴

五、常见误区与复盘要点

误区一:只测大块数据,忽略小块。小块传输时启动开销和中断处理占主导,吞吐量可能只有峰值的 10%。
误区二:用带缓存的读写测 DMA。页缓存会掩盖真实 DMA 路径,必须使用 O_DIRECT 或 --direct=1。
误区三:忽略中断合并。中断次数过多会导致 CPU 频繁上下文切换,吞吐量反而下降。
误区四:单次测试下结论。DMA 吞吐受温度、频率调节、总线竞争影响,需多次采样取稳定值。

复盘时建议记录以下清单:测试块大小、并发深度、CPU 占用率、中断次数、平均吞吐量与瞬时吞吐量波动范围。只有把这些数据放在一起对比,才能判断优化是真正提升了 DMA 效率,还是仅仅把开销转移到了其他环节。