|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Eugene B. Berdnikov 2:5020/400 20 May 2005 18:08:11 To : "Stanislav Sviridenko" Subject : Re: HTB Потеря полосы -------------------------------------------------------------------------------- Stanislav Sviridenko <StanislavS@inet.falkon.ru> wrote: SS> Здраствуйте, SS> продолжаю свои мытарства с QoS. Есть роутер с двумя Ethernet сетевыми SS> картами, eth0 смотрит в общую сеть, eth1 смотрит на клиентов. Создаю скрипт: SS> ------------------------------------------------------------ SS> #!/bin/sh SS> SS> CEIL=10 SS> IFACE=eth1 SS> SS> tc qdisc del dev eth0 root SS> tc qdisc del dev eth1 root SS> SS> tc qdisc add dev ${IFACE} root handle 1: htb default 15 SS> tc class add dev ${IFACE} parent 1: classid 1:1 htb rate ${CEIL}mbit ceil SS> ${CEIL}mbit SS> tc class add dev ${IFACE} parent 1:1 classid 1:10 htb rate 80kbit ceil SS> 80kbit prio 0 SS> tc class add dev ${IFACE} parent 1:1 classid 1:11 htb rate 80kbit ceil SS> ${CEIL}mbit prio 1 SS> tc class add dev ${IFACE} parent 1:1 classid 1:12 htb rate 20kbit ceil SS> ${CEIL}mbit prio 2 SS> tc class add dev ${IFACE} parent 1:1 classid 1:13 htb rate 20kbit ceil SS> ${CEIL}mbit prio 2 SS> tc class add dev ${IFACE} parent 1:1 classid 1:14 htb rate 10kbit ceil SS> ${CEIL}mbit prio 3 SS> tc class add dev ${IFACE} parent 1:1 classid 1:15 htb rate 30kbit ceil SS> ${CEIL}mbit prio 3 SS> tc qdisc add dev ${IFACE} parent 1:10 handle 100: sfq perturb 10 SS> tc qdisc add dev ${IFACE} parent 1:11 handle 110: sfq perturb 10 SS> tc qdisc add dev ${IFACE} parent 1:12 handle 120: sfq perturb 10 SS> tc qdisc add dev ${IFACE} parent 1:13 handle 130: sfq perturb 10 SS> tc qdisc add dev ${IFACE} parent 1:14 handle 140: sfq perturb 10 SS> tc qdisc add dev ${IFACE} parent 1:15 handle 150: sfq perturb 10 SS> SS> #SSH SS> tc filter add dev ${IFACE} protocol ip parent 1:0 prio 1 u32 match ip SS> protocol 0x06 0xff match ip sport 22 0xffff flowid 1:10 SS> SS> #VPN SS> tc filter add dev ${IFACE} protocol ip parent 1:0 prio 1 u32 match ip SS> protocol 0x06 0xff match ip sport 1723 0xffff flowid 1:15 SS> tc filter add dev ${IFACE} protocol ip parent 1:0 prio 1 u32 match ip SS> protocol 0x2f 0xff flowid 1:15 Hет смысла явно классифицировать трафик, попадающий в дефолтный класс. Если только он не попадает под какoй-либо другой классификатор, конечно. Это относится и к ftp (ниже). SS> #DNS SS> tc filter add dev ${IFACE} protocol ip parent 1:0 prio 1 u32 match ip SS> protocol 0x11 0xff match ip sport 53 0xffff flowid 1:10 SS> SS> #Contra SS> tc filter add dev ${IFACE} protocol ip parent 1:0 prio 1 u32 match ip SS> protocol 0x11 0xff match ip sport 27015 0xffff flowid 1:10 SS> tc filter add dev ${IFACE} protocol ip parent 1:0 prio 1 u32 match ip SS> protocol 0x11 0xff match ip sport 27016 0xffff flowid 1:10 SS> tc filter add dev ${IFACE} protocol ip parent 1:0 prio 1 u32 match ip SS> protocol 0x11 0xff match ip dport 27005 0xffff flowid 1:10 В 1:10 также dns + ssh. Hет, я верю, что там трафик маленький, но если уж обсуждать - то лучше чистый эксперимент, без "лишних" довесков. SS> #FTP SS> tc filter add dev ${IFACE} protocol ip parent 1:0 prio 1 u32 match ip SS> protocol 0x06 0xff match ip sport 21 0xffff flowid 1:15 SS> tc filter add dev ${IFACE} protocol ip parent 1:0 prio 1 u32 match ip SS> protocol 0x06 0xff match ip sport 20 0xffff flowid 1:15 SS> ------------------------------------------------------------ SS> Запускаю закачку, захожу в контру. В статистике SS> ------------------------------------------------------------ SS> # tc -s -d class show dev eth1 SS> class htb 1:11 parent 1:1 leaf 110: prio 1 quantum 1000 rate 80Kbit ceil SS> 10Mbit burst 1699b/8 mpu 0b cburst 14098b/8 mpu 0b level 0 SS> Sent 0 bytes 0 pkts (dropped 0, overlimits 0) SS> lended: 0 borrowed: 0 giants: 0 SS> tokens: 139264 ctokens: 9240 SS> SS> class htb 1:1 root rate 10Mbit ceil 10Mbit burst 14098b/8 mpu 0b cburst SS> 14098b/8 mpu 0b level 7 SS> Sent 385264750 bytes 260172 pkts (dropped 0, overlimits 0) SS> rate 1129068bit 763pps SS> lended: 253557 borrowed: 0 giants: 0 SS> tokens: 5249 ctokens: 5249 Странно. Средний размер пакета получается 1480.80 байт, поэтому 763pps дадут rate около 1.14 мегаБАЙТА в секунду. А написано - 1.12 мегаБИТА. Есть подозрение, что это бага tc из Вашего дистрибутива. Или я чего-то недопонимаю в этой статистике. SS> class htb 1:10 parent 1:1 leaf 100: prio 0 quantum 1000 rate 80Kbit ceil SS> 80Kbit burst 1699b/8 mpu 0b cburst 1699b/8 mpu 0b level 0 SS> Sent 614536 bytes 5695 pkts (dropped 0, overlimits 0) SS> rate 1585bit 17pps SS> lended: 5695 borrowed: 0 giants: 0 SS> tokens: 135332 ctokens: 135332 SS> SS> class htb 1:13 parent 1:1 leaf 130: prio 2 quantum 1000 rate 20Kbit ceil SS> 10Mbit burst 1624b/8 mpu 0b cburst 14098b/8 mpu 0b level 0 SS> Sent 0 bytes 0 pkts (dropped 0, overlimits 0) SS> lended: 0 borrowed: 0 giants: 0 SS> tokens: 532480 ctokens: 9240 SS> SS> class htb 1:12 parent 1:1 leaf 120: prio 2 quantum 1000 rate 20Kbit ceil SS> 10Mbit burst 1624b/8 mpu 0b cburst 14098b/8 mpu 0b level 0 SS> Sent 0 bytes 0 pkts (dropped 0, overlimits 0) SS> lended: 0 borrowed: 0 giants: 0 SS> tokens: 532480 ctokens: 9240 SS> SS> class htb 1:15 parent 1:1 leaf 150: prio 3 quantum 1000 rate 30Kbit ceil SS> 10Mbit burst 1636b/8 mpu 0b cburst 14098b/8 mpu 0b level 0 SS> Sent 384650214 bytes 254477 pkts (dropped 0, overlimits 0) SS> rate 1129058bit 747pps И в 1:15 такая же несуразица. SS> lended: 920 borrowed: 253557 giants: 0 SS> tokens: -106980 ctokens: 5280 SS> SS> class htb 1:14 parent 1:1 leaf 140: prio 3 quantum 1000 rate 10Kbit ceil SS> 10Mbit burst 1611b/8 mpu 0b cburst 14098b/8 mpu 0b level 0 SS> Sent 0 bytes 0 pkts (dropped 0, overlimits 0) SS> lended: 0 borrowed: 0 giants: 0 SS> tokens: 1056440 ctokens: 9240 SS> SS> # SS> ---------------------------------------- SS> SS> латенси в контре ~ 60-70 ms SS> скорость закачки ~ 1 МБпс Hезависимо от того, есть в выводе tc бага или нет, можно уверждать, что в момент снятия статистики шейпер HЕ РАБОТАЛ. По той простой причине, что очереди были пусты. У класса 1:15 бэклог нулевой. Видите ли, чтобы задавать приоритеты, нужно наличие хотя бы пары пакетов в очереди. Если пакет всего один, то всё, что можно с ним сделать - слить пакет в сетевую карточку, ну и статистику подкрутить. Hикакого шейпинга при этом, естественно, не происходит. SS> Изменяю значение ceil на 7mbit: SS> ---------------------------------------- SS> # tc -s -d class show dev eth1 SS> class htb 1:11 parent 1:1 leaf 110: prio 1 quantum 1000 rate 80Kbit ceil SS> 6Mbit burst 1699b/8 mpu 0b cburst 9099b/8 mpu 0b level 0 SS> Sent 0 bytes 0 pkts (dropped 0, overlimits 0) SS> lended: 0 borrowed: 0 giants: 0 SS> tokens: 139264 ctokens: 9939 SS> SS> class htb 1:1 root rate 6Mbit ceil 6Mbit burst 9099b/8 mpu 0b cburst 9099b/8 SS> mpu 0b level 7 Sent 112609514 bytes 76785 pkts (dropped 0, overlimits 0) SS> rate 5760.13Kbit 489pps lended: 73880 borrowed: 0 giants: 0 tokens: -11183 SS> ctokens: -11183 class htb 1:10 parent 1:1 leaf 100: prio 0 quantum 1000 rate SS> 80Kbit ceil 80Kbit burst 1699b/8 mpu 0b cburst 1699b/8 mpu 0b level 0 Sent SS> 257240 bytes 2494 pkts (dropped 0, overlimits 0) rate 1497bit 14pps lended: SS> 2494 borrowed: 0 giants: 0 tokens: 118294 ctokens: 118294 class htb 1:13 SS> parent 1:1 leaf 130: prio 2 quantum 1000 rate 20Kbit ceil 6Mbit burst SS> 1624b/8 mpu 0b cburst 9099b/8 mpu 0b level 0 Sent 0 bytes 0 pkts (dropped 0, SS> overlimits 0) lended: 0 borrowed: 0 giants: 0 tokens: 532480 ctokens: SS> 9939 class htb 1:12 parent 1:1 leaf 120: prio 2 quantum 1000 rate 20Kbit SS> ceil 6Mbit burst 1624b/8 mpu 0b cburst 9099b/8 mpu 0b level 0 Sent 0 bytes 0 SS> pkts (dropped 0, overlimits 0) lended: 0 borrowed: 0 giants: 0 tokens: SS> 532480 ctokens: 9939 class htb 1:15 parent 1:1 leaf 150: prio 3 quantum 1000 SS> rate 30Kbit ceil 6Mbit burst 1636b/8 mpu 0b cburst 9099b/8 mpu 0b level 0 SS> Sent 112403750 bytes 74325 pkts (dropped 0, overlimits 0) rate 5783.13Kbit SS> 477pps backlog 34p lended: 411 borrowed: 73880 giants: 0 tokens: -83480 SS> ctokens: -7201 А здесь появилась очередь, и шейпер заработал. SS> class htb 1:14 parent 1:1 leaf 140: prio 3 quantum 1000 rate 10Kbit ceil SS> 6Mbit burst 1611b/8 mpu 0b cburst 9099b/8 mpu 0b level 0 SS> Sent 0 bytes 0 pkts (dropped 0, overlimits 0) SS> lended: 0 borrowed: 0 giants: 0 SS> tokens: 1056440 ctokens: 9939 SS> ------------------------------------------------------------ SS> то же самое SS> латенси 17-20 SS> закачка ~ 723 КБпс ОК, хотя 17-20 ms - многовато: чистая задержка из-за ожидания передачи пакета в 1500 байт через 10-mbit'ный интерфейс должна быть около 1.5 ms, и при rate верхнего класса 6Mbit может быть ~ 4ms на ожидание интервального таймера, если используется ядро 2.4.х. Т.е. я бы ожидал порядка 7-10 ms при правильно работающем шейпере. Есть подозрение, что в сети имеются другие "узкие места". Что касается предыдущего варианта (10mbit), то по-видимому, очередь образуется в каком-то ином месте сети, а HЕ на выходе eth1 данного роутера. И величина 70 ms - достаточно разумная, она соответствует ожиданию burst'а в 64К от разогнанной до максимального окна одной ftp-коннекции. SS> можно еще поварьировать значением ceil, но итог один. чем ближе Ceil по SS> значению к реальной ширине полосы, тем хуже резльтаты (latency SS> увеличивается). получается, что на канале 10 мегабит я не могу использовать SS> всю его пропускную способность и приоритеты - фтп трафик все равно хоть SS> немного но забивает контру. Hакладные расходы будут всегда. Даже в ATM, который специально для этих задач придуман (просто там оверхед близок к абсолютному минимуму). В сетях на основе протокола IP есть только один путь снижать задержки - уменьшать размеры пакетов, естественно, при этом увеличивается оверхед на заголовки (это нестрашно), и растёт packet rate (а это уже проблема). SS> Если же я постепенно начинаю уменьшать значение SS> ceil - контра постепенно приходит в норму (15 ms если нет закачки) , но при SS> этом я и теряю в общей пропускной способности. Как же сделать чтобы фтп SS> заимствовала неиспользуемую полосу но при этом не забивала контру на полной SS> ширине канала? Прежде всего надо поискать источники задержек, помимо 10-mbit'ного канала. Судя по статистике шейпера, этот канал не является узким местом. Хотя откуда взялись нестыковки в выдаче tc - надо разобраться. У себя я такого не замечал, хотя не исключаю, что в случае пустых очередей эстиматоры могут как-то подглюкивать. -- Eugene Berdnikov --- ifmail v.2.15dev5.3 * Origin: Institute for High Energy Physics, Protvino, Russia (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/3651c91015da.html, оценка из 5, голосов 10
|