Странное ограничение скорости в ~2Mbps на одно TCP-соединение на канале 24Mbps ADSL2+?
Есть модем D-Link DSL-2500U/BRU/D, работающий в режиме «ADSL2+ AnnexM EU-56», подключенный как bridge (не роутер) к моей рабочей станции с Gentoo Linux. Линия хорошая, реальная скорость подключения порядка 18-20Mbps (т.е. я стабильно вижу реальную скорость скачивания 2.09MiB/sec). К сожалению, такая скорость наблюдается только при скачивании несколькими потоками (torrent или несколько параллельно запущенных wget-ов, например).
А при выкачке в один поток (т.е. одним wget-ом) средняя скорость всего 200KiB/sec, вне зависимости от того, откуда качать (напр. с kernel.org). Когда wget запускается скорость может скакнуть до 400-500KiB, но быстро падает до 100KiB, и потом медленно поднимается до 150-200KiB. Разумеется, это касается любого одиночного TCP-соединения, не только wget.
Я пытался скачивать wget-ом с kernel.org в WinXP SP3, а так же загрузившись с LiveCD для OpenSUSE-11.3, Ubuntu-9.04 и Ubuntu-6.10 — просто чтобы исключить потенциальные ошибки в настройке моего Gentoo. Везде одно и то же — один wget ограничен по скорости, но я могу параллельно запустить несколько wget-ов, и у каждого будет ~200KiB/sec а в сумме они спокойно могут занять весь канал (если их запустить штук 10).
Изначально я грешил на шейперы провайдера (Харьков, УкрТелеком, хотя они всё отрицали), но позже я обнаружил, что в Win7 один wget с kernel.org качает на скорости 1-2MiB/sec! Далее, я попробовал переключить модем из bridge в роутер, и получил те же 1-2MiB/sec на одиночном wget в своём Gentoo. Так что не очень похоже на вину провайдера.
Что любопытно, у меня дома два канала, второй к другому провайдеру (Велтон), только максимальная скорость канала 8Mbps, а не 24Mbps (и режим «ADSL2+», а не «ADSL2+ AnnexM EU-56»). Все остальные настройки полностью идентичны (модем тоже в режиме bridge, etc.). Так вот, одиночный wget через этот канал без проблем качает на максимальной скорости. Модемы местами (точнее, провайдерами) менял, ничего не изменилось, так что дело не в модеме.
Проблема эта наблюдается уже несколько лет (поэтому упомянутые выше версии LiveCD несколько устарели — тесты с LiveCD я делал где-то год назад), недавно просто снова с этим столкнулся и вспомнил о проблеме.
Пробовал играться с MTU, но не помогло. eth0 ведёт к первому модему, pppoe bridge поднимается как ppp0 (именно здесь наблюдается странное ограничение по скорости); eth1 и ppp1 соответственно второй модем/провайдер. На eth0 и eth1 MTU 1500. На ppp0 и ppp1 год назад MTU был 1492. Потом я заметил, что под Win7 MTU на pppoe-интерфейсе 1480, и попробовал выставить его на ppp0 — не помогло. Потом ещё экспериментировал, и, как я вижу, сейчас у меня после всех экспериментов на ppp0 стоит MTU 1392 (т.е. на целых 100 меньше!), но и это не помогает.
Ещё пытался крутить разные настройки sysctl (rmem/wmem/etc.), тоже без толку.
pppd для ppp0 у меня стартует вот таким скриптом:
LOGIN="khadslXXX@dsl.ukrtel.net"
IFACE=eth0
PPP_STD_OPTIONS="noipdefault noauth default-asyncmap nodefaultroute \
hide-password nodetach mtu 1392 noaccomp noccp nobsdcomp \
nodeflate nopcomp novj novjccomp user $LOGIN lcp-echo-interval 20 \
lcp-echo-failure 3 unit 0"
PPPOE="/usr/sbin/pppoe -p /var/run/adsl-ukrtel.pid.pppoe \
-I $IFACE -T 80 -U -m 1412"
/sbin/ifconfig $IFACE up mtu 1500
exec chpst -P /usr/sbin/pppd pty "$PPPOE" $PPP_STD_OPTIONS
В /etc/ppp/options только «lock», больше ничего на настройки pppd/pppoe влиять не должно.
Чем может вызываться такое странное ограничение скорости, и как можно его обойти не переключая модем из bridge в роутер?
Статья любопытная, я её пропустил, спасибо, почитаю. Но, тем не менее, можно чуть конкретнее, что именно Вы имеете в виду?
Настройки TCP-стека моей OS вроде как не при чём, т.к. проблема наблюдается только на одном из двух одновременно поднятых и практически идентично настроенных каналов. Модемы я менял (точнее, менял между ними телефонные линии), так что они и ethernet-кабели к ним ведущие тоже вроде исключил. Влияние провайдера вроде как тоже исключается либо использованием Win7 либо переключением модема в режим роутера.
Последняя моя идея была в том, что причина в разных размерах TCP-окна в Win7 и других OS. Но в линухе вроде бы нет возможности явно изменить размер окна, только косвенно через разные настройки. Я пытался с этим экспериментировать, но ничего не получилось.