4. 高速数据搬运的带宽与延迟建模

在星载高速数据搬运系统中,DMA 的性能不能只看“能不能搬”,而要看“搬得多快、等多久、卡在哪里”。带宽与延迟建模的目的,是把一条从源端到目的端的搬运链路拆成可计算、可观测、可优化的参数体系。只有把理论带宽、有效带宽、延迟组成和传输时间模型统一起来,才能判断瓶颈究竟在接口位宽、时钟频率、总线仲裁、存储器访问、DMA 描述符调度,还是在后端处理能力上。

一、理论带宽:先算“上限”,再谈“实际”

理论带宽是链路在理想条件下单位时间能传输的最大数据量,通常由数据位宽和时钟频率决定。对于同步接口,单方向理论带宽可写为:

B_theory = W × f_clk × η_encoding

其中,W 为数据位宽(bit),f_clk 为接口时钟频率(Hz),η_encoding 为编码效率。若采用 8b/10b 编码,η_encoding = 0.8;若为 64b/66b,η_encoding ≈ 0.9697;若为无编码并行源同步接口,η_encoding = 1。例如,一个 32 bit 位宽、200 MHz 时钟、无编码的源同步接口,理论带宽为 32 × 200 M = 6.4 Gbit/s,即 800 MB/s。若换成 8b/10b 编码,则有效编码带宽降为 640 MB/s。这里必须强调:理论带宽是链路物理上限,不是 DMA 实际能搬到的速率。

二、有效带宽:扣除协议开销、仲裁开销与访问冲突

有效带宽是 DMA 在真实系统中持续搬运时能达到的带宽。它通常低于理论带宽,原因包括:总线协议握手周期、仲裁切换、地址/命令开销、存储器刷新与行切换、跨时钟域 FIFO 反压、DMA 描述符读取、以及多主设备竞争。工程上常用“带宽效率”来建模:

B_eff = B_theory × η_protocol × η_arbitration × η_memory × η_dma

其中,η_protocol 表示协议效率,η_arbitration 表示仲裁效率,η_memory 表示存储器访问效率,η_dma 表示 DMA 自身调度效率。以一条 800 MB/s 理论带宽的链路为例,若协议效率 0.85、仲裁效率 0.9、存储器效率 0.75、DMA 调度效率 0.9,则有效带宽约为 800 × 0.85 × 0.9 × 0.75 × 0.9 ≈ 413 MB/s。这个数字才是系统设计时应该拿来做预算的带宽。若只按 800 MB/s 设计后端处理能力,系统一定会在真实数据流下出现溢出或丢帧。

三、延迟组成:从“发起”到“完成”的每一段等待

延迟关注的是“一次搬运从请求到完成需要多久”。对于 DMA 传输,端到端延迟通常由以下部分组成:

  • 请求发起延迟:CPU 写 DMA 寄存器、更新描述符、触发通道的软件开销。
  • 仲裁与授权延迟:DMA 向总线发起请求后,等待总线仲裁器授权的周期数。
  • 地址与命令传输延迟:发送源地址、目的地址、长度、控制信息的时间。
  • 数据搬运延迟:真正传输 N 字节数据所需的时间,等于 N / B_eff。
  • 存储器访问延迟:源端读出和目的端写入的访问等待,包括行激活、列选通、刷新冲突。
  • 完成与中断延迟:DMA 写完成状态、触发中断、CPU 响应中断的时间。

若把一次搬运的总延迟记为 T_total,则:

T_total = T_sw + T_arb + T_cmd + N / B_eff + T_mem + T_irq

其中,T_sw 为软件发起开销,T_arb 为仲裁等待,T_cmd 为命令传输,N 为搬运字节数,T_mem 为存储器访问附加等待,T_irq 为完成中断开销。对于小包搬运,T_sw、T_arb、T_cmd、T_irq 占比很高,延迟可能远大于数据搬运本身;对于大块搬运,N / B_eff 占主导,带宽成为主要矛盾。因此,优化方向必须区分“小包低延迟”和“大块高带宽”两类场景。

DMA 传输时间模型与瓶颈识别 源端 ADC / 传感器 / DDR DMA 控制器 描述符调度 / 通道仲裁 突发长度 / 位宽配置 总线 / 互连 AXI / AHB / NoC 目的端 DDR / SRAM / 处理单元 一次 DMA 搬运的延迟组成 T_sw 软件发起 T_arb 仲裁等待 T_cmd 命令传输 N / B_eff 数据搬运 T_mem 存储访问 T_irq 完成中断 t0 t_end 有效带宽效率分解 B_theory W × f × η_enc × η_protocol 协议效率 × η_arbitration 仲裁效率 × η_memory 存储效率 × η_dma DMA调度效率 = B_eff 有效带宽

四、建立 DMA 传输时间模型:从单次搬运到持续吞吐

单次搬运时间模型适合评估小包延迟,而持续吞吐模型适合评估大块数据流。对于持续搬运,若 DMA 以描述符链方式连续工作,则总时间可近似为:

T_stream = N_total / B_eff + T_setup + T_drain

其中,N_total 为总搬运字节数,T_setup 为启动和描述符预取开销,T_drain 为最后一块数据排空和完成中断开销。若描述符链足够深、启动开销被流水掩盖,则 T_stream 主要由 N_total / B_eff 决定。此时瓶颈往往不在 DMA 控制器本身,而在存储器带宽或总线仲裁。例如,DDR 理论带宽 1600 MB/s,但随机访问效率只有 0.5,则实际可用带宽约 800 MB/s;若 DMA 请求的突发长度只有 16 字节,而 DDR 最佳突发为 128 字节,则效率会进一步下降。因此,增大突发长度、提高访问连续性、减少跨行访问,是提升有效带宽最直接的手段。

五、瓶颈识别:用“时间占比”而不是“感觉”定位

识别瓶颈时,建议把一次搬运的总时间按上述延迟组成拆开,计算每一项占比。若 T_sw + T_arb + T_cmd + T_irq 占比超过 50%,说明控制开销过大,应优化描述符链、减少中断频率、使用链式 DMA 或增大单次搬运长度。若 N / B_eff 占比超过 70%,说明数据搬运本身是主要耗时,应检查总线位宽、时钟频率、突发长度和存储器访问效率。若 T_mem 占比异常高,则要检查 DDR 行冲突、刷新周期、多主设备竞争和跨时钟域 FIFO 深度。下面给出一个示例性的判断表,用于快速定位瓶颈方向:

时间项 典型占比(小包) 典型占比(大块) 优化方向
T_sw + T_irq 30% ~ 50% < 5% 链式描述符、中断合并、批量提交
T_arb + T_cmd 15% ~ 30% 5% ~ 10% 提高 DMA 优先级、增大突发、减少仲裁切换
N / B_eff 20% ~ 40% 70% ~ 85% 提高位宽/频率、优化突发长度、提升存储器效率
T_mem 5% ~ 15% 10% ~ 25% 连续地址、行缓冲友好、多 Bank 交错
建模提示:理论带宽只用于判断物理上限,有效带宽才用于系统预算。延迟模型要区分“单次搬运延迟”和“持续吞吐时间”,两者优化手段不同。瓶颈识别时,先算占比,再决定是优化控制路径还是数据路径。

六、一个可复用的计算示例

假设某星载数据搬运链路参数如下:源端为 16 bit、250 MHz 的 LVDS 接口,无编码;DMA 通过 64 bit、200 MHz 的 AXI 总线写入 DDR;DDR 理论带宽 3200 MB/s,实际连续访问效率 0.7;AXI 协议效率 0.85,仲裁效率 0.9,DMA 调度效率 0.92。先算源端理论带宽:16 × 250 M = 4 Gbit/s = 500 MB/s。再算 AXI 理论带宽:64 × 200 M = 12.8 Gbit/s = 1600 MB/s。DDR 有效带宽:3200 × 0.7 = 2240 MB/s。整条链路有效带宽受最窄环节约束,取源端 500 MB/s、AXI 有效带宽 1600 × 0.85 × 0.9 × 0.92 ≈ 1126 MB/s、DDR 有效带宽 2240 MB/s,则系统有效带宽约为 500 MB/s。若一次搬运 1 MB 数据,数据搬运时间约为 1 MB / 500 MB/s = 2 ms;若软件发起和中断开销合计 50 μs,则总延迟约 2.05 ms,控制开销占比约 2.4%,说明大块搬运时瓶颈在源端接口带宽,而不是 DMA 控制路径。若把搬运块缩小到 4 KB,则数据搬运时间约 8 μs,控制开销 50 μs,总延迟约 58 μs,控制开销占比超过 86%,此时应优先优化描述符链和中断合并,而不是继续提高接口频率。

通过上述建模,可以把“带宽够不够、延迟大不大、瓶颈在哪里”从经验判断变成可计算、可验证的工程结论。实际系统中,建议在 DMA 控制器中增加计数器,分别统计有效传输周期、仲裁等待周期、存储器等待周期和中断响应周期,用实测数据修正模型中的效率系数,使模型逐步逼近真实链路行为。