跳转至

03 互连 QoS:从平均带宽到最坏服务期限

1. 为什么带宽够,FIFO 仍会断流?

48 kHz、双声道、每声道以 4 byte 存储时,PCM 平均流量仅为 384000 B/s。但 FIFO 不能借用未来的平均带宽:一段连续的仲裁等待、DDR 刷新或电源退出延迟,就可能耗尽当前水位。

必须同时检查两个条件:长期保证的服务速率高于消费速率,以及每次最长服务间隔小于剩余 FIFO 时间。提高平均吞吐并不等于满足第二个条件。

2. 水位决定服务预算

播放端以“尚可播放的 frame 数” W 计算;录音端应使用“尚可接收的空闲 frame 数”。这里一 frame 包含所有声道,不是一个单声道 sample。假设保留 50 µs 的设计余量:

允许的服务延迟 = W / fs - 50 µs

剩余/空闲 frame 48 kHz 下原始裕量 扣除余量后的服务期限
16 333.33 µs 283.33 µs
32 666.67 µs 616.67 µs
64 1333.33 µs 1283.33 µs
128 2666.67 µs 2616.67 µs

以上是模型计算,不是实测或控制器配置建议。阈值寄存器可能使用 word、beat 或 byte;必须按 slot、声道和打包方式转换。FIFO 阈值也不能直接替换软件 ring buffer 的 period。

总服务延迟包括请求产生、跨时钟域、仲裁、内存访问和数据实际到达 FIFO 的时间。如果观测到最长间隔 700 µs,那么表中的 16/32 frame 不满足该假设下的期限;64 frame 有余量,但尚不能据此证明所有压力组合都安全。

3. QoS 能改变什么,不能保证什么?

AXI QoS 字段或 NoC 优先级的含义由互连和内存控制器实现决定。不能把某个数值、寄存器地址或“最高优先级”等同于固定纳秒响应。

  • 优先级通常影响后续仲裁,不意味着可以抢占已经接受的任意 burst。
  • outstanding 深度增大可能提高吞吐,也可能增加已排队请求造成的阻塞。
  • burst 长度受 FIFO 空间、总线效率、控制器约束共同限制,没有通用的“最多 16 samples”规则。
  • DDR 刷新、bank 冲突、读写切换、低功耗状态退出仍需计入边界。
  • 长期严格优先级可能使其他主设备饥饿;应验证整机公平性与最小带宽,而不是只观察音频。

配置必须来自目标 SoC TRM、驱动和实际有效寄存器回读;本文不提供可直接写入硬件的虚构地址。

4. 对比实验怎么做?

实验 保持不变 改变项 关键观测
空闲基线 格式、FIFO、period、CPU 策略 无压力 请求到服务延迟分布
内存竞争 同上 CPU/GPU/显示读写压力 最大间隔、低水位、XRUN
QoS 对照 同一压力输入 默认/候选 QoS 尾延迟与其他业务退化
电源对照 同一音频流 DDR/NoC 电源策略 退出延迟、功耗
长时稳定性 最差已知组合 温度、运行时长 事件计数与原始 trace

记录 p50、p99.9、最大值及样本数;最大观测值不是数学最坏上界。用 FIFO 水位/underrun 计数与互连 trace 对齐,避免把用户态调度延迟错归因于 NoC。

5. 面试复盘

先回答“哪个 FIFO、计量单位是什么、何时产生请求”,再给出服务期限和测量证据。若只有平均带宽数据,结论应是“容量足够,实时性尚未证实”,而非“总线不是瓶颈”。

继续阅读:period 开销PCM 证据链