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

tc qdisc参数详解


指令`

tc qdisc add dev eth0 parent root handle 6666 mqprio
num_tc 3
map 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2
queues 1@0 1@1 2@2
hw 0
以下是对命令中每个参数的详细解释和使用规则:


1. num_tc 3
  • 作用:定义流量类别(Traffic Class, TC)的数量。
  • 规则
    • 指定网络流量分为 3 个流量类别(TC0、TC1、TC2)。
    • 流量类别数量必须与后续 mapqueues 参数一致。
  • 示例num_tc 3 表示将流量划分为 3 个优先级类别。

2. map 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2
  • 作用:将 Linux 网络优先级(0-15) 映射到流量类别(TC)。
  • 规则
    • 包含 16 个数值,依次对应优先级 0 到 15。
    • 每个数值表示映射到的 TC 编号(0-2,因 num_tc=3)。
  • 示例解析
    优先级 0 → TC2
    优先级 1 → TC2
    优先级 2 → TC1
    优先级 3 → TC0
    优先级 4-15 → TC2
    
    • 结果
      • 优先级 3 的流量(最高优先级)映射到 TC0。
      • 优先级 2 的流量映射到 TC1。
      • 其他优先级(包括默认)映射到 TC2(尽力而为流量)。

3. queues 1@0 1@1 2@2
  • 作用:为每个流量类别分配硬件队列。
  • 规则
    • 格式为 <队列数量>@<起始队列索引>
    • 流量类别顺序为 TC0、TC1、TC2。
  • 示例解析
    TC0 → 1@0:使用 1 个队列,起始索引为 0(队列0)。
    TC1 → 1@1:使用 1 个队列,起始索引为 1(队列1)。
    TC2 → 2@2:使用 2 个队列,起始索引为 2(队列2 和 3)。
    
    • 结果
      • 总共有 4 个硬件队列(队列0、1、2、3)。
      • TC0(高优先级)使用队列0,TC1(中优先级)使用队列1,TC2(低优先级)使用队列2和3。

4. hw 0
  • 作用:控制是否启用硬件卸载。
  • 规则
    • 0:禁用硬件卸载(纯软件处理)。
    • 1:启用硬件卸载(需网卡驱动和硬件支持)。
  • 示例hw 0 表示所有队列管理由内核处理,不依赖硬件加速。

配置验证与使用规则

  1. 硬件队列支持

    • 确保网卡支持足够的硬件队列(本例需要至少 4 个 TX 队列)。
    • 检查队列数量:ethtool -l eth0
  2. 流量分类

    • 使用 tc filter 规则将流量按优先级分类到对应 TC。
    • 示例:将 VLAN PCP=3 的流量映射到 TC0:
      tc filter add dev eth0 protocol 802.1q parent root \flower skip_sw vlan_prio 3 \action skbedit priority 3
      
  3. 启用硬件卸载(可选)

    • 若网卡支持(如 Intel I210),设置 hw 1 并验证驱动支持:
      ethtool -k eth0 | grep hw-tc-offload
      
  4. 错误排查

    • map 参数越界:TC 编号需小于 num_tc 值。
    • 队列索引越界:起始索引 + 队列数 ≤ 硬件总队列数。

示例场景

  • 高优先级流量(TC0,队列0):
    • 音视频流(VLAN PCP=3)通过队列0发送,保障低延迟。
  • 中优先级流量(TC1,队列1):
    • 控制信令(VLAN PCP=2)通过队列1发送。
  • 低优先级流量(TC2,队列2/3):
    • 普通数据(默认优先级)通过队列2/3发送,允许带宽竞争。

总结

通过 MQPRIO 的配置,可以实现:

  • 流量分类:基于优先级将流量映射到不同硬件队列。
  • 资源隔离:高优先级流量独占专用队列,避免低优先级流量干扰。
  • 扩展性:支持后续为不同队列配置 CBS(带宽整形)或 ETF(时间门控)。

此配置适用于需要 QoS 保障的实时网络(如工业控制、车载网络)。

http://www.xdnf.cn/news/431731.html

相关文章:

  • 智慧校园场景下iVX 研发基座应用实践与行业适配研究
  • Milvus(21):过滤搜索、范围搜索、分组搜索
  • python面试实战经验分享
  • Python 实战:如何智能修改字典中的实体值?
  • 从 Vue3 回望 Vue2:响应式的内核革命
  • 集成设备管理(IDM)
  • Android组件权威解析:Activity与Fragment的深度探索与实战
  • 双种群进化算法:动态约束处理与资源分配解决约束多目标优化问题
  • AI模拟了一场5亿年的进化
  • Python Django基于模板的药品名称识别系统【附源码、文档说明】
  • 支付宝小程序开发指南
  • servlet-api
  • 转发多台px4仿真UDP数据到地面站
  • R²AIN SUITE:AI+文档切片,重塑知识管理新标杆
  • Sails.js 知识框架整理
  • 超声波传感器模块
  • 消息~组件(群聊类型)ConcurrentHashMap发送
  • 自适应稀疏核卷积网络:一种高效灵活的图像处理方案
  • Java自定义线程池:从原理到高性能实践
  • NY164NY165美光固态闪存NY166NY172
  • 医疗设备EMC测试为什么推荐GRJ1080B系列滤波器?
  • 工作常用的git命令
  • APS排程系统(Advanced Planning and Scheduling,高级计划与排程系统)
  • U-BOOT
  • talk-centos6之间实现
  • 记忆化回溯搜索-@cache --> 动态规划
  • DevExpressWinForms-布局容器之GroupControl
  • MongoDB+Nginx高可用技术方案
  • springboot3+vue3融合项目实战-大事件文章管理系统-新增文章分类
  • 物理:从人体组成角度能否说明基本粒子的差异性以及组织结构的可预设性?