URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 68467
[ Назад ]

Исходное сообщение
"TC, HTB, ESFQ: вопрос по приоритетам"

Отправлено fufnf , 25-Авг-06 11:24 
Добрый день. Мой вопрос как сделать, чтобы высокоприоритетному трафику были наименьшие задержки и наибольшая скорость. Вот мой конфиг шейпера:

/sbin/tc qdisc add dev eth1 root handle 1: htb default 555
/sbin/tc class add dev eth1 parent 1: classid 1:2 htb rate 12Mbit

######################## LOCAL #####################################################

/sbin/tc class add dev eth1 parent 1:2 classid 1:100 htb rate 2Mbit ceil 10Mbit prio 0
/sbin/tc qdisc add dev eth1 parent 1:100 esfq perturb 5 hash fwmark

#---Admin+DNS+Games+Short---#
/sbin/tc class add dev eth1 parent 1:100  classid 1:110 htb rate 1000Kbit ceil 10000Kbit prio 1
/sbin/tc qdisc add dev eth1 parent 1:110 esfq perturb 5 hash dst
/sbin/tc filter add dev eth1 parent 1:  protocol ip prio 1 handle 1   fw flowid 1:110
/sbin/tc filter add dev eth1 parent 1:  protocol ip prio 1 handle 2   fw flowid 1:110
/sbin/tc filter add dev eth1 parent 1:  protocol ip prio 1 handle 4   fw flowid 1:110
/sbin/tc filter add dev eth1 parent 1:  protocol ip prio 1 handle 19  fw flowid 1:110


#---MAIL+HTTP---#
/sbin/tc class add dev eth1 parent 1:100  classid 1:120 htb rate 700Kbit ceil 2000Kbit prio 2
/sbin/tc qdisc add dev eth1 parent 1:120 esfq perturb 5 hash dst
/sbin/tc filter add dev eth1 parent 1:  protocol ip prio 1 handle 8  fw flowid 1:120
/sbin/tc filter add dev eth1 parent 1:  protocol ip prio 1 handle 14 fw flowid 1:120

#---FTP+Other---#
/sbin/tc class add dev eth1 parent 1:100  classid 1:130 htb rate 300Kbit ceil 2000Kbit prio 3
/sbin/tc qdisc add dev eth1 parent 1:130 esfq perturb 5 hash dst
/sbin/tc filter add dev eth1 parent 1:  protocol ip prio 1 handle 11  fw flowid 1:130
/sbin/tc filter add dev eth1 parent 1:  protocol ip prio 1 handle 17  fw flowid 1:130


##############################        Ukraine       ####################################

/sbin/tc class add dev eth1 parent 1:2  classid 1:200 htb rate 1000Kbit ceil 1300Kbit prio 0
/sbin/tc qdisc add dev eth1 parent 1:200 esfq perturb 5 hash fwmark

#---Games+Short---#
/sbin/tc class add dev eth1 parent 1:200  classid 1:210 htb rate 500Kbit ceil 1000Kbit prio 1
/sbin/tc qdisc add dev eth1 parent 1:210 esfq perturb 5 hash dst
/sbin/tc filter add dev eth1 parent 1:  protocol ip prio 1 handle 3  fw flowid 1:210

#---MAIL+HTTP---#
/sbin/tc class add dev eth1 parent 1:200  classid 1:220 htb rate 350Kbit ceil 1000Kbit prio 2
/sbin/tc qdisc add dev eth1 parent 1:220 esfq perturb 5 hash dst
/sbin/tc filter add dev eth1 parent 1:  protocol ip prio 1 handle 7   fw flowid 1:220
/sbin/tc filter add dev eth1 parent 1:  protocol ip prio 1 handle 13  fw flowid 1:220

#---FTP+Other---#
/sbin/tc class add dev eth1 parent 1:200  classid 1:230 htb rate 250Kbit ceil 1000Kbit prio 3
/sbin/tc qdisc add dev eth1 parent 1:230 esfq perturb 5 hash dst
/sbin/tc filter add dev eth1 parent 1:  protocol ip prio 1 handle 10  fw flowid 1:230
/sbin/tc filter add dev eth1 parent 1:  protocol ip prio 1 handle 16  fw flowid 1:230

###############################         World        ###################################

/sbin/tc class add dev eth1 parent 1:2 classid 1:300 htb rate 128Kbit ceil 140Kbit prio 0
/sbin/tc qdisc add dev eth1 parent 1:300 esfq perturb 5 hash fwmark

#---Games+Short+ICQ---#
/sbin/tc class add dev eth1 parent 1:300  classid 1:310 htb rate 64Kbit ceil 128Kbit prio 1
/sbin/tc qdisc add dev eth1 parent 1:310 esfq perturb 5 hash dst
/sbin/tc filter add dev eth1 parent 1:  protocol ip prio 1 handle 5  fw flowid 1:310
/sbin/tc filter add dev eth1 parent 1:  protocol ip prio 1 handle 6  fw flowid 1:310


#---MAIL+HTTP---#
/sbin/tc class add dev eth1 parent 1:300  classid 1:320 htb rate 45Kbit ceil 128Kbit prio 2
/sbin/tc qdisc add dev eth1 parent 1:320 esfq perturb 5 hash dst
/sbin/tc filter add dev eth1 parent 1:  protocol ip prio 1 handle 9   fw flowid 1:320
/sbin/tc filter add dev eth1 parent 1:  protocol ip prio 1 handle 15  fw flowid 1:320

#---FTP+Other+128K---#
/sbin/tc class add dev eth1 parent 1:300  classid 1:330 htb rate 19Kbit ceil 128Kbit prio 3
/sbin/tc qdisc add dev eth1 parent 1:330 esfq perturb 5 hash dst
/sbin/tc filter add dev eth1 parent 1:  protocol ip prio 1 handle 12  fw flowid 1:330
/sbin/tc filter add dev eth1 parent 1:  protocol ip prio 1 handle 18  fw flowid 1:330
/sbin/tc filter add dev eth1 parent 1:  protocol ip prio 1 handle 20  fw flowid 1:330

################### Default #################################################

/sbin/tc class add dev eth1 parent 1:2 classid 1:555 htb rate 560Kbit prio 1
/sbin/tc qdisc add dev eth1 parent 1:555 handle 555 esfq perturb 5 hash dst

  При этом смотрю по игре (Counter-Strike class 1:210 prio 1). Когда никто не качает пинг 16-20, когда начинается скачка с ФТП (class 1:230 prio 3) пинг возрастает до 300-400.
  Пакеты маркируются в mangle POSTROUTING правильно.
  eth1 - сетевая карта, смотрит на LAN.
Подскажите, как исправить?


Содержание

Сообщения в этом обсуждении
"TC, HTB, ESFQ: вопрос по приоритетам"
Отправлено Z0termaNN , 28-Авг-06 11:11 
Ну во-первых, на очередь, на которую навешаны подклассы, вешать конечную дисциплину не
совсем правильно. Вполне возможно, что причина как раз в этом.

/sbin/tc class add dev eth1 parent 1:2 classid 1:100 htb rate 2Mbit ceil 10Mbit prio 0
/sbin/tc qdisc add dev eth1 parent 1:100 esfq perturb 5 hash fwmark
^^^^ это здесь явно лишнее.

Во-вторых у меня есть большие сомнения насчет приоритетов в htb (хотя может быть я и не
прав). Но в любом случае сумма rate дочерних очередей не должна превышать rate родительской
очереди.

Если у тебя действительно трафик, чувствительный к jitter, то тебе должна помочь hfsc.


"TC, HTB, ESFQ: вопрос по приоритетам"
Отправлено fufnf , 28-Авг-06 23:46 
>Ну во-первых, на очередь, на которую навешаны подклассы, вешать конечную дисциплину не
>
>совсем правильно. Вполне возможно, что причина как раз в этом.
>
>/sbin/tc class add dev eth1 parent 1:2 classid 1:100 htb rate 2Mbit
>ceil 10Mbit prio 0
>/sbin/tc qdisc add dev eth1 parent 1:100 esfq perturb 5 hash fwmark
>
>^^^^ это здесь явно лишнее.
>
>Во-вторых у меня есть большие сомнения насчет приоритетов в htb (хотя может
>быть я и не
>прав). Но в любом случае сумма rate дочерних очередей не должна превышать
>rate родительской
>очереди.
>
>Если у тебя действительно трафик, чувствительный к jitter, то тебе должна помочь
>hfsc.

Да, с момента написания месаджа я немного больше узнал по теме и теперь у меня что-то такое:

hash=dst

/sbin/tc qdisc add dev eth1 root handle 1: prio bands 2 priomap 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

/sbin/tc qdisc add dev eth1 parent 1:1 handle 100: pfifo        #high prio

/sbin/tc qdisc add dev eth1 parent 1:2 handle 2: htb
/sbin/tc class add dev eth1 parent 2: classid 2:1 htb rate 3128

/sbin/tc class add dev eth1 parent 2:1 classid 2:100 htb rate 2mbit   #Local
/sbin/tc class add dev eth1 parent 2:1 classid 2:200 htb rate 1mbit   #Ukraine
/sbin/tc class add dev eth1 parent 2:1 classid 2:300 htb rate 128kbit #World

# Local

/sbin/tc class add dev eth1 parent 2:100 classid 2:101 htb rate 1mbit ceil 2mbit prio 0         #http
/sbin/tc qdisc add dev eth1 parent 2:101 handle 2101 esfq perturb 10 hash dst                   #http esdq
/sbin/tc class add dev eth1 parent 2:100 classid 2:102 htb rate 1mbit ceil 2mbit prio 1         #ftp
/sbin/tc qdisc add dev eth1 parent 2:102 handle 2102 esfq perturb 10 hash dst                   #ftp esfq

# Ukraine

/sbin/tc class add dev eth1 parent 2:200 classid 2:201 htb rate 500kbit ceil 1mbit prio 0               #http
/sbin/tc qdisc add dev eth1 parent 2:201 handle 2201 esfq perturb 10 hash dst                           #http esdq
/sbin/tc class add dev eth1 parent 2:200 classid 2:202 htb rate 500kbit ceil 1mbit prio 1               #ftp
/sbin/tc qdisc add dev eth1 parent 2:202 handle 2202 esfq perturb 10 hash dst                           #ftp esfq

# World

/sbin/tc class add dev eth1 parent 2:300 classid 2:301 htb rate 64kbit ceil 128kbit prio 0              #http
/sbin/tc qdisc add dev eth1 parent 2:301 handle 2301 esfq perturb 10 hash dst                           #http esdq
/sbin/tc class add dev eth1 parent 2:300 classid 2:302 htb rate 64kbit ceil 128kbit prio 1              #ftp
/sbin/tc qdisc add dev eth1 parent 2:302 handle 2302 esfq perturb 10 hash dst                           #ftp esfq


Можно чуть-чуть поподробнее что такое hfsc?


"TC, HTB, ESFQ: вопрос по приоритетам"
Отправлено Z0termaNN , 29-Авг-06 10:38 
hfsc это иерархическая дисциплина, основанная на так называемых сервисных кривых.
по своему синтаксису она напоминает htb, разница заключается в том, что
- нет приоритетов как в htb
- можно определить классы c гарантированной задержкой.


В общем-то литературы по hfsc не очень много, но кое что найти можно:
- эта тема обсуждалась на lartc mailing list
- т.к. hsfc для linux это порт из openbsd, то вполне можно почитать на эту тему
  документацию altq openbsd
- ну и несколько ссылок на документацию

http://linux-ip.net/tc/hfsc.en/
http://wsched.sourceforge.net/examples.html
http://unix.nordcomp.ru/forum.html?page=20&id=438

это так, для затравки, ну и конечно -курить google.


"TC, HTB, ESFQ: вопрос по приоритетам"
Отправлено fufnf , 29-Авг-06 12:29 
>hfsc это иерархическая дисциплина, основанная на так называемых сервисных кривых.
>по своему синтаксису она напоминает htb, разница заключается в том, что
>- нет приоритетов как в htb
>- можно определить классы c гарантированной задержкой.
>
>
>В общем-то литературы по hfsc не очень много, но кое что найти
>можно:
>- эта тема обсуждалась на lartc mailing list
>- т.к. hsfc для linux это порт из openbsd, то вполне можно
>почитать на эту тему
>  документацию altq openbsd
>- ну и несколько ссылок на документацию
>
>http://linux-ip.net/tc/hfsc.en/
>http://wsched.sourceforge.net/examples.html
>http://unix.nordcomp.ru/forum.html?page=20&id=438
>
>это так, для затравки, ну и конечно -курить google.


Спасибо, довольно интересная тема. Несколько сложно разобраться. Например,
- чем отличаются sc (service curves), rt (real-time curve) и ls (link-sharing curve) и в каких случаях нужно каждый из них применять?
- не совсем понятно что будет, если задержка все же превысит лимит dmax.
- umax - это что-то типа quantum в HTB?
- можно ли цеплять к leaf-классам HFSC очереди типа sfq или esfq?
- можно ли саму очередь HFSC цеплять к другим очередям типа htb, tbf?


Довольно сложно с этим разобраться без базовых знаний ALTQ и без доступного русскоязычного руководства.


"TC, HTB, ESFQ: вопрос по приоритетам"
Отправлено Z0termaNN , 29-Авг-06 14:15 
1. вкратце смысл таков. каждый класс имеет 2 кривые обслуживания - реального времени(rt) и
   обслуживания разделения соединения(ls). sc используется для назначения одинаковых
   значений двум кривым. т.к. сервисов реального времени, которые чувствительны к latency
   & jitter обычно немного, то для большинства случаев вполне подходит sc.
   т.е. в большинстве случаев вполне подходит sc. если провести аналогию с htb, то
   ls эквивалентно - rate, а ul - ceil соответственно.
   tc add dev eth0 ..... htb rate 20kbit ceil 100kbit
   tc add dev eth0       hfsc ls m2 20kbit ul m2 100kbit
   делают примерно одно и тоже.
2. dmax может превысить макс заданное значение, но это вопрос грамотного проектирования
   очереди.
3. umax - в общем примерно да
4. конечно можно
5. к tbf конечно нельзя, но ко всем другим classfull qdiscs (e.g. htb,cbq,dsmark,prio)  
   - без проблем.


"TC, HTB, ESFQ: вопрос по приоритетам"
Отправлено fufnf , 29-Авг-06 12:30 


"TC, HTB, ESFQ: вопрос по приоритетам"
Отправлено Аноним , 01-Сен-06 03:40 
Сходу напрашивается ответ, может у Вас пакеты протокол пинга не маркируются, ведь
у него протокол icmp, поэтому он попадает в некласифицированный трафик?

"TC, HTB, ESFQ: вопрос по приоритетам"
Отправлено Аноним , 01-Сен-06 03:53 
>Сходу напрашивается ответ, может у Вас пакеты протокол пинга не маркируются, ведь
>
>у него протокол icmp, поэтому он попадает в некласифицированный трафик?


или они маркируются дважды.....


"TC, HTB, ESFQ: вопрос по приоритетам"
Отправлено fufnf , 01-Сен-06 14:35 
>>Сходу напрашивается ответ, может у Вас пакеты протокол пинга не маркируются, ведь
>>
>>у него протокол icmp, поэтому он попадает в некласифицированный трафик?
>
>
>или они маркируются дважды.....

Плохо понял причем тут icpm-протокол. Я говорю об игре Counter-Strike (udp, порт 27015). То же самое относительно других онлайн-приложений, которые чувствительны к задержкам. Классифицируется весь трафик и попадает в нужные классы тоже верно.