Оптимизация TCP для сетей с высокой задержкой, потерями, jitter?

Между двумя линукс хостами в интернете подключение 100мбит/сек, 100мс задержки, иногда с отклонением в +50мс и потерями в 5%, что можно грубо говоря симулировать в локалке через
tc qdisc replace dev eth0 root netem delay 150ms 50ms loss random 5% (симуляция только на одном конце для простоты).
На передающем конце используется ядро 6.1 и TCP CUBIC, и при активной симуляции скорость падает до ~300кбит/сек, в чем и заключается проблема. Можно увеличить скорость до ~10мбит/сек если включить TCP BBR, что уже не так ужасно, но все равно мало. (тестирую скачиванием файла с nginx через curl)

В инете видел hysteria2, там используется TCP BRUTAL в котором нужно вручную указывать скорость подключения. Тесты показали, что при ручном указании 90мбит/сек итоговая скорость передачи TCP внутри туннеля hysteria уже ~15мбит/сек, вне туннеля сеть нагружена на ~50мбит/сек. Прога жрет не мало CPU и результат не радует.

Что еще можно сделать для увеличения скорости? Позже еще протестирую udpspeeder+wg и kcptun. Если у вас есть что добавить то пишите. Спасибо.

вот как выглядит график smokeping хоста, с которым пытаюсь бороться (сеть на нем всегда в простое, он чисто для пингов), здесь всё еще хуже чем в моей симуляции


1 пинг (64байт) каждые 3 секунды

Изменение размера socket buffer приемника может влиять. Результат зависит от tcp окна, согласования его размерности. Передающему cubic это помогает слабо, а на bbr есть некоторый эффект. С эмулятора, если код приложения не фиксирует размеры, изменением tcp_rmem приемника до “4K 6MB 6MB” получаю 30Мбит/с, для “4K 16MB 16MB” 40Мбит/с, для “4K 64MB 64MB” 50Мбит/с.

upd: для дальнейших тестов применил net.ipv4.tcp_no_metrics_save=1, результаты тестов немного поменялись…

спасибо, разница большая выходит, тесты в 1 посте делал с уже мод.размером буфера, но щас откатил, стандартно на обеих концах у меня
net.ipv4.tcp_rmem="4096 131072 3903584"
net.ipv4.tcp_wmem="4096 65536 16777216"
скорость скачивания с симулятором выходит ~4мбит/сек, меняю на принимающем на
net.ipv4.tcp_rmem="4096 16000000 16000000"
скорость скачивания очень нестабильная, при скачивании файла 150мб средняя скорость бывает и 5мбит/сек, и 20мбит/сек, и 50мбит/сек

Вот такое еще попалось:

Там можно удалить из конфига секцию “bandwidth” и вместо Brutal будет использоваться BBR, пробовали с ним?
Ну и выше уже посоветовали kcptun. В XRay есть своя реализация KCP - mKCP (похожая, но не совместимая), можно потестировать ее, как с включенным congestion, так и без.

без bandwidth тоже жрёт проц очень сильно, у меня просто не вывозит впс. kcptun и mkcp еще не пробовал, может в другой раз… остановится на варианте c bbr tcp proxy (как тут Wireguard vs wireguard через tun от sing-box - #8 by 0ka), т.е. прозрачным прокси заворачиваю tcp трафик на xray tproxy для подсети wireguard.

еще пробовал wireguard over vless, но появляется bufferbloat (до 25000 мс), sqm-scripts решает bufferbloat, но сильно снижается скорость