Страница 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
при
вижу это
Код: Выделить всё
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
не совсем понятен параметр
. Наверно дефолтное значение, но как правильно его понимать в данном случае?
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