LINUX.ORG.RU
решено ФорумAdmin

Помогите найти ошибку в скрипте

 ,


0

1

Hi, all!

Никак не могу найти, в чём проблема.

Шейпингом на сервере занимается вот такой скрипт:

http://pastebin.com/wii9CPK2

При его выполнении в dmesg сыпятся строчки (и много) вида:

[160680.683602] HTB: quantum of class 10117 is big. Consider r2q change.
[160680.744840] HTB: quantum of class 10118 is big. Consider r2q change.
[160680.801157] HTB: quantum of class 10119 is big. Consider r2q change.
[160680.854740] HTB: quantum of class 10120 is big. Consider r2q change.
[160680.905973] HTB: quantum of class 10121 is big. Consider r2q change.
[160680.942236] HTB: quantum of class 10122 is big. Consider r2q change.
Хотя массив сейчас не многим больше 100 пользователей.

Проверил, максимальное значение переменной j = 128. Так откуда берутся эти десятки тысяч? Please help!

★★★★★

Последнее исправление: fractaler (всего исправлений: 2)

оберни в
set -x / set +x
те места где накручивает счётчик. stderr баш-скрипта выкинь в файл. наверное ты где-то не инкремент делаешь, а конкатенацию

bl ★★★
()

Какие тысячи ? там все в hex. класс 1:127 это 0x0001:0x0127 что сокращено до 10127

Проблема в том, что классы имеют слишком разные скорости и для некоторых r2q получается слишком большое.

В гугле есть внятное разъяснение про это.

vel ★★★★★
()
Ответ на: комментарий от vel

HEX!?! Значит, число 123, которое передаёт баш воспринимается как HEX?!? Так, я пошёл переписывать цикл.

fractaler ★★★★★
() автор топика
Ответ на: комментарий от post-factum

Перевести я и сам могу :)
Лучше скажи, как это сделать. Методом тыка менять htb на r2q что-то не хочется. Могут быть другие аргументы и пр. Надо читать маны, а это дело не быстрое.

Лучше переведи: quantum of class 10122 is big. Что это за число класса? Что оно показывает и где его взять? Я как-то подумал, что это то самое $j в скрипте.

fractaler ★★★★★
() автор топика
Последнее исправление: fractaler (всего исправлений: 1)
Ответ на: комментарий от post-factum

Я на 100 мбит ставлю в корень r2q 1000, а на ветви quantum 2000, и сообщение пропадает.

т.е.?

$TC qdisc add dev $DEV_OUT root handle 1: r2q default 1000
$TC qdisc add dev $DEV_IN root handle 1: r2q default 1000
А где quantum выставляется?

fractaler ★★★★★
() автор топика
Последнее исправление: fractaler (всего исправлений: 1)
Ответ на: комментарий от post-factum

А, всё, понял, что гуглить, r2q нашёл, сообщение уже пропало. Сейчас до quantum доберусь.

Спасибо тебе большое, человечище!!!

fractaler ★★★★★
() автор топика
Ответ на: комментарий от fractaler

quantum указывается в классах кроме корневого.

Есть связь между параметрами

quantum = rate / r2q
mtu <= quantum <= 60000

При большой разнице rate в конечных классах невозможно подобрать r2q которое удовлетворяло все классы.

Сильно увеличивать quantum в у конечных классов тоже не очень хорошо.

vel ★★★★★
()
Ответ на: комментарий от fractaler
# grep -E 'quantum|r2q' /etc/rc.d/rc.tc
    $TC qdisc add dev $DEV_OUT root handle 1: htb default 1000 r2q 2000
        $TC qdisc add dev $DEV_OUT parent 1:$j handle $j: sfq perturb 5 quantum 1000
    $TC qdisc add dev $DEV_IN root handle 1: htb default 17 r2q 2000
         $TC qdisc add dev $DEV_IN parent 1:$j handle $j: sfq perturb 5 quantum 1000
fractaler ★★★★★
() автор топика
Последнее исправление: fractaler (всего исправлений: 1)
Ответ на: комментарий от vel

Спасибо. Я чуть позже переработаю скрипт так, чтобы у классов с разной скоростью значение quantum было разным. И величину подберу.

fractaler ★★★★★
() автор топика
Ответ на: комментарий от fractaler

quantum должен быть больше mtu

Вообще ругань на r2q не смертельна - просто точность ограничения скорости будет ниже.

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 1)
Ответ на: комментарий от vel

Ну, как бы то ни было, спасибо! Проблема решена и всё понятно.

fractaler ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.