Перейти к содержимому
Калькуляторы

Помогите с шейпером в линукс HTB TC

Проблемато небольшая нужно шейпить исходящий траффик на ppp интерфейсах, вроде все сделал правильно, и даже все работает, но HTB ругается благим матом на меня

 

            /sbin/tc qdisc add dev $1 root handle 1: htb default 20 r2q 1
            /sbin/tc class add dev $1 parent 1: classid 1:1 htb rate 25mbit burst 256k
            /sbin/tc class add dev $1 parent 1:1 classid 1:10 htb rate ${UPSPEED}kbit burst 256k prio 1
            /sbin/tc class add dev $1 parent 1:1 classid 1:20 htb rate ${UPSPEED}kbit burst 256k prio 2
            /sbin/tc class add dev $1 parent 1:1 classid 1:30 htb rate 20mbit burst 512k prio 2
            /sbin/tc qdisc add dev $1 parent 1:10 handle 10: sfq perturb 10 quantum 1500
            /sbin/tc qdisc add dev $1 parent 1:20 handle 20: sfq perturb 10 quantum 1500
            /sbin/tc qdisc add dev $1 parent 1:30 handle 30: sfq perturb 10 quantum 1500
            /sbin/tc filter add dev $1 parent 1:0 protocol ip prio 10 u32 match ip src net/pref flowid 1:30
            /sbin/tc filter add dev $1 parent 1:0 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 1:10
            /sbin/tc filter add dev $1 parent 1:0 protocol ip prio 10 u32 match ip protocol 1 0xff flowid 1:10
            /sbin/tc filter add dev $1 parent 1: protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u160x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:10

По сути нужно дать полосу для выделенной сетки одну, а в интернет другую как на ${UPSPEED}

Ругается на класс 10001 и 10030 что они "is big"

Изменено пользователем stelsik

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

уверен по коду ошибки в гугле много интересного.

И если пишет "is big" - мобыть он действительно слишком big? ;)

а зачем такое большое значение id? (10000) у вас такое количество ppp интерфейсов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я тоже уверен что по коду ошибки в гугле много чего интересного, к делу, отношение имеет косвенное, так как ошибка в построении классов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не вижу там нигде 10001 и т.д. разве что закралась пара мелочей

вот в этой строке.

/sbin/tc filter add dev $1 parent 1: protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u160x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:10

 

match u8 0x10 0xff at 33
Насколько знаю я - длина заголовка айпи пакета = 32 байт и У32 может анализировать только его. (честно, не интересовался пока на предмет анализа всего пакета)

 

u160x0000
здесь наверно пробел нужно поставить :) , ну это если вы копировали.

 

ИМХО если фильтр сложный и имеет несколько классификаторов - легче записать в несколько строк.

 

/sbin/tc filter add dev $1 parent 1: protocol ip prio 10 u32 \
       match ip protocol 6 0xff \
       match u8 0x05 0x0f at 0 \
       match u160x0000 0xffc0 at 2 \
       match u8 0x10 0xff at 33 \
       flowid 1:10

 

както так.

когда вылезет ошибка - ее легче будет найти по номеру строки.

Изменено пользователем micros

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

micros спасибо за замечания поправил немного

Вот так он пишет

quantum of class 10001 is big. Consider r2q change
Может всетаки этот quantum уменьшить, хотя в манах вроде написано что наоборот увеличивать надо

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

так там про quantum ругательства, а не про класс.

насколько я знаю, quantum, должен быть равен mtu. а это 1500

 

quantum

 

Amount of bytes a stream is allowed to dequeue before the next queue gets a turn. Defaults to 1 maximum sized packet (MTU-sized). Do not set below the MTU!

У вас случаем не стоит нигде больше этого значения? например вон в том классе, где ругается?

 

параметр R2Q используется для квантования трафика в

классах. В случае малых скоростей рекомендуется значение = 1, что

позволяет шейпить с точностью до 4kbit. Если не указан, то =10,

что для скоростей >120Kbit.

http://www.opennet.ru/base/net/htb_saga.txt.html

 

у вас же не мизерные скорости, наверняка тарифы начинаются от 128? уберите его, пусть дефолтовым будет.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я тут покапал вот что нашел

Changing burst will not remove the warning. r2q is "rate to quantum" is used

to calculate the quantum for each class : quantum = rate / r2q. Quantum must

be 1500 < quantum < 60000. Otherwise you will get warnings from the kernel.

Solution : choose r2q so for each class 1500 < quantum < 60000

Or choose the best r2q you can and specify the quantum manually if you add a

class.

Получается r2q надо увеличивать и явно не до 10 а более

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

да. или убрать этот параметр, и он посчитается автоматически ;0)

 

quantum = rate / r2q

следуя правилу, не уходить от quantum 1500, я бы считал r2q зная quantum и рейт.

 

вы либо оставьте quantum и рейт и не указывайте r2q (я так делаю, и видел множество примеров), либо укажите рейт и r2q, а quantum не трогайте.

В любом случае r2q - это сумма для всех классов, если у вас после запуска шейпера создаются еще классы, берите r2q с запасом.

 

П.С. если quantum будет отличаться от МТУ по-моему получиться фрагментация пакетов. что не есть хорошо (может что и путаю, но где то читал)

пробуйте.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

MTU - максимальный размера блока в байтах который может быть передан.

Quantum - число байт, которые может передать поток перед переходом к следующему классу, по умолчанию = MTU интерфейса. Расчет распределения канала тем точнее, чем меньше это значение.

R2Q - глобальный параметр, по умолчанию R2Q = 10, если Quantum указан, то R2Q игнорируется.

 

Немного констант:

quantum = rate / r2q

mtu ≤ quantum ≤ 60000

 

Соответственно:

quantum is small => RATE / R2Q < MTU

quantum is big => RATE / R2Q > 60000

 

Во избежании фрагментации, вероятно, quantum лучше задавать кратным значению mtu

 

А вообще, если quantum не задавать, то он будет расчитан автоматически. Правда следует определиться со значением R2Q - юзайте константы и будет вам счастье.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

для примера на канал 900 мегабит

$TC->("qdisc add dev $dev root handle 1: htb r2q 37500");

автоматом будет посчитан quantum = 3000

 

ровно таким же макаром нужно считать для дочек

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В 27.04.2011 в 22:19, technolab сказал:

Соответственно:

quantum is small => RATE / R2Q < MTU

quantum is big => RATE / R2Q > 60000

В чате проекта accel-ppp.org завели дискуссию о шейпере, конкретнее о сообщениях.

Цитата

HTB: quantum of class 16AC4 is big. Consider r2q change

Сразу вспомнилась эта тема и статья в интернете с которой эта тема линкуется, ну и собственно значения, которыми руководствовался RATE / R2Q > 60000

В исходниках ядра есть sch_htb.c и собственно там следующие значения. quantum < 1000 - is small  и quantum > 200000 - is big

int rate2quantum;  /* quant = rate / rate2quantum */

...

if (!hopt->quantum && cl->quantum < 1000) {
			printk(KERN_WARNING
			       "HTB: quantum of class %X is small. Consider r2q change.\n",
			       cl->common.classid);
			cl->quantum = 1000;
		}
  
...
 
if (!hopt->quantum && cl->quantum > 200000) {
			printk(KERN_WARNING
			       "HTB: quantum of class %X is big. Consider r2q change.\n",
			       cl->common.classid);
			cl->quantum = 200000;
		}

Может кому пригодится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Для современных скоростей можно и нужно сразу задавать quantum=200000.

Но к теме это отношения не имеет никакого, данные сообщения на работу HTB не влияют.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.