Добрый день. Мой вопрос как сделать, чтобы высокоприоритетному трафику были наименьшие задержки и наибольшая скорость. Вот мой конфиг шейпера:/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.
Подскажите, как исправить?
Ну во-первых, на очередь, на которую навешаны подклассы, вешать конечную дисциплину не
совсем правильно. Вполне возможно, что причина как раз в этом./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.
>Ну во-первых, на очередь, на которую навешаны подклассы, вешать конечную дисциплину не
>
>совсем правильно. Вполне возможно, что причина как раз в этом.
>
>/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?
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.
>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 и без доступного русскоязычного руководства.
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)
- без проблем.
Сходу напрашивается ответ, может у Вас пакеты протокол пинга не маркируются, ведь
у него протокол icmp, поэтому он попадает в некласифицированный трафик?
>Сходу напрашивается ответ, может у Вас пакеты протокол пинга не маркируются, ведь
>
>у него протокол icmp, поэтому он попадает в некласифицированный трафик?
или они маркируются дважды.....
>>Сходу напрашивается ответ, может у Вас пакеты протокол пинга не маркируются, ведь
>>
>>у него протокол icmp, поэтому он попадает в некласифицированный трафик?
>
>
>или они маркируются дважды.....Плохо понял причем тут icpm-протокол. Я говорю об игре Counter-Strike (udp, порт 27015). То же самое относительно других онлайн-приложений, которые чувствительны к задержкам. Классифицируется весь трафик и попадает в нужные классы тоже верно.