08 TC 流量控制卸载

08 TC 流量控制卸载

源码:stmmac_tc.c
HWIF:stmmac_tc_opsdwmac510_tc_ops 等)
依赖:内核 net/schedtc flowertaprio

1. 模块职责

将 Linux Traffic Control 部分规则卸载到 DWMAC 硬件:

卸载类型 内核接口 硬件能力
cls_u32 TC_SETUP_CLSU32 Flexible RX Parser (RXP)
flower TC_SETUP_CLSFLOWER L3/L4 filter + action
CBS TC_SETUP_QDISC_CBS MTL Credit-Based Shaper
TAPRIO TC_SETUP_QDISC_TAPRIO EST (Enhanced Scheduled Traffic)
ETF TC_SETUP_QDISC_ETF 发射时间调度

成功初始化后 ndev->hw_features |= NETIF_F_HW_TC

2. 入口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
static int stmmac_setup_tc(struct net_device *dev, enum tc_setup_type type, void *type_data)
{
switch (type) {
case TC_SETUP_CLSU32:
return stmmac_tc_setup_cls_u32(priv, priv, cls);
case TC_SETUP_CLSFLOWER:
return stmmac_tc_setup_cls(priv, priv, cls);
case TC_SETUP_QDISC_CBS:
return stmmac_tc_setup_cbs(priv, priv, qopt);
case TC_SETUP_QDISC_TAPRIO:
return stmmac_tc_setup_taprio(priv, priv, qopt);
// ...
}
}

3. Flexible RX Parser (RXP)

3.1 数据结构

1
2
3
4
5
6
7
8
9
10
11
struct stmmac_tc_entry {
bool in_use;
u32 handle;
struct {
u32 match_data;
u32 match_en;
u8 dma_ch_no; // 重定向到 RX queue
u8 ok_index; // 下一规则索引
// ...
} val;
};

priv->tc_entries[] 数组,上限由 HW 决定。

3.2 cls_u32 流程

  1. tc_find_entry() 分配/查找表项
  2. tc_fill_actions() 解析 action(drop、redirect queue)
  3. stmmac_rxp_config() → mac ops 写硬件 RXP RAM

3.3 flower

匹配 L2/L3/L4 字段,支持:

  • STMMAC_FLOW_ACTION_DROP
  • 重定向到指定 RX queue(RSS 协同)

4. CBS(Credit-Based Shaper)

用于 AVB/IEEE 802.1Qav:

  • stmmac_config_cbs() 配置 idle slope、send slope、credit
  • 绑定到指定 MTL TX queue

5. TAPRIO / EST

IEEE 802.1Qbv 时间感知调度:

  1. stmmac_tc_setup_taprio() 解析 gate control list
  2. stmmac_est_configure() 写 EST 寄存器
  3. stmmac_calc_tas_basetime() 计算 cycle 基准时间(与 PTP 对齐)

需要 DWMAC 5.x + dma_cap.estsel

6. ETF

Early Transmit Feature:按 tc_etf_qopt_offload 指定发射时间,配合 TBS(Time-Based Scheduling)。

7. 初始化

1
2
3
4
stmmac_dvr_probe()
→ stmmac_tc_init(priv, priv)
→ 分配 tc_entries / flow_entries / rfs_entries
→ 默认 all-pass 规则

8. 限制与版本

特性 最低 Core
RXP cls_u32 GMAC4.10+
flower L3/L4 GMAC4 + filter 数量限制
CBS MTL AVB
TAPRIO/EST DWMAC 5.10+
TBS 5.20+ descriptor

RK3588 是否启用取决于具体 Core 版本与 CONFIG_STMMAC_FULL

9. 用户态示例

1
2
3
4
5
6
# CBS(示意)
tc qdisc add dev eth0 parent root handle 100 mqprio ...
tc qdisc replace dev eth0 parent 100:1 cbs ...

# TAPRIO(示意,需硬件支持)
tc qdisc replace dev eth0 parent root taprio ...

10. 相关文档

文章互动

阅读 --

留言

0 条留言

正在加载留言…