Открыл для себя мир разнообразных алгоритмов управления контролем потока TCP в FreeBSD'шном стеке TCP/IP. По умолчанию используется sysctl net.inet.tcp.cc.algorithm=newreno
, он же единственный в списке sysctl net.inet.tcp.cc.available
.
Но достаточно было сделать kldload cc_chd
и sysctl net.inet.tcp.cc.algorithm=chd
, как скорость загрузки файла через ssh с удаленного сервера, до которого 11 хопов, 128ms rtt (и иногда бывают потери пакетов в незначительном количестве) стала разгоняться не до 55-60Kbyte/s, а до 75-80, а иногда и до 90Kbyte/s. Плюс первоначальный разгон скорости быстрее (видно невооруженным взглядом) и после притормаживаний сети шустрее возвращается на прежнюю скорость.
Эффект воспроизводимый. Оставлю так, пожалуй. Пробовал ещё cc_hd, cc_cubic, cc_htcp и cc_vegas, но в данных условиях они такого впечатляющего результата не дали. Все алгоритмы пробовал на дефолтных настройках.
Возможность тасовать эти алгоритмы появилась в FreeBSD, начиная с версий 8.3-RELEASE и 9.0-RELEASE.
Update: удалённый сервер - тоже FreeBSD, тоже под моим контролем и настройки менял синхронно на сервере и на клиенте.