Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 HTB Потеря полосы   Stanislav Sviridenko   19 May 2005 15:54:38 
 Re: HTB Потеря полосы   Eugene B. Berdnikov   20 May 2005 18:08:11 
Архивное /ru.linux/3651c91015da.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional