3、QoS基础概念:服务质量定义、延迟与带宽需求、QoS等级划分
好,我们进入第三章。这一章聊的是QoS的基础概念。
说实话,QoS这个词在芯片设计圈里被用得太泛了。很多人一开口就是“我们要做QoS”,但真要问起“你到底要保障什么?”,往往就说不清了。我个人习惯是,先把概念掰扯清楚,再谈实现。
3.1 服务质量到底在定义什么?
QoS,全称Quality of Service,服务质量。说白了,就是系统对某个请求或某个数据流提供的“待遇水平”。
你想想看,一个SoC里同时跑着CPU、GPU、NPU、Display、Camera……它们都在抢内存带宽。谁先拿到数据?谁可以等一等?这就是QoS要管的事。
我遇到过这样一个项目:一个AI加速器在跑推理任务,结果因为显示控制器抢走了太多带宽,导致推理延迟从5ms飙到了50ms。客户当场就炸了。后来我们加了QoS机制,把显示控制器的优先级降了一档,问题就解决了。
所以,QoS的核心定义可以归纳为三点:
- 可预测性:请求的响应时间是可预期的,不是随机的。
- 公平性:不同主设备之间,按照约定的规则分配资源。
- 隔离性:一个主设备的异常行为,不应该拖垮其他设备。
核心观点:QoS不是“让所有设备都快”,而是“让关键设备在关键时刻不掉链子”。
3.2 延迟与带宽需求——两个不同的维度
很多工程师容易把延迟和带宽混为一谈。其实它们是两个完全不同的维度。
延迟(Latency):从发起请求到收到响应的时间。单位通常是ns或us。
带宽(Bandwidth):单位时间内能传输的数据量。单位是GB/s或Gbps。
我举个例子你就明白了:
- CPU的Cache Miss请求:数据量很小(64字节),但要求极低的延迟(几十ns)。它受不了等。
- GPU的帧缓冲写入:数据量很大(几MB),但可以容忍一定的延迟(几十us)。它要的是带宽。
我曾经在一个项目中,把CPU的延迟从100ns优化到了80ns,性能提升了15%。但同样的优化手段用在GPU上,几乎没效果。为什么?因为GPU的瓶颈在带宽,不在延迟。
所以,做QoS设计时,你得先搞清楚:你的主设备是延迟敏感型,还是带宽敏感型?
| 主设备类型 | 典型代表 | 核心需求 | QoS策略倾向 |
|---|---|---|---|
| 延迟敏感型 | CPU、实时控制器 | 低延迟、可预测 | 高优先级、抢占式 |
| 带宽敏感型 | GPU、NPU、Display | 高吞吐、持续流 | 带宽预留、Burst控制 |
| 混合型 | Video Codec、DMA | 两者兼顾 | 动态调节、自适应 |
我的经验:在CMN互联中,延迟敏感型设备通常走低延迟路径(如ACE或CHB),带宽敏感型设备走高吞吐路径(如AXI Streaming)。别把两种流量混在一起,否则谁也讨不了好。
3.3 QoS等级划分——从0到15的博弈
ARM的CMN架构里,QoS等级是用一个4位的值来表示的,范围从0到15。0是最低优先级,15是最高优先级。
但这里有个坑:不是所有设备都能用15。
我记得有一次,一个团队把CPU的所有请求都标记为QoS 15。结果呢?GPU和Display完全拿不到带宽,画面直接卡死。这就是典型的“优先级滥用”。
合理的做法是:
- QoS 0-3:后台任务、低优先级批量处理。比如数据搬运、日志写入。
- QoS 4-7:普通应用。比如音频播放、普通DMA。
- QoS 8-11:重要任务。比如显示刷新、视频解码。
- QoS 12-15:关键任务。比如CPU实时中断、安全关键路径。
嗯,这里要注意:QoS等级不是越高越好。你给所有设备都设成高优先级,那高优先级就失去了意义。说白了,QoS的本质是“差异化服务”,不是“全员VIP”。
避坑指南:我曾经见过一个设计,把QoS 15用在了DMA上,结果CPU的Cache Miss请求被堵在队列里,延迟从50ns飙升到500ns。最后查出来,DMA的优先级设得太高了。记住:QoS 15是留给“系统不能等”的请求的,不是给“数据量大”的请求的。
3.4 知识体系结构图
下面这张图,是我自己总结的QoS基础概念框架。你可以把它当作本章的思维导图。
这张图把本章的三个核心知识点串起来了。你从“服务质量定义”出发,理解“延迟与带宽需求”的差异,最后落到“QoS等级划分”的具体实现上。这是一个从抽象到具体的过程。
3.5 小结
这一章我们聊了三个东西:
- QoS的本质是“差异化服务”,不是让所有设备都快。
- 延迟和带宽是两个不同的维度,设计策略完全不同。
- QoS等级从0到15,但别滥用高优先级。
我个人觉得,理解QoS的关键不在于记住那些数字,而在于建立起“按需分配”的思维。你设计的每一个QoS策略,本质上都是在回答一个问题:当资源不够时,谁先得到服务?
下一章,我们会深入CMN的QoS机制,看看硬件层面是怎么实现这些策略的。