stelsik Posted April 14, 2009 (edited) · Report post Проблемато небольшая нужно шейпить исходящий траффик на 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" Edited April 14, 2009 by stelsik Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
micros Posted April 14, 2009 · Report post уверен по коду ошибки в гугле много интересного. И если пишет "is big" - мобыть он действительно слишком big? ;) а зачем такое большое значение id? (10000) у вас такое количество ppp интерфейсов? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
stelsik Posted April 14, 2009 · Report post Я тоже уверен что по коду ошибки в гугле много чего интересного, к делу, отношение имеет косвенное, так как ошибка в построении классов. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
micros Posted April 14, 2009 (edited) · Report post Не вижу там нигде 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 както так. когда вылезет ошибка - ее легче будет найти по номеру строки. Edited April 14, 2009 by micros Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
stelsik Posted April 14, 2009 · Report post micros спасибо за замечания поправил немного Вот так он пишет quantum of class 10001 is big. Consider r2q changeМожет всетаки этот quantum уменьшить, хотя в манах вроде написано что наоборот увеличивать надо Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
micros Posted April 14, 2009 · Report post так там про 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? уберите его, пусть дефолтовым будет. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
stelsik Posted April 14, 2009 · Report post Я тут покапал вот что нашел 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 а более Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
micros Posted April 14, 2009 · Report post да. или убрать этот параметр, и он посчитается автоматически ;0) quantum = rate / r2q следуя правилу, не уходить от quantum 1500, я бы считал r2q зная quantum и рейт. вы либо оставьте quantum и рейт и не указывайте r2q (я так делаю, и видел множество примеров), либо укажите рейт и r2q, а quantum не трогайте. В любом случае r2q - это сумма для всех классов, если у вас после запуска шейпера создаются еще классы, берите r2q с запасом. П.С. если quantum будет отличаться от МТУ по-моему получиться фрагментация пакетов. что не есть хорошо (может что и путаю, но где то читал) пробуйте. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
technolab Posted April 27, 2011 · Report post 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 - юзайте константы и будет вам счастье. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
technolab Posted April 27, 2011 · Report post для примера на канал 900 мегабит $TC->("qdisc add dev $dev root handle 1: htb r2q 37500"); автоматом будет посчитан quantum = 3000 ровно таким же макаром нужно считать для дочек Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Dimka88 Posted April 6, 2018 · Report post В 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; } Может кому пригодится. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
kayot Posted April 7, 2018 · Report post Для современных скоростей можно и нужно сразу задавать quantum=200000. Но к теме это отношения не имеет никакого, данные сообщения на работу HTB не влияют. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...