当前位置: 首页 > news >正文

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标准推荐:
      hicredit = ceil(MaxFrameSize * portTransmitRate / idleslope)
      
      其中,MaxFrameSize为最大传输帧长度(以字节为单位,通常为1518字节或更大),portTransmitRate和idleslope单位一致,需注意字节与比特转换(1字节=8比特)。
    • 例如:
      • 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

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 工具结合 mqpriocbs,可以灵活地在多队列以太网设备上实现 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参数详解
http://www.lqws.cn/news/99217.html

相关文章:

  • 低谷才是出成绩
  • C#对象扩展方法:提升对象操作的灵活性与效率
  • 【Web应用】若依框架:基础篇13 源码阅读-前端代码分析
  • 物联网数据归档方案选择分析
  • 24.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--认证微服务
  • 华为盘古 Ultra MoE 模型:国产 AI 的技术突破与行业影响
  • 更新已打包好的 Spring Boot JAR 文件中的 class 文件
  • Vue.js教学第十八章:Vue 与后端交互(二):Axios 拦截器与高级应用
  • 从汇编的角度揭秘C++引用,豁然开朗
  • 硬件工程师笔记——555定时器应用Multisim电路仿真实验汇总
  • CRM管理软件的数据可视化功能使用技巧:让数据驱动决策
  • SpringBoot 之 JWT
  • 8.RV1126-OPENCV 视频中添加LOGO
  • Web后端快速入门(Maven)
  • OSCP备战-BSides-Vancouver-2018-Workshop靶机详细步骤
  • Vert.x学习笔记-Verticle原理解析
  • Java数据校验:确保数据完整性和正确性
  • Modbus转Ethernet IP赋能挤出吹塑机智能监控
  • ChatGPT实战嵌入式开发应用指南与代码演示
  • 笔记本/台式C盘扩容:删除、压缩、跨分区与重分配—「小白教程」
  • 调用.net DLL让CANoe自动识别串口号
  • [Java恶补day14] 56. 合并区间
  • SQL 筛选出在表1但不在表2中的数据
  • Express 集成Sequelize+Sqlite3 默认开启WAL 进程间通信 Conf 打包成可执行 exe 文件
  • 【Redis】set 类型
  • qt控制台程序与qt窗口程序在读取数据库中文字段的差异!!巨坑
  • MySQL 如何判断某个表中是否存在某个字段
  • 基于PostGIS的GeoTools执行原生SQL查询制图实践-以贵州省行政区划及地级市驻地为例
  • React从基础入门到高级实战:React 高级主题 - React设计模式:提升代码架构的艺术
  • 结构性设计模式之Composite(组合)