什么是SQM(智能队列管理)?

OpenWrt通过SQM功能来缓解缓冲膨胀问题。缓冲膨胀是指当路由器过度缓冲数据时产生的不良延迟现象,这一问题在现代网络中普遍存在。

缓冲膨胀的表现

当连接处于下载或上传的高负载状态时,缓冲膨胀最为明显。这会导致延迟(ping值)显著增加,进而影响实时应用的性能,例如:

  • VoIP网络电话
  • Wi-Fi通话
  • 视频会议
  • 在线游戏
  • 网页浏览响应速度

SQM的独特优势

SQM是一个集成的系统,它同时具备多项功能:

  • 每包/每流网络调度:精细化管理每个数据流
  • 主动队列管理:不仅仅是管理队列长度
  • 流量整形:平滑网络流量
  • 速率限制:控制带宽使用
  • QoS优先级:确保重要数据优先传输

相比而言,传统AQM只管理队列长度,传统QoS仅做优先级处理,而SQM将所有这些功能整合在一起,提供全方位的网络优化。

重要限制说明

需要注意的是,SQM由CPU处理,因此较慢的设备可能无法达到峰值互联网速度。同时,SQM与硬件流量卸载不兼容,后者会绕过部分内核处理。在使用SQM前,请确保在LuCI → 网络 → 防火墙下拉框中禁用硬件流量卸载。不过,SQM可以与软件流量卸载一起使用。


准备工作:测量当前速度和延迟

在优化网络之前,需要测试初始状态作为基准。

1. 启用数据包导向

为了最大化性能,大多数现代设备都受益于启用数据包导向功能。前往LuCI → 网络 → 接口 → 全局网络选项,选择"所有CPU"的数据包导向。

2. 进行速度测试

在网络空闲状态下,使用以下工具进行测试:

测试目的:确定峰值下载/上传速度、延迟,并评估缓冲膨胀等级。

3. 特殊情况处理

  • 如果OpenWrt设备作为扩展器、中继器或桥接使用,请先测试上游路由器是否存在问题
  • 如果使用无线AP,请单独测试上游路由器。如果AP的Wi-Fi驱动支持AQL限制(如mt76),可单独调整以改善Wi-Fi延迟

SQM安装步骤

安装必要软件包

通过SSH连接OpenWrt或使用LuCI界面安装:

opkg update
opkg install luci-app-sqm

如果不需要LuCI界面,可以只安装sqm-scripts:

opkg install sqm-scripts

基本配置

在LuCI中,进入网络 → SQM QoS进行配置:

基础设置选项卡

  1. 勾选启用
  2. 在接口下拉框中选择你的互联网(WAN)连接(如果不确定WAN端口,可查看网络 → 接口确认)
  3. 输入下载和上传速度,设置为准备阶段测试结果的90%

队列规程选项卡

  • 队列规程:选择cake(或fq_codel,详见注意事项)
  • 队列设置脚本:选择piece_of_cake.qos
  • 高级配置:保持未勾选状态(如需高级设置可参考注意事项)

链路层适配选项卡

根据你的连接类型选择链路类型和开销:

连接类型 链路层 开销设置 可选MPU
VDSL Ethernet 34(非PPPoE用26) 68
其他DSL ATM 44 96
DOCSIS线缆 Ethernet 22(速率<760Mbps)/42(≥760Mbps) 64/84
光纤 Ethernet 44 84
以太网 Ethernet 44 84

如果不确定,建议高估,选择Ethernet,设置开销44(MPU 96)。

注意:MPU(最小数据单元)设置可确保对小数据包的速率整形正确。

完成设置后,点击保存并应用


配置效果实测

以下是一位用户的实际测试结果,使用WRT32X路由器,DOCSIS线缆调制解调器,500/35 Mbit宽带服务:

测试对比

QoS设置 下载速度 上传速度 空闲Ping 下载延迟 上传延迟 质量等级 缓冲膨胀等级
无SQM 532 Mbits 37 Mbits 12 ms +18 ms +38 ms B B
启用SQM 495 Mbits 28 Mbits 12 ms +0 ms +0 ms A+ A+

从结果可见,启用SQM后,虽然带宽略有下降(约7%的下载带宽和24%的上传带宽损失),但延迟增加完全消除。这意味着在进行大流量下载时,VoIP通话和在线游戏的延迟不会受到影响,实现真正的零延迟波动。


进阶调优技巧

1. 优化MPU设置

在LuCI的SQM QoS → 链路层适配 → 高级链路层选项中设置MPU,确保对小数据包的速率整形正确。详细信息可参考SQM详情文档SQM设置问题讨论

2. 精细调整带宽限制

逐步提高下载和上传速度设置,每次调整后重新测试,直到观察到缓冲膨胀延迟出现,然后稍微回退到略低的数值。注意,这些设置是包含开销的总速率,因此实测速度测试结果会略低。

使用Waveform速度测试验证,当找到最佳设置时,应能达到A+质量和A+缓冲膨胀等级。

DSL用户注意:这可能会产生比原始速度测试更高的下载/上传值。这是正常的,因为ATM帧字节为DSL链路平均增加9%的开销,这些设置告诉SQM如何补偿这些开销。

DOCSIS线缆用户注意:某些提供商会在前10秒增加10%的过度配置,使速度测试看起来更好看,需要注意这一点。

3. Cake vs fq_codel选择

虽然Cake是首选队列规程,因为它出色地缓解缓冲膨胀,但fq_codel是速度更快但功能较少的选项。有用户发现,在CPU受限时,fq_codel可提供约15%更高的吞吐量。具体算法讨论可参考论坛帖子

4. 高级配置参考

如需更多高级设置,可查阅SQM配置文档


故障排除与常见问题

SQM启用后网速明显下降

  • 检查是否错误设置了带宽限制,尝试增加带宽值
  • 确认硬件流量卸载已禁用
  • 检查CPU使用率,设备可能性能不足

延迟改善不明显

  • 验证接口选择是否正确(应为WAN接口)
  • 尝试调整带宽值为测试结果的85%-95%
  • 检查链路层适配设置是否匹配实际连接类型

无线网络延迟问题

  • 无线AP需要单独测试上游路由器
  • 如果驱动支持,调整AQL限制改善Wi-Fi延迟

结语

通过SQM智能队列管理,我们可以有效消除缓冲膨胀带来的网络延迟问题。虽然会牺牲少量带宽,但换来的是稳定、低延迟的网络体验,对于需要实时交互的应用尤为重要。无论是居家办公的视频会议,还是休闲娱乐的在线游戏,SQM都能显著提升网络质量。

配置过程并不复杂,按照本文步骤操作,你的网络也能达到A+级的缓冲膨胀等级,享受无延迟的网络体验。