用 Mikrotik Simple Queue 救 bufferbloat

Fri 03 March 2017

Bufferbloat 问题依然是一个比较严重的影响网络性能的问题。在 QoS 是个事情之前,如果你和我一样是 Time Warner Cable 的受害者 (或者比我更差,是 Comcast 的受害者,或是几乎任何 Cable network 的受害者),你很可能被 bufferbloat 所困扰。

Bufferbloat 的表现形式很简单 —— 带宽饱和时,行为不是丢包以整流,而是观察到了更高的延迟。这的本意是好的 —— 基于共享的基础设施,网络设备希望尽可能的减少丢包以避免被 slow start 的性能损失所困扰。但是,更常见的事情其实是带宽用尽。这种情况下,网络设备的 buffer 除了可以增高延迟,并没有什么好处。

为了避免网络设备的 buffer 被填满,可以通过本地流量整形的方式进行。用 Mikrotik 时,最简单的方式是使用 simple queue。命令如下:

[admin@smo.tifan.net] > queue export
/queue simple
add max-limit=225M/0 name=twc-queue target=ether5

(注:我的网络计划标称 200Mbps/20Mbps,实际大约 235Mbps/24Mbps)

疗效:在网络空闲时,CMTS 延迟大约 8.6ms。在使用前,流量饱和时从本地到 CMTS 的延迟可达 600ms (可能有 128M 的缓存!)。在使用后,流量饱和时从本地到 CMTS 的延迟稳定在 50ms 左右,完全符合预期。当然,我也有单线程大约 10Mbps 左右的性能损失。不过在极端情况下,可以正常使用网络是更重要的。

Comments