Страница 1 из 2

ipfw, queue, pipe

Добавлено: 2010-07-09 21:46:21
zheka
Не могу понять как реализовать следующее: нужно настроить ipfw так чтобы он выделял группе компьютеров более приоритетный канал но с ограниченной скоростью. Т.е. из 4 Мбит только 2 к примеру. Если создать две трубы 2 и 4 мегабита и привязать к ним очереди то они (очереди) между собой конкурировать не будут. Если обе очереди завернуть в одну трубу, тогда нельзя будет ограничить скорость приоритетного потока. Пока пришла только одна мысль, обе очереди загнать в 4-х мегабитную трубу, после которой приоритетный трафик ещё раз завернуть в трубу, только уже на 2 мегабита, но чтото извращением попахивает. Как это можно решить?

Re: ipfw, queue, pipe

Добавлено: 2010-07-10 13:24:46
zheka
Сделал так

Код: Выделить всё

ipfw pipe 100 config bw 100Kbit/s queue 5Kbytes
ipfw pipe 240 config bw 240Kbit/s queue 10Kbytes

ipfw queue 10 config pipe 240 weight 10
ipfw queue 90 config pipe 240 weight 90

ipfw 45510 queue 90 ip from any to $pc1
ipfw 45520 queue 10 ip from any to $pc2
ipfw 45530 pipe 100 ip from any to $pc1
Вроде работает, может кому пригодится

Re: ipfw, queue, pipe

Добавлено: 2010-08-20 10:25:20
mediamag
кстати актуальный вопрос и для меня. Есть канал 4 мбита. Расппихал юзеров в 3 таблицы и порезал скорость. 1-4мбит 2-1 мбит, 3-512кбит. Задача такова: распихать в группы всю подсеть( сделано), разграничить группы по скорости(сделано). Разграничить приоритеты группам и сделать очереди, чтобы когда качала чтото более привилегированная группа, остальным скорость попускалась, а если привилегированной группы айпи нет в сети, то остальным инет поднимался, но не выше чем установленое значение. Вот как такое реализовать - понять не могу. Вот мои пайпы - мож кто подскажет

Код: Выделить всё

#----pipe 1 for Table 1 (super user) --------------------

#download
$fwcmd add 1 pipe 1 ip from not $intip to "table(1)" out
$fwcmd pipe 1 config bw 4000Kbit/s
#upload
$fwcmd add 2 pipe 2 ip from "table(1)" to not me in
$fwcmd pipe 2 config bw 1000Kbit/s

#----pipe 2 for Table 2  (all Boss)----------------------

#download
$fwcmd add 3 pipe 3 ip from any to "table(2)" out
$fwcmd pipe 3 config bw 512Kbit/s mask dst-ip 0xffffffff
#upload
$fwcmd add 4 pipe 4 ip from "table(2)" to any in
$fwcmd pipe 4 config bw 256Kbit/s mask src-ip 0xffffffff

#----pipe 3 for Table 3 (other users)-------------------

#download
$fwcmd add 5 pipe 5 ip from any to "table(3)" out
$fwcmd pipe 5 config bw 512Kbit/s
#upload
$fwcmd add 6 pipe 6 ip from "table(3)" to any in
$fwcmd pipe 6 config bw 128Kbit/s
ЗЫ вопрос - что даёт значение queue 5Kbytes в этом правиле

Код: Выделить всё

ipfw pipe 100 config bw 100Kbit/s queue 5Kbytes
??????

Re: ipfw, queue, pipe

Добавлено: 2010-08-20 10:59:14
hizel
прогонять через две очереди с one_pass
по поводу queue написано в man ipfw

Re: ipfw, queue, pipe

Добавлено: 2010-08-20 12:36:40
mediamag
Насколько я правильно понял, сделал вот так:

Код: Выделить всё

$fwcmd pipe 1 config bw 4000Kbit/s queue 100
$fwcmd pipe 2 config bw 1000Kbit/s queue 100
$fwcmd pipe 3 config bw 512Kbit/s queue 100 mask dst-ip 0xffffffff

$fwcmd queue 1 config pipe 1 queue 100 weight 90 mask dst-ip 0xffffffff
$fwcmd queue 2 config pipe 3 queue 100 weight 60 mask dst-ip 0xffffffff
$fwcmd queue 3 config pipe 5 queue 100 weight 40 mask dst-ip 0xffffffff

#download
$fwcmd add 4 pipe 1 ip from not $intip to "table(1)" out
#upload
$fwcmd add 5 pipe 2 ip from "table(1)" to not me in

#download
$fwcmd add 6 pipe 3 ip from any to "table(2)" out
#upload
$fwcmd add 7 pipe 4 ip from "table(2)" to any in
и т.д.

Re: ipfw, queue, pipe

Добавлено: 2010-08-20 12:49:52
hizel

Код: Выделить всё

$fwcmd add 4 pipe 1 ip from not $intip to "table(1)" out
что это
разве не

Код: Выделить всё

$fwcmd add 4 queue 1 ip from not $intip to "table(1)" out
?

Код: Выделить всё

$fwcmd pipe 3 config bw 512Kbit/s queue 100 mask dst-ip 0xffffffff
эта нарезка скоростей для части клиентов?
тогда она должна идти до общей балансировки по пути паета

Re: ipfw, queue, pipe

Добавлено: 2010-08-20 15:40:19
mediamag
Видоизменил пайпы. Потестил. Внутри группы скорость равномерно делится если юзеры начинают качать один за другим и увеличивается до максимум (для этой группы) если качает один юзер. Но не получается выставить приоритет для трёх групп - если качаю с главной группы, то скорость максималка, если вместе со мной качает юзер со второй группы, ему даётся 30-40 кб\сек и у меня попускается скорость на эти 30-40 кб. Если со мной качает юзер с третьей (самой низкоприорететной) группы, ему даются теже 30-40 кб как для второй группы а у меня -60 кб\сек. Вот какие пайпы у меня получились:

Код: Выделить всё

#---- Pipes config -------------------------------------

$fwcmd pipe 1 config bw 4000Kbit/s # download chanel
$fwcmd pipe 2 config bw 1000Kbit/s # upload chanel
$fwcmd pipe 3 config bw 512Kbit/s # download Boss
$fwcmd pipe 4 config bw 256Kbit/s  # upload Boss
$fwcmd pipe 5 config bw 512Kbit/s # download other users
$fwcmd pipe 6 config bw 128Kbit/s # upload other users
$fwcmd pipe 7 config bw 512Kbit/s # download m2m
$fwcmd pipe 8 config bw 256Kbit/s # upload m2m

#---- Queues configs --------------------------------------------------

$fwcmd queue 1 config pipe 1 queue 100 weight 60 mask dst-ip 0xffffffff
$fwcmd queue 2 config pipe 3 queue 45 weight 30 mask dst-ip 0xffffffff
$fwcmd queue 3 config pipe 5 queue 30 weight 10 mask dst-ip 0xffffffff

#----pipe 1 for Table 1 (super user) --------------------

#download
$fwcmd add 1 queue 1 ip from not $intip to "table(1)" out
#upload
$fwcmd add 2 pipe 2 ip from "table(1)" to not me in

#----pipe 2 for Table 2  (all Boss)----------------------

#download
$fwcmd add 3 queue 2 ip from any to "table(2)" out
#upload
$fwcmd add 4 pipe 4 ip from "table(2)" to any in

#----pipe 3 for Table 3 (other users)-------------------

#download
$fwcmd add 5 queue 3 ip from any to "table(3)" out
#upload
$fwcmd add 6 pipe 6 ip from "table(3)" to any in

#----pipe 4 for Table 4 (m2m users)---------------------

#download
$fwcmd add 7 pipe 7 ip from any to "table(4)" out
#upload
$fwcmd add 8 pipe 8 ip from "table(4)" to any in
С равномерным разделением внутри группы справился, теперь хотелось бы выставить приоритеты групп.

Re: ipfw, queue, pipe

Добавлено: 2010-08-21 11:39:37
mediamag
Вот еще немного видоизменил пайпы - так намного правильнее....мож кому пригодится. 3 группы разделенные по приоритетам+каждая группа имеет своё ограничение по скорости кроме первой.(всего канал 4 мбита). В каждой группе канал делится на юзеров поровну (например: качает один юзер в группе3 с максимальной для этой группы скоростью 512к, начинает качать второй юзер из этой же группы - скорость равномерно режется и так далее.) Очереди и приоритет имеет только входящий канал, исходящий просто ограничен по скоростям.

Код: Выделить всё

#---- Pipes config ----------------------------------------------

$fwcmd pipe 1 config bw 4000Kbit/s queue 100 # download table 1 super users
$fwcmd pipe 2 config bw 1000Kbit/s # upload table 1 super users
$fwcmd pipe 3 config bw 512Kbit/s queue 45 # download table 2 Boss
$fwcmd pipe 4 config bw 256Kbit/s  # upload table 2 Boss
$fwcmd pipe 5 config bw 512Kbit/s queue 30 # download table 3 other users
$fwcmd pipe 6 config bw 128Kbit/s # upload table 3 other users
$fwcmd pipe 7 config bw 512Kbit/s # download table 4 m2m
$fwcmd pipe 8 config bw 256Kbit/s # upload table 4 m2m

#---- Queues configs -------------------------------------------------

$fwcmd queue 1 config pipe 1 queue 100 weight 60 mask dst-ip 0xffffffff
$fwcmd queue 2 config pipe 3 queue 45 weight 30 mask dst-ip 0xffffffff
$fwcmd queue 3 config pipe 5 queue 30 weight 10 mask dst-ip 0xffffffff

#----pipe 1 for Table 1 (super user) --------------------

#download
$fwcmd add 1 queue 1 ip from not $intip to "table(1)" out
#upload
$fwcmd add 2 pipe 2 ip from "table(1)" to not me in

#----pipe 2 for Table 2  (all Boss)----------------------

#download
$fwcmd add 3 queue 2 ip from any to "table(2)" out
#upload
$fwcmd add 4 pipe 4 ip from "table(2)" to any in

#----pipe 3 for Table 3 (other users)-------------------

#download
$fwcmd add 5 queue 3 ip from any to "table(3)" out
#upload
$fwcmd add 6 pipe 6 ip from "table(3)" to any in

#----pipe 4 for Table 4 (m2m users)---------------------

#download
$fwcmd add 7 pipe 7 ip from any to "table(4)" out
#upload
$fwcmd add 8 pipe 8 ip from "table(4)" to any in

Re: ipfw, queue, pipe

Добавлено: 2010-08-26 14:58:13
mediamag
Понял, что для для моего случая weight не нужно, ибо разделил канал частями

Код: Выделить всё

#---- Pipes config -------------------------------------------------------

$fwcmd pipe 1 config bw 2027Kbit/s queue 100 # download table 1 super users
$fwcmd pipe 2 config bw 700Kbit/s # upload table 1 super users
$fwcmd pipe 3 config bw 1014Kbit/s queue 60 # download table 2 Boss
$fwcmd pipe 4 config bw 256Kbit/s  # upload table 2 Boss
$fwcmd pipe 5 config bw 760Kbit/s queue 60 # download table 3 other users
$fwcmd pipe 6 config bw 128Kbit/s # upload table 3 other users
$fwcmd pipe 7 config bw 256Kbit/s # download table 4 m2m
$fwcmd pipe 8 config bw 256Kbit/s # upload table 4 m2m

#---- Queues configs -----------------------------------------

$fwcmd queue 1 config pipe 1 queue 100 mask dst-ip 0xffffffff
$fwcmd queue 2 config pipe 3 queue 60 mask dst-ip 0xffffffff
$fwcmd queue 3 config pipe 5 queue 60 mask dst-ip 0xffffffff

#----pipe 1 for Table 1 (super user) --------------------

#download
$fwcmd add 1 queue 1 ip from not $intip to "table(1)" out
#upload
$fwcmd add 2 pipe 2 ip from "table(1)" to not me in

#----pipe 2 for Table 2  (all Boss)----------------------

#download
$fwcmd add 3 queue 2 ip from any to "table(2)" out
#upload
$fwcmd add 4 pipe 4 ip from "table(2)" to any in

#----pipe 3 for Table 3 (other users)-------------------

#download
$fwcmd add 5 queue 3 ip from any to "table(3)" out
#upload
$fwcmd add 6 pipe 6 ip from "table(3)" to any in

#----pipe 4 for Table 4 (m2m users)---------------------

#download
$fwcmd add 7 pipe 7 ip from any to "table(4)" out
#upload
$fwcmd add 8 pipe 8 ip from "table(4)" to any in
при

Код: Выделить всё

ipfw queue show
вижу это

Код: Выделить всё

q00001: weight 1 pipe 1  100 sl. 3 queues (64 buckets) droptail
    mask: 0x00 0x00000000/0x0000 -> 0xffffffff/0x0000

q00002: weight 1 pipe 3   60 sl. 15 queues (64 buckets) droptail
    mask: 0x00 0x00000000/0x0000 -> 0xffffffff/0x0000

q00003: weight 1 pipe 5   60 sl. 19 queues (64 buckets) droptail
    mask: 0x00 0x00000000/0x0000 -> 0xffffffff/0x0000
не совсем понятен параметр

Код: Выделить всё

weight 1
. Наверно дефолтное значение, но как правильно его понимать в данном случае?

Re: ipfw, queue, pipe

Добавлено: 2010-08-26 15:10:13
hizel
понимать как одинаковый вес всех очередей внутри трубы

Re: ipfw, queue, pipe

Добавлено: 2010-08-26 17:52:02
mediamag
понял..спасибо..то что нужно

Re: ipfw, queue, pipe

Добавлено: 2010-08-27 7:30:23
zheka
А почему б сразу не отправить входящий поток на пайпы? Я просто не понимаю смысл очередей в данном примере

Re: ipfw, queue, pipe

Добавлено: 2010-08-27 20:56:16
mediamag
не будет равно приоритетных очередей. Не получится внутри группы поделить выданый ей канал...я же писал выше, что делают эти пайпы
В каждой группе канал делится на юзеров поровну (например: качает один юзер в группе3 с максимальной для этой группы скоростью 512к, начинает качать второй юзер из этой же группы - скорость равномерно режется и так далее.

Re: ipfw, queue, pipe

Добавлено: 2010-08-30 7:33:11
zheka
А с чего этим очередям иметь разный приоритет?
Если вместо

Код: Выделить всё

#download
$fwcmd add 1 queue 1 ip from not $intip to "table(1)" out
#upload
$fwcmd add 2 pipe 2 ip from "table(1)" to not me in
поставить

Код: Выделить всё

#download
$fwcmd add 1 pipe 1 ip from not $intip to "table(1)" out
#upload
$fwcmd add 2 pipe 2 ip from "table(1)" to not me in
Это должно привести к аналогичному эффекту

Re: ipfw, queue, pipe

Добавлено: 2010-08-30 14:05:33
mediamag
второй пример ограничит 1 таблице юзеров канал в N mbit ...если какой то вася из этой группы начнет качать на скрости N, все остальные будут стоять. А в моём случае скорость разделяется поровну и никто некому не мешает

Re: ipfw, queue, pipe

Добавлено: 2010-08-31 8:01:58
zheka
Я не уверен на 100%, но мне кажется что установление маски для очереди влияет на создание экземпляров очередей, т.е. если качают 10 пользователей, то будет создано 10 очередей, которые будут направлены на одну трубу, и канал они будут делить в соответствии с весам очередей. Маска для пайпов соответственно создаёт экземпляры пайпов. Жаль нет под рукой FreeBSD проверить.

Re: ipfw, queue, pipe

Добавлено: 2010-08-31 12:10:49
mediamag
я тестил свои правила и могу с уверенностью сказать, что работает так, как и задумывалось.

Re: ipfw, queue, pipe

Добавлено: 2010-09-04 14:17:23
mediamag
формула для расчёта gred, размера очередей в зависимости от скорости

Код: Выделить всё

скорость ужата каналом в 256 кб\сек.Чтобы очереди работали правильно и небыло битых пакетов, необходимо выставить такой размер очереди, который бы в итоге обеспечил бы не более 0,5 секунд задержки. ЕЕ мы и вычислим...подставляем от балды значение queue_size (MTU всегда постоянна - примерно 1492...умножаем на 8, чтобы перевести в биты (у нас то все расчёты в битах))
QUEUE_TOTAL= MTU*QUEUE_SIZE = (1492*8)*50 = 11936*50 = 596800 бит
время задержки:
T = QUEUE_TOTAL/BANDWIDTH = 596800/262144 = ~2,276 секунды.
где, BANDWIDTH = 256 * 1024 = 262144 бит (переводим всё в биты)
получили 2,2 секунды - много!!!!! нужно хотябы 0,5
и так подставляем QUEUE_SIZE, пока не получим 0,5 секунд задержки (для моего случая это 12)
расчитываем gred.
max_th = 12/2 = 6
min_th = 6/3 = 2
тоесть для max_th надо размер очередей поделить на 2 - это будет верхний порог, а для min_th нужно верхний порог поделить на 3
вот и получаем
ipfw pipe 1 config bw 256Kbit/s queue 12 gred 0.002/2/6/0.1 (параметр 0,002 и 0,1 считаются чтото типа идеальных и менять их не стоит.)
Соответственно имеем более мягкую нарезку скорости
Коменты и поправки приветствую

Re: ipfw, queue, pipe

Добавлено: 2010-09-15 10:52:45
mediamag
заметил какую то идиотскую особенность....нас 3 в группе...скорость 240 кб поделил на троих равномерно....начинают качать 2 юзера, вроде бы всё чётко...скорость у каждого по 120 кб...тут вклиниваюсь я....у них скорость делится (по 80 на рыло получается)...вроде всё гуд...но в какой то момент (закономерности пока найти не могу) у кого то из нас скорость падает до 10 кб (если качаешь) или если лазиешь по страничкам, то ощущается дискомфорт при их загрузке. Происходит сия картина в хаотичный отрезок времени, если те два юзера в группе качают уже примерно час.

Вот конфиг на эту группу.

Код: Выделить всё

$fwcmd pipe 1 config bw 2027Kbit/s queue 80 # download table 1 super users
$fwcmd pipe 2 config bw 700Kbit/s # upload table 1 super users
$fwcmd queue 1 config pipe 1 queue 80 mask dst-ip 0xffffffff gred 0.002/13/40/0.1
#----pipe 1 for Table 1 (super user) --------------------
#download
$fwcmd add 1 queue 1 ip from not $intip to "table(1)" out
#upload
$fwcmd add 2 pipe 2 ip from "table(1)" to not me in
вот выхлоп ipfw queue show для этой группы

Код: Выделить всё

q00001: weight 1 pipe 1   80 sl. 4 queues (64 buckets)
          GRED w_q 0.001999 min_th 13 max_th 40 max_p 0.099991
    mask: 0x00 0x00000000/0x0000 -> 0xffffffff/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
 11 ip           0.0.0.0/0           10.0.0.11/0     486249 394404960  0    0 1764
 12 ip           0.0.0.0/0           10.0.0.12/0     2906584 4042267078  0    0 22235
 13 ip           0.0.0.0/0          10.0.0.141/0     96723 47810597  0    0 404
 14 ip           0.0.0.0/0           10.0.0.14/0     2623577 3879447251  0    0 61402
Может нехватает длины очереди? Как понять почему идут тормоза?

Re: ipfw, queue, pipe

Добавлено: 2010-09-15 11:35:36
mediamag
только что тормоза увеличились. скорость по спидтесту 0,1...думал пров порезал скорость (бывает за неуплату). закоментил весь думинет и реснул комп...все залетало....

Re: ipfw, queue, pipe

Добавлено: 2010-09-17 14:17:22
mediamag
инет на некоторых компах идёт рывками...странно всё это

Re: ipfw, queue, pipe

Добавлено: 2010-09-17 16:44:43
mediamag
не подскажет ли кто нить, как можно проверить трубу на предмет нехватки очередей?

Re: ipfw, queue, pipe

Добавлено: 2010-10-04 18:41:56
mediamag
люди добрые ну подскажите хоть что нить...подобная трабла возникает в хаотичном порядке и закономерностей нет

Re: ipfw, queue, pipe

Добавлено: 2010-10-04 18:49:56
hizel
а что мешает таки делать разделение в обе стороны?

Re: ipfw, queue, pipe

Добавлено: 2010-10-04 19:39:36
mediamag
я сделал разделение на dst-ip и src-ip...это как то связанно с тормозами и рывками которые я испытываю?

Код: Выделить всё

q00001: weight 1 pipe 1   20 sl. 5 queues (64 buckets)
          GRED w_q 0.001999 min_th 3 max_th 10 max_p 0.099991
    mask: 0x00 0x00000000/0x0000 -> 0xffffffff/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
  6 ip           0.0.0.0/0            10.0.0.6/0     5616  7667965  0    0  30
 10 ip           0.0.0.0/0           10.0.0.10/0      700   992331  0    0   1
 11 ip           0.0.0.0/0           10.0.0.11/0     3870  4795537  0    0  59
 12 ip           0.0.0.0/0           10.0.0.12/0       72    42423  0    0   0
 13 ip           0.0.0.0/0          10.0.0.141/0     46808 14921069  0    0 320

q00005: weight 1 pipe 5   40 sl. 20 queues (64 buckets)
          GRED w_q 0.001999 min_th 7 max_th 20 max_p 0.099991
    mask: 0x00 0xffffffff/0x0000 -> 0x00000000/0x0000