Страница 1 из 1
FreeBSD 7.2 dummynet
Добавлено: 2009-06-19 12:16:18
gmn
Все привет.
Есть вопрос по dummynet.
Есть хост с FreeBSD 7.2, ядро GENERIC i386.
Код: Выделить всё
ipfw_load="YES"
dummynet_load="YES"
net.inet.ip.fw.one_pass=0
И простейшие правила:
Код: Выделить всё
ipfw -f flush
ipfw -f pipe flush
ipfw -f queue flush
ipfw pipe 1 config bw 100KB/s
ipfw add pipe 1 ip from 10.0.4.74 to any # 10.0.4.74 - IP-адрес хоста.
ipfw add allow all from any to any
Хочу, чтобы скорость от хоста to any ограничена была 100 Кбайт/сек.
Вроде как написано правильно.
Но качаю с ftp с хоста - скорость в два раза меньше - порядка 50-52 Кбайт/сек, но не 100, как указано.
net.inet.ip.dummynet.io_fast 0 или 1 - ситуация не меняется.
В чем может быть проблема?
Re: FreeBSD 7.2 dummynet
Добавлено: 2009-06-19 12:42:14
hizel
так и не понял ху ис ху
где 10.0.4.74 находится?
Re: FreeBSD 7.2 dummynet
Добавлено: 2009-06-19 12:48:59
gmn
hizel писал(а):так и не понял ху ис ху
где 10.0.4.74 находится?
10.0.4.74 - IP-адрес хоста с фришкой, на которой собственно все и проверяю.
Вывод ipfw pipe show:
Код: Выделить всё
00001: 800.000 Kbit/s 0 ms 50 sl. 1 queues (1 buckets) droptail
mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
0 tcp 10.0.4.74/21 10.0.1.74/2628 2623 3352132 0 0 0
ipfw show:
Код: Выделить всё
00100 1420 1803853 pipe 1 ip from 10.0.4.74 to any
00200 35551 4442054 allow ip from any to any
65535 0 0 deny ip from any to any
Скорость закачки с ftp с хоста 10.0.4.74 (где шейпер) на другой хост в сети 50-51 Кбайт/сек, но не 100, как указано в конфиге.
Re: FreeBSD 7.2 dummynet
Добавлено: 2009-06-19 14:35:38
neko
Ибо должно выглядеть как:
Код: Выделить всё
ipfw pipe 1 config bw 100Kbit/s queue 12Kbytes
ipfw pipe 2 config bw 100Kbit/s queue 12Kbytes
ipfw add 100 pipe 1 ip from 10.0.4.74 to any via $IFACE in
ipfw add 200 pipe 2 ip from any to 10.0.4.74 via $IFACE out
если хотите резать одним пайпом по подсети либо табличке - играйтесь маской.
Re: FreeBSD 7.2 dummynet
Добавлено: 2009-06-19 14:58:53
gmn
neko писал(а):Ибо должно выглядеть как:
ipfw pipe 1 config bw 100Kbit/s queue 12Kbytes
ipfw pipe 2 config bw 100Kbit/s queue 12Kbytes
ipfw add 100 pipe 1 ip from 10.0.4.74 to any via $IFACE in
ipfw add 200 pipe 2 ip from any to 10.0.4.74 via $IFACE out
если хотите резать одним пайпом по подсети либо табличке - играйтесь маской.
Прописал именно так - вообще в pipe ничего не попадает.
Код: Выделить всё
00100 0 0 pipe 1 ip from 10.0.4.74 to any via le0 in
00200 0 0 pipe 2 ip from any to 10.0.4.74 via le0 out
00300 88 9268 allow ip from any to any
65535 0 0 deny ip from any to any
Но такой пример, как я указал, не будет разве работать?
Для простоты понимания для себя сделал, что исходящий трафик от хоста to any шейпится (качается файл с фтп на хосте с шейпером).
Входящий - нет.
Должно же работать ...
Re: FreeBSD 7.2 dummynet
Добавлено: 2009-06-19 15:26:22
neko
le0 куда смотрит? да и было бы классно увидеть:
#cat /etc/rc.conf
#ipfw show
#ifconfig
Прописал именно так - вообще в pipe ничего не попадает.
а куда смотрит опять же le0, а вы часом не дивертнули в нат перед этим этот же траффик?
Но такой пример, как я указал, не будет разве работать?
будет выглядеть совсем как настоящий но лучше не надо
Подозреваю что вам в любом случае если уж хочеться одним пайпом резать нужно указать recv/xmit и выкрутить mask dst-ip на пайпе.
Re: FreeBSD 7.2 dummynet
Добавлено: 2009-06-19 15:57:25
gmn
Чтобы понять, как работает ipfw pipe, я упростил для себя задачу.
Отбросил вторую сетевую. Никакого NAT-а. Одна сетевая, которая смотрит в локалку.
Остается только одна карточка - le0. У нее ip 10.0.4.74.
На хосте ftp-демон. Там лежит файл.
Для понимания работы pipe я хочу ограничить через ipfw исходящий с хоста трафик до скорости 100 Кбайт/сек.
Для этого:
/boot/loader.conf
/etc/rc.conf
Код: Выделить всё
ifconfig_le0="inet 10.0.4.74 netmask 255.255.0.0"
firewall_enable="YES"
firewall_script="/etc/firewall.test"
/etc/firewall.test
Код: Выделить всё
ipfw -f flush
ipfw -f pipe flush
ipfw pipe 1 config bw 100KB/s
ipfw add pipe 1 ip from 10.0.4.74 to any
ipfw add allow all from any to any
Для сравнения две виртуалки и идентичными настройками.
Одна - FreeBSD 7.2, вторая - FreeBSD 6.4
На первой скорость закачки файла с ftp при pipe в 100 Кбайт/сек - 50 Кбайт/сек, на второй (6.4) - больше 70 Кбайт/сек, но не 100 всеравно.
Re: FreeBSD 7.2 dummynet
Добавлено: 2009-06-19 16:23:20
hizel
кроме bw следует подбирать как минимум правильную длину queue очереди
а также поднять параметр HZ в ядре
Код: Выделить всё
# DUMMYNET enables the "dummynet" bandwidth limiter. You need IPFIREWALL
# as well. See dummynet(4) and ipfw(8) for more info. When you run
# DUMMYNET it is advisable to also have at least "options HZ=1000" to achieve
# a smooth scheduling of the traffic.
options DUMMYNET
Re: FreeBSD 7.2 dummynet
Добавлено: 2009-06-19 16:30:14
neko
Чтобы понять, как работает ipfw pipe, я упростил для себя задачу.
не понял упрощения в
Отбросил вторую сетевую. Никакого NAT-а. Одна сетевая, которая смотрит в локалку.
если самоцель вырезать фтп по скорости - это отлично делаеться самим proftpd допустим.
с другой стороны 100кбит у вас не получиться ибо всеравно как-то вы пытаетесь это сделать.
Показываю рабочее решение режущее для каждого пользователя сети находящейся в table(2) (10.10.4/24 допустим в вашем случае)
до конкретного хоста (10.10.4.74 допустим в вашем случае) до 4 мбит/с вверх и вниз.
Код: Выделить всё
ipfw pipe 9999 config bw 4096Kbit/s queue 512Kbytes mask dst-ip 0xffffffff
ipfw pipe 9998 config bw 4096Kbit/s queue 512Kbytes mask dst-ip 0xffffffff
ipfw table 2 add 10.10.4/24
ipfw add 5000 pipe 9999 ip from table\(2\) to 10.10.4.74 via le0 in
ipfw add 5000 pipe 9998 ip from 10.10.4.74 to table\(2\) via le0 out
Найдите 10 отличий

Re: FreeBSD 7.2 dummynet
Добавлено: 2009-06-19 16:34:36
neko
а также поднять параметр HZ в ядре
Любопытствую - чисто ради повышения точности шейпинга в данном случае? Не проще ли дать чуть-запаса в bw?
Lower number means faster polling and slightly higher network performance, but more CPU utilization. 1000 Hz has worked well for me on heavy traffic servers.
но это ведь в случае поллинга не так ли?
Re: FreeBSD 7.2 dummynet
Добавлено: 2009-06-19 16:52:24
hizel
нет, это в любом случае, POLLING(4) тут не причём
Re: FreeBSD 7.2 dummynet
Добавлено: 2009-06-19 16:57:26
neko
тобишь кручением HZ>1000 мы переносим нагрузку с [чего?] на CPU, соответственно обратно имеем обратный эффект?
Код: Выделить всё
options HZ=1000 # кол-во просматриваемых пакетов в очереди при шейпинге
Re: FreeBSD 7.2 dummynet
Добавлено: 2009-06-19 16:58:18
gmn
hizel писал(а):кроме bw следует подбирать как минимум правильную длину queue очереди
а также поднять параметр HZ в ядре
Код: Выделить всё
# DUMMYNET enables the "dummynet" bandwidth limiter. You need IPFIREWALL
# as well. See dummynet(4) and ipfw(8) for more info. When you run
# DUMMYNET it is advisable to also have at least "options HZ=1000" to achieve
# a smooth scheduling of the traffic.
options DUMMYNET
Ядро в обоих случаях - GENERIC. Т.е. там "HZ=1000" по умолчанию.
Оба хоста под VMware. Пересобирать ядро - не пересобирал. Подгрузил модули и все.
Re: FreeBSD 7.2 dummynet
Добавлено: 2009-06-19 17:00:25
neko
HZ там вообще никоим боком при таких нагрузках, укажите полюдски xmit/recv и длину queue как уже упомянул господин hizel (скорость/8 оптимально имхо).
Re: FreeBSD 7.2 dummynet
Добавлено: 2009-06-19 17:07:57
gmn
neko писал(а):Чтобы понять, как работает ipfw pipe, я упростил для себя задачу.
не понял упрощения в
Отбросил вторую сетевую. Никакого NAT-а. Одна сетевая, которая смотрит в локалку.
если самоцель вырезать фтп по скорости - это отлично делаеться самим proftpd допустим.
Это понятно. Я же писал, что хочу для понимания работы ipfw pipe сделать лимит средствами ipfw.
с другой стороны 100кбит у вас не получиться ибо всеравно как-то вы пытаетесь это сделать.
Показываю рабочее решение режущее для каждого пользователя сети находящейся в table(2) (10.10.4/24 допустим в вашем случае)
до конкретного хоста (10.10.4.74 допустим в вашем случае) до 4 мбит/с вверх и вниз.
ipfw pipe 9999 config bw 4096Kbit/s queue 512Kbytes mask dst-ip 0xffffffff
ipfw pipe 9998 config bw 4096Kbit/s queue 512Kbytes mask dst-ip 0xffffffff
ipfw table 2 add 10.10.4/24
ipfw add 5000 pipe 9999 ip from table\(2\) to 10.10.4.74 via le0 in
ipfw add 5000 pipe 9998 ip from 10.10.4.74 to table\(2\) via le0 out
Найдите 10 отличий

Это вы режете и входящий и исходящий. Только во второй строчке надо тогда "src-ip" использовать.
Я же хочу резать только исходящий от хоста трафик до 100 Кбайт/сек.
Хорошо, приведите пример, как сделать следующее - ограничить исходящую скорость с хоста до 100 Кбайт/сек (800 Кбит/сек).
Re: FreeBSD 7.2 dummynet
Добавлено: 2009-06-19 17:13:29
neko
Хорошо, приведите пример, как сделать следующее - ограничить исходящую скорость с хоста до 100 Кбайт/сек (800 Кбит/сек).
убрать нафиг ipfw add 5000 pipe 9999 ip from table\(2\) to 10.10.4.74 via le0 in
и соответственно сделать ipfw pipe 9998 config bw 800Kbit/s queue 100Kbytes mask dst-ip 0xffffffff
что в принципе логично.
Re: FreeBSD 7.2 dummynet
Добавлено: 2009-06-19 17:26:51
gmn
neko писал(а):Хорошо, приведите пример, как сделать следующее - ограничить исходящую скорость с хоста до 100 Кбайт/сек (800 Кбит/сек).
убрать нафиг ipfw add 5000 pipe 9999 ip from table\(2\) to 10.10.4.74 via le0 in
и соответственно сделать ipfw pipe 9998 config bw 800Kbit/s queue 100Kbytes mask dst-ip 0xffffffff
что в принципе логично.
И что я делаю не так?

Указал явно IP источника, IP получателя, направление, интерфейс.
Код: Выделить всё
ipfw pipe 9998 config bw 800Kbit/s queue 100Kbytes mask dst-ip 0xffffffff
ipfw add 5000 pipe 9998 ip from 10.0.4.74 to 10.0.4.247 via le0 out
ipfw pipe show
Код: Выделить всё
09998: 800.000 Kbit/s 0 ms 100 KB 1 queues (64 buckets) droptail
mask: 0x00 0x00000000/0x0000 -> 0xffffffff/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
55 ip 0.0.0.0/0 10.0.4.247/0 136 185632 11 16500 0
Скорость закачки - 53,8K/s

Re: FreeBSD 7.2 dummynet
Добавлено: 2009-06-21 13:42:32
tyler56
Какое значение net.inet.ip.fw.one_pass.
У меня под vmware была таже история.
На серверах с фрей иногда также скорость была меньше в два раза требуемой, лечил тем что после очередного рестарта сервера перезапускал dummynet.
Re: FreeBSD 7.2 dummynet
Добавлено: 2009-06-22 9:12:58
gmn
tyler56 писал(а):Какое значение net.inet.ip.fw.one_pass.
У меня под vmware была таже история.
На серверах с фрей иногда также скорость была меньше в два раза требуемой, лечил тем что после очередного рестарта сервера перезапускал dummynet.
net.inet.ip.fw.one_pass=0
Ради интереса взял фришку 7.2 и 6.4 и проверил один и тот же конфиг для pipe на обоих (оба хоста под vmware) - скорость отличается, но не равна заданной в конфиге.
Re: FreeBSD 7.2 dummynet
Добавлено: 2009-06-22 9:24:01
gmn
Думаю, что вся причина в том, что все это я проверял под VMware.
Еще раньше замечал, что время сильно уж быстро уходит от реального под FreeBSD под VMware.
Попадалась на глаза статейка -
http://www.lissyara.su/?id=1763 - сделал все, что в ней описано.
Перезагрузил - и по pipe получил желаемый результат.