Appearance
GRO接收卸载
64并发流
TCP/UDP协议支持
SylixOS目标平台
简介
xgro 是专为 SylixOS 设计的高性能软件 GRO(Generic Receive Offload,通用接收卸载)内核模块。它在数据包进入协议栈之前,将同一流的多个小包聚合为大包,显著降低高速网络下的 CPU 占用和中断处理开销。
核心特性:
- Cache 对齐关键数据结构,避免多核伪共享
- Jenkins 类哈希算法,最小化流表碰撞
- 无锁快慢路径,减少自旋锁竞争
- 支持 TCP/IPv4 和 UDP/IPv4
- 单网卡最多 64 个并发流(可配置)
使用方法
模块加载后在 Shell 中注册 xgro 命令:
bash
xgro <ifname> [on|off] [cnt <val>] [size <val>] [interval <val>] [timeout <val>]
xgro show [ifname]开启 GRO
bash
xgro en1 on查看状态
bash
xgro show en1输出示例:
==============================================================
Interface: en1 (Netdev Index: 1)
==============================================================
[ Configuration ]
GRO State : Enabled
Max Flows : 64
Max Merge Count : 64 packets
Max Merge Size : 65535 bytes
Flow Timeout : 20 ms
Timer Interval : 20 ms
[ Statistics ]
Active Flows : 5
RX Packets : 125890
Merged Packets : 98000
==============================================================性能调优
bash
# 提升吞吐量:增大聚合数量和大小
xgro en1 cnt 64 size 65535
# 降低延迟:减小超时时间
xgro en1 timeout 10配置参数
| 参数 | 关键字 | 默认值 | 说明 |
|---|---|---|---|
| 最大聚合数量 | cnt | 32 | 单个聚合链最大包数 |
| 最大聚合大小 | size | 32KB | 聚合后最大字节数 |
| 流超时时间 | timeout | 20ms | 超时后立即上送协议栈 |
| 定时器间隔 | interval | 20ms | 检查过期流的频率 |
故障排查
TCP 接收速度异常 通过 xgro en1 cnt 16 适当降低聚合包数,或使用 iftcpwnd 调整 TCP 窗口大小。
哈希碰撞过高 在 xgro show 中 Hash Collisions 持续升高时,增大 GRO_MAX_FLOWS(必须为 2 的幂)并重新编译。
最新更新
v2.0.0重大版本
- 重构为 2.0.0 版本
- 新增 Cache 对齐优化,避免多核伪共享
- 优化哈希算法,减少流表碰撞
v2.0.0修复补丁
- 修复以太网头长度比较问题