什么是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进行配置:
基础设置选项卡
- 勾选启用框
- 在接口下拉框中选择你的互联网(WAN)连接(如果不确定WAN端口,可查看网络 → 接口确认)
- 输入下载和上传速度,设置为准备阶段测试结果的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+级的缓冲膨胀等级,享受无延迟的网络体验。
OpenWrt SQM智能队列管理:彻底解决网络延迟与缓冲膨胀
https://niujinkai.com/archives/1772646251165
评论