05 调度、tc、BPF 与 XDP 机制与实现详解

05 调度、tc、BPF 与 XDP 机制与实现详解

1. 三个相关子系统

目录 职责 配置
net/sched/ Traffic Control:qdisc、分类、动作 常 y
net/bpf/ 网络相关 BPF 自检/测试运行 CONFIG_BPF
net/xdp/ AF_XDP 用户态零拷贝 CONFIG_XDP_SOCKETS
kernel/bpf/ BPF 解释器/JIT(不在 net/) CONFIG_BPF_SYSCALL

tcXDP 是 RK 上 QoS、高性能收包 的主要内核接口。

2. net/sched — Traffic Control

sch_*.c — 队列规程(pfifo_fast、fq_codel、htb…)
cls_*.c — 分类器(u32、flower、bpf…)
act_*.c — 动作(mirred、pedit、bpf、vlan…)

配置通路:NETLINK_ROUTEtc 子族(tc qdisctc filter)。

数据路径:dev_queue_xmit → qdisc_enqueue → 驱动**;ingress 在 **__dev_xmit_skb` 之前 的 ingress qdisc。

3. core 中的 BPF 挂钩

  • cls_bpf / act_bpf 在 sched;
  • sock_mapsk_msg 在 core(BPF 与 socket 结合);
  • lwt_bpf.c — 轻量隧道 BPF。

4. net/bpf/

主要为 BPF_PROG_TEST_RUN 对网络程序类型的 内核自测(skb、xdp、flow_dissector 等),不是 数据面必经路径。

用户态加载程序走 bpf() 系统调用kernel/bpf/syscall.c)。

5. XDP 两层

位置 说明
原生 XDP 驱动 ndo_bpf / xdp_buff 最早点处理
generic XDP net/core/xdp.c 无驱动支持时的慢路径
AF_XDP net/xdp/ 用户态 mmap 环(XSK)

bpftool 加载 SEC("xdp") 程序;驱动需声明 NETDEV_XDP_ACT_* 能力。

6. ethtool 协同

net/ethtool/ 配置 ring、channel、pause 参数,影响 XDP/tc 性能上限。

7. RK3588

场景 建议
出口限速 htb/fq_codel on eth0
高性能收包 驱动 XDP + AF_XDP(若驱动支持)
过滤 tc flowernft + netfilter

stmmac 等驱动 XDP 支持因版本/补丁而异,需查 ethtool -k 与驱动 Release notes。

专文:schedbpfxdp

8. 小结

sched = 队列与策略;BPF = 可编程挂载点;XDP = 尽早处理包。三者正交,可组合使用。

文章互动

阅读 --

留言

0 条留言

正在加载留言…