TSN 中的 CBS(Credit-Based Shaper)功能详解
TSN 中的 CBS(Credit-Based Shaper)功能详解及其在 Linux tc
下的应用
时间敏感网络(Time-Sensitive Networking, TSN) 是为满足工业自动化、音视频传输、汽车电子等场景对以太网实时性和确定性需求而设计的一系列标准。Credit-Based Shaper (CBS) 是 TSN 标准(IEEE 802.1Qav)中非常关键的流量整形机制,主要用于保证音视频流或其他高优先级流量的带宽和延迟要求。
本文将详细介绍 CBS 的原理、参数含义,并结合 Linux tc
命令行工具的配置示例,帮助你理解和实践 CBS 的实际应用。
一、CBS(Credit-Based Shaper)原理简介
CBS 的作用:
- 限制某些优先级(通常是 AVB/TSN 流)流量的发送速率,防止其占用过多带宽,影响其他流量。
- 保障高优先级流量的带宽和延迟要求。
核心机制:
CBS 通过“信用分(Credit)”机制动态决定什么时候允许发送高优先级数据帧、什么时候暂停。其主要参数包括:
- idleslope:信用增加速率(发送空闲时积累信用),即允许发送的最大带宽(bps)。
- sendslope:信用消耗速率(发送数据时减少信用),一般为负值。
- hicredit:信用上限,表示信用最多可以积累到多少。
- locredit:信用下限,表示信用最低可以减少到多少。
- offload:是否启用硬件 offload。
基本原理举例:
- 当高优先级队列空闲时,信用以
idleslope
速率增加。 - 一旦有数据需要发送,信用以
sendslope
速率减少。 - 只有当信用大于等于0时,队列才允许发送数据包,否则暂停。
- 通过这种机制,可以实现对流量的平滑整形,既满足带宽需求,又不会挤占低优先级流量。
二、Linux tc
配置 CBS 实践
在 Linux 中,CBS 可以通过 tc
(traffic control)工具进行配置,结合多队列优先级调度(mqprio
)实现对不同队列的流量分别整形。
1. 配置多队列优先级调度(mqprio)
tc qdisc add dev eth0 parent root handle 6666 mqprio \num_tc 2 \map 0 1 \queues 1@0 1@1 \hw 0
参数解释:
dev eth0
:操作的网卡接口。parent root handle 6666
:根 qdisc 的句柄为 6666。mqprio
:多队列优先调度器(Multi-Queue Priority Qdisc)。num_tc 2
:配置 2 个 Traffic Class(TC),即2个优先级。map 0 1
:将 skb->priority=0 映射到 TC0,skb->priority=1 映射到 TC1。queues 1@0 1@1
:TC0 对应队列0,TC1 对应队列1(每个 TC 分配1个硬件队列)。hw 0
:使用软件调度。
此配置后,eth0 网卡下挂载了 2 个优先级队列,TC1 通常用于高优先级、实时流量,TC0 用于普通流量。
2. 在 TC1(高优先级队列)上绑定 CBS
tc qdisc replace dev eth0 parent 6666:2 cbs \idleslope 98688 sendslope -901312 hicredit 153 locredit -1389 \offload 0
参数解释:
parent 6666:2
:将 CBS 挂载到 TC1(即 mqprio 的第 2 个 TC)。cbs
:指定信用整形器。idleslope 98688
:空闲时信用增加速率为 98,688 bps(可根据带宽需求调整)。sendslope -901312
:发送时信用消耗速率为 -901,312 bps(通常为负值,等于 idleslope - 线速)。hicredit 153
:信用最大值。locredit -1389
:信用最小值。offload 0
:不启用硬件 offload,由内核软件实现 CBS。
作用:
- 该 CBS 配置保证 TC1 队列(高优先级流量)不会长时间占用带宽,防止影响低优先级队列。
- 通过合理设置 idleslope、sendslope、hicredit、locredit,可以细粒度控制高优先级流的带宽和突发性,确保实时流量的服务质量。
三、CBS 参数调优建议
- idleslope:建议设置为高优先级流量实际需要的带宽。例如,若 AVB 流量要求 100Kbps,可设为 100,000。
- sendslope:通常为 idleslope - 链路速率。例如千兆网卡(1Gbps),则 sendslope = 100,000 - 1,000,000,000 = -999,900,000。
- hicredit/locredit:影响突发带宽和延迟,通常根据最大帧长度、安全需求等计算。
- offload:如网卡硬件支持 CBS,建议开启(
offload 1
),否则用软件实现。
CBS(Credit-Based Shaper)的四个核心参数:idleslope、sendslope、hicredit、locredit,直接影响流量的带宽保证和延迟性能。它们的计算方法和含义如下:
1. idleslope(空闲斜率)
- 定义:CBS空闲时信用增加的速率,等价于允许的最大带宽,单位为bps。
- 计算方法:
- 一般直接设置为该队列期望保证的带宽。
- 公式:
idleslope = 流量类的保证带宽(bps)
- 例如,若希望为该队列保证100Mbps,则idleslope = 100,000,000。
2. sendslope(发送斜率)
- 定义:CBS发送数据时信用减少的速率,单位为bps,通常为负值。
- 计算方法:
- sendslope = idleslope - portTransmitRate
- portTransmitRate为物理端口的总速率(如1000Mbps = 1,000,000,000bps)。
- 公式:
sendslope = idleslope - 端口速率
- 例如,端口为1Gbps,idleslope为100Mbps,则sendslope = 100,000,000 - 1,000,000,000 = -900,000,000。
3. hicredit(信用上限)
- 定义:信用值能积累的最大正值,防止信用无限累积导致突发。
- 计算方法:
- hicredit 反映了流量突发时,最多允许“借用”多少信用。
- 一般与最大帧长度和端口速率有关。IEEE 802.1Qav标准推荐:
其中,MaxFrameSize为最大传输帧长度(以字节为单位,通常为1518字节或更大),portTransmitRate和idleslope单位一致,需注意字节与比特转换(1字节=8比特)。hicredit = ceil(MaxFrameSize * portTransmitRate / idleslope)
- 例如:
- MaxFrameSize = 1522字节(含VLAN),即1522*8=12176比特
- portTransmitRate = 1,000,000,000bps
- idleslope = 100,000,000bps
- hicredit = ceil(12176 * 1,000,000,000 / 100,000,000) = ceil(12176000000 / 100,000,000) = ceil(121.76) = 122
4. locredit(信用下限)
- 定义:信用值能减少到的最小负值,防止过度消费信用。
- 计算方法:
- locredit 表征最大可“透支”额度。与最大帧长度相关,标准推荐:
或有时简化为:locredit = -ceil(MaxFrameSize * (portTransmitRate - idleslope) / portTransmitRate)
locredit = -ceil(MaxFrameSize)
- 以标准推荐为例:
- MaxFrameSize = 1522字节 = 12176比特
- portTransmitRate = 1,000,000,000bps
- idleslope = 100,000,000bps
- locredit = -ceil(12176 * (1,000,000,000 - 100,000,000) / 1,000,000,000)
- = -ceil(12176 * 0.9) = -ceil(10958.4) = -10959
- locredit 表征最大可“透支”额度。与最大帧长度相关,标准推荐:
5. 参数设置示例
假设端口速率为1Gbps,最大帧长度1522字节,保证带宽100Mbps:
- idleslope = 100,000,000
- sendslope = 100,000,000 - 1,000,000,000 = -900,000,000
- hicredit = ceil(12176 * 1,000,000,000 / 100,000,000) = 122
- locredit = -ceil(12176 * (1,000,000,000 - 100,000,000) / 1,000,000,000) = -10959
6. 实际应用注意事项
- MaxFrameSize 取决于网络配置,建议按实际最大帧(含VLAN tag等)设置。
- idleslope 不宜超过端口速率的75%,以防冲突。
- 多队列时,需为每个CBS队列分别计算参数,且所有idleslope之和不应超过端口速率。
如需进一步的参数计算案例或配置实例,可补充说明。
四、总结
CBS(Credit-Based Shaper)是 TSN 网络中保障高优先级流量实时性和带宽的关键技术。通过 Linux tc
工具结合 mqprio
和 cbs
,可以灵活地在多队列以太网设备上实现 TSN 的流量整形与控制。合理配置 CBS 参数,不仅能保证关键流量的服务质量,还可以防止对普通流量的影响,是构建工业级、确定性以太网的基础。
参考资料:
- IEEE 802.1Qav 标准
- Linux man page: tc-cbs(8)
- Linux man page: tc-mqprio(8)
-
- IEEE 802.1Qav-2009 标准
- Linux tc-cbs官方文档
- TSN CBS参数详解