当我注意到抖动时,我正在测试 WebSocket 连接;一些 TCP 数据包出现延迟。于是我开始 ping 目的地。 TCP 数据包不再延迟。我停止了 ping;我又开始紧张起来。
看起来,如果我有一定的流量阈值,那么网络适配器就不再有抖动,低于该阈值,但它似乎会延迟数据包。
我通过 ping 与 WebSocket 连接路径无关的其他站点再次测试了它,这也消除了抖动。无论流量和路径如何,它也会发生,例如,如果我从不同的目的地流式传输数据并测试 WS 连接,则不会出现抖动。这似乎表明它特定于本地网络接口,因为这是这里唯一的常量。
在我看来,如果流量不多,本地网络适配器就会进入“睡眠/低功耗”状态。这可能吗?有什么方法可以诊断或调查这个问题吗?
答案1
这是由无线网卡上的主动电源管理引起的。
运行此命令可关闭 NIC 的电源管理,从而修复此问题:
sudo iwconfig wlp3s0 power off
似乎此特定 NIC 的电源管理在极短的超时时间内处于活动状态。例如,约 200 毫秒内没有传输任何流量将使 NIC 进入低功耗模式。这意味着 NIC 必须在低流量时不断被唤醒,从而导致数据包延迟。