Wireguard работает медленно, но только для загрузки Windows

У нас проблема в том, что подключение из нескольких клиентских сетей через Wireguard Tunnel к общему ресурсу Samba на сервере происходит медленно, но, как ни странно, это влияет только на Windows 10 и только на загрузку.

Хост Linux может загружать со скоростью до 120 МБ / с, в то время как Windows может загружать только со скоростью 10-50 МБ / с (это зависит от разных сетей). Это не ограничивается кем-л. Я получаю точно такие же результаты тестов с Iperf (udp и tcp).

Из любопытства я проверил, затронута ли и Windows 11, и это не ! Что это может быть и как это исправить?

1
задан 3 August 2021 в 07:15
2 ответа

Похоже, это та же или, по крайней мере, похожая проблема, описанная Dropbox (https://dropbox.tech/infrastructure/boosting-dropbox-upload-speed ). Насколько я понимаю (пожалуйста, поправьте меня!), когда Linux Gateway использует несколько очередей NIC с Wireguard, происходит много переупорядочения пакетов, и, по-видимому, Windows 10 не справляется с этим слишком хорошо. Переупорядочивание пакетов каким-то образом заставляет Windows 10 замедлять скорость отправки, ожидая подтверждения почти после каждого отправленного пакета данных вместо отправки нескольких пакетов и принятия выборочных подтверждений.

К сожалению, я забыл сделать скриншоты проанализированных мной сеансов Wireshark, но было очень хорошо видно, что при загрузке хост Windows обычно получает около 10-20 пакетов данных tcp перед отправкой подтверждения. Но при загрузке я получил подтверждение TCP для каждого отправленного пакета данных.

Чтобы исправить это, отключите многоканальную очередь на хосте Linux.

ethtool -L PHYSICAL_LOCAL_INTERFACE combined 1
ethtool -L PHYSICAL_NETWORK_INTERFACE combined 1

Чтобы увидеть, была ли она применена, можно использовать

ethtool -l INTERFACENAME
Channel parameters for INTERFACENAME:
Pre-set maximums:
RX:             0
TX:             0
Other:          1
Combined:       63
Current hardware settings:
RX:             0
TX:             0
Other:          1
Combined:       1

Последняя строка должна быть 1. Приведенная выше команда устанавливает это только временно, чтобы сделать ее постоянной, необходимо использовать специальные инструменты дистрибутива. Для Debian это может быть что-то вроде этого:

cat /etc/network/interfaces
auto INTERFACE
iface INTERFACE inet static
    address IPADDR
    netmask NETMASK
    gateway GATEWAY
    # This is the relevant line
    post-up ethtool -L INTERFACE combined 1

Это может создать узкое место, если шлюз не имеет сильного процессора. Мы используем 8-ядерные процессоры AMD EPYC 7262 и получаем полную скорость загрузки и загрузки 1 Гбит с использованием ~ 70% одного ядра.

1
ответ дан 3 August 2021 в 07:26

Экспериментальный драйвер ядра, добавленный в выпуске 0.4.8, нарушил скорость загрузки Windows. Просто запускайте более старую версию, пока ее не исправят.

https://download.wireguard.com/windows-client/wireguard-amd64-0.4.7.msi

0
ответ дан 3 December 2021 в 05:53

Теги

Похожие вопросы