Ключевые слова:freebsd, ipfw, bandwidth, traffic, link, shaper, queue, qos, (найти похожие документы)
Date: Wed, 07 Apr 2004 17:33:15 +0600
From: Ivan Voytas <ivan_voytas@atlantm.com>
Newsgroups: ftn.ru.unix.bsd
Subject: Деление между пользователями канала поровну используя ipfw
> есть канал в 128кбит. нужно его делить динамически поровну между юзерами,
> которые в данный момент пользуются этим каналом. как такое сделать
> правильно при помощи ipfw?
аналог WFQ:
add queue 10 ip from 192.168.0.0/24 to any xmit ppp0
queue 10 config mask src-ip 0xffffffff pipe 10
pipe 10 config bw 128Kbit/s
add queue 20 ip from any to 192.168.0.0/24 to any recv ppp0 in
pipe 20 config bw 128Kbit/s
queue 20 config mask dst-ip 0xffffffff pipe 20
Еще в целях уменьшения задержек можно опционально покрутить длину queue и
pipe. Hу и red/gred по вкусу.
Только большой вопрос, что писать в bw. 128 ли? Кто-нибудь знает, будут ли
пакеты пропадать при переполнении очереди выходного интерфейса? Или они
будут скапливаться в пайпах?
From: Dmitry Pryanishnikov <dmitry@atlantis.dp.ua>
> есть канал в 128кбит. нужно его делить динамически поровну между юзерами,
> которые в данный момент пользуются этим каналом. как такое сделать
> правильно при
> помощи ipfw?
Пусть клиенты сидят на серых адресах 192.168.0.0/16, а трафик приходит через
fxp0, тогда динамическая раздача поровну симметричных 128KBit/s будет
выглядеть примерно так:
ipfw pipe 1 config bw 128Kbit/s queue 80Kbytes
ipfw queue 10 config pipe 1 weight 50 queue 80Kbytes mask src-ip 0x0000ffff
ipfw add 5000 queue 10 all from 192.168.0.0/16 to any out via fxp0
<... между 5000 и 10000 должен стоять divert natd для этих сетей ...>
ipfw pipe 2 config bw 128Kbit/s queue 80Kbytes
ipfw queue 20 config pipe 2 weight 50 queue 80Kbytes mask dst-ip 0x0000ffff
ipfw add 10000 queue 20 all from any to 192.168.0.0/16 in via fxp0
From: Ivan Voytas <ivan_voytas@atlantm.com>
> ipfw pipe 1 config bw 128Kbit/s queue 80Kbytes
> ipfw queue 10 config pipe 1 weight 50 queue 80Kbytes mask src-ip 0x0000ffff
> ipfw add 5000 queue 10 all from 192.168.0.0/16 to any out via fxp0
Здесь не нужен weight.
queue - 80Kbytes у пайпа - это 5сек задержки в одну сторону на 128Кбит/с.
В итоге при загруженном канале и одном пользователе имеем 20сек на пинг.
При 10 пользователях имеем 80Kbytes/(128 / 8 / 10Kbytes/s) = 50c на одном
только queue. То есть пинг 110сек :-)
Hеработоспособно в принципе.
Я бы даже наоборот сделал - pipe config queue 10 (или 5, или вообще 1, если
ничему не противоречит) и queue config queue 10.
Причем именно в пакетах, а не килобайтах.
From: Slava Vovk <vovk@km.ua>
>> пилообразность и дропы убираются gred'om, но добится от него результатов
>> можно только на больших очередях, где пинг заоблачный.
>
> Заоблачный - это сколько? Я делал длину очереди равную скорости в
> (Кбит/с)/10 пакетов. Плюс gred. Вроде все нормально было.
add 10000 queue 10 ip from 195.135.200.244/30 to any out
queue 10 config mask src-ip 0xffffffff pipe 10 queue 100 gred 0.002/10/30/0.1
pipe 10 config bw $total64 queue 10
add 10010 queue 20 ip from any to 195.135.200.244/30 in
queue 20 config mask dst-ip 0xffffffff pipe 20 queue 100 gred 0.002/10/30/0.1
pipe 20 config bw $total64 queue 10
пинг при закачке до 22-25 сек.
установки gred'a 0.002/10/30/0.1, взяты из этой конфы, кто-то приводил пример
с месяц назад.
это наиболее "нормальный" WFQ, который мне удалось получить, правда очередь
на пайп меньше 10 я не делал.
а начинал я играться с 5 пакетов на очередь, поэксперементировал данными с
http://ee.tamu.edu/~zzlarry/vprm_red.html, но там похоже нужно апроксимировать
данные под мою скорость.
> Попробуй увеличивать длину очереди и уменьшать длину пайпа одновременно.
> Вплоть до 50-100 на queue и 1-2-5 на pipe.
>
сейчас попробую плавно поуменьшать очередь на пайп, посмотрим.
From: Sergey Zabolotny <Sergey_Zabolotny@p1.f122.n469.z2.fidonet.org>
>> ipfw -q pipe 1 config bw 16Kbit/s queue 80Kbytes
>> ipfw -q queue 10 config pipe 1 weight 50 queue 80Kbytes mask src-ip 0x0000ffff
>> ipfw -q add queue 10 all from 192.168.0.0/16 to any out via ep0
>>
>> ipfw -q add divert 8668 ip from any to any via ep0
>>
>> ipfw -q pipe 2 config bw 16Kbit/s queue 80Kbytes
>> ipfw -q queue 20 config pipe 2 weight 50 queue 80Kbytes mask dst-ip 0x0000ffff
>> ipfw -q add queue 20 all from any to 192.168.0.0/16 in via ep0
>>
>> что я не правильно сделал?
DP> flush сделал? Похоже, что эти правила просто дописались в конец
DP> общего списка, после allow. Если счетчик на последней строчке нулевой,
DP> то так и есть.
нет. все нормально прописано.
вот как выглядит /etc/rc.local
ipfw -q pipe 1 config bw 16Kbit/s queue 80Kbytes
ipfw -q queue 10 config pipe 1 weight 50 queue 80Kbytes mask src-ip 0x0000ffff
ipfw -q add queue 10 all from 192.168.0.0/16 to any out via ep0
ipfw -q add divert 8668 ip from any to any via ep0
ipfw -q pipe 2 config bw 16Kbit/s queue 80Kbytes
ipfw -q queue 20 config pipe 2 weight 50 queue 80Kbytes mask dst-ip 0x0000ffff
ipfw -q add queue 20 all from any to 192.168.0.0/16 in via ep0
ipfw -q add allow ip from any to any via lo0
ipfw -q add deny ip from any to 127.0.0.0/8
ipfw -q add deny ip from 127.0.0.0/8 to any
ipfw -q add allow ip from any to any
Zombie# ipfw show
00100 1255 85480 queue 10 ip from 192.168.0.0/16 to any out xmit ep0
00200 508 79234 divert 8668 ip from any to any via ep0
00300 508 79234 queue 20 ip from any to 192.168.0.0/16 in recv ep0
00400 0 0 allow ip from any to any via lo0
00500 0 0 deny ip from any to 127.0.0.0/8
00600 0 0 deny ip from 127.0.0.0/8 to any
00700 1804 178293 allow ip from any to any
65535 1 56 deny ip from any to any
флэшгет качает на максимально возможной скорости.
Народ, объяните, почему везде 80Kbytes независимо от того, какой bw на pipe?
И, если можно, по подробней с масками. Где надо 0xffffffff, 0x0000ffff, 0x000000ff, 0x00000000 и 0x00000000?
Пример: Если мне надо динамически раздавать трафик поровну в /24 сетке, для каждого хоста (т.е. 1 юзер - 256Kbit/s, 2 юзера - по 128Kbit/s каждому, и т.д.), какую маску указывать в dst-ip и src-ip?
>> ipfw -q pipe 2 config bw 16Kbit/s queue 80Kbytes
>> ipfw -q queue 20 config pipe 2 weight 50 queue 80Kbytes mask dst-ip 0x0000ffff
>> ipfw -q add queue 20 all from any to 192.168.0.0/16 in via ep0
>>
>> что я не правильно сделал?
>>флэшгет качает на максимально возможной скорости.
Скорость пайпы похоже больше скорости канала, а должна быть на 5-10% меньше. Не знаю почему, но только в этом случае начинает работать правильно распределение трафика.
у меня интересный эффект. если сделать все как описано выше - то секунд через 20, 30 машина уходит на ребут. и ничего даже в лог не пишет.
если просто с pipe играться все ок. похоже проблем в queue или в mask & etc
FreeBSD 4.5
ps. знаю что старая но не было надобности переводить ... все работало пока не собрался траффик делить