Я тестировал соединение WebSocket, когда заметил дрожание; некоторые TCP-пакеты задерживались. Итак, я начал пинговать пункт назначения. Как только я это сделал, пакеты TCP больше не задерживались, как ни странно. Я перестал пинговать; Я снова начал дрожать.
Похоже, что если я выхожу за пределы определенного порога трафика, тогда у сетевого адаптера больше нет джиттера, ниже этого порога, однако, кажется, что пакеты задерживаются.
Я проверил это снова, выполнив эхо-запрос других сайтов, не связанных с путем подключения к WebSocket, и это тоже устраняет дрожание. Это также происходит независимо от трафика и пути e.g, если я транслирую данные из другого места назначения и проверяю соединение WS, нет дрожания. Кажется, это указывает на то, что это специфично для интерфейса локальной сети, поскольку это единственная константа здесь.
Мне кажется, что между сетевой картой и стеком IP происходит некоторая буферизация, и буфер не очищается должным образом при малых объемах.
Я изучил размер кольцевого буфера (очередь драйверов), которым они являются все установлено в 0:
Ring parameters for wlp3s0:
Pre-set maximums:
RX: 0
RX Mini: 0
RX Jumbo: 0
TX: 0
Current hardware settings:
RX: 0
RX Mini: 0
RX Jumbo: 0
TX: 0
Это нормально? Я предполагаю, что буферы QDisc вместо этого будут буферизоваться. Во всяком случае, меньший размер очереди приведет к меньшей задержке, но с отброшенными пакетами, которых я не вижу.
Я знаю, что BQL (Byte Limit Queues) - это функция буферизации между стеком IP и сетевой картой, но я не вижу, как это будет вести себя, как я вижу.
Итак, мой вопрос; есть ли какой-либо известный алгоритм организации очередей в сетевом стеке Linux, который мог бы регулировать малые объемы трафика через сетевую карту, но больше не регулировал бы трафик при более высоких объемах?
Это было вызвано активным управлением питанием беспроводной сетевой карты.
Выполнение этой команды, которая отключает управление питанием для сетевой карты, исправило следующее:
sudo iwconfig wlp3s0 power off
Похоже, что управление питанием для этой конкретной сетевой карты стало активным с очень коротким временем ожидания. Например, отсутствие передачи трафика в течение ~200 мс приведет к переводу сетевой карты в режим пониженного энергопотребления. Это означало, что сетевую карту приходилось постоянно активировать при малых объемах трафика, что приводило к задержке пакетов.