FreeBSD 7.2 dummynet

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
gmn
сержант
Сообщения: 239
Зарегистрирован: 2007-02-28 18:01:37
Откуда: UA, Kiev
Контактная информация:

FreeBSD 7.2 dummynet

Непрочитанное сообщение gmn » 2009-06-19 12:16:18

Все привет.

Есть вопрос по 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 - ситуация не меняется.

В чем может быть проблема?
Последний раз редактировалось Alex Keda 2009-06-21 13:47:54, всего редактировалось 1 раз.
Причина: Товарищщи, юзайте кнопочку [code], цените чужое время...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
hizel
дядя поня
Сообщения: 9031
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: FreeBSD 7.2 dummynet

Непрочитанное сообщение hizel » 2009-06-19 12:42:14

так и не понял ху ис ху
где 10.0.4.74 находится?
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
gmn
сержант
Сообщения: 239
Зарегистрирован: 2007-02-28 18:01:37
Откуда: UA, Kiev
Контактная информация:

Re: FreeBSD 7.2 dummynet

Непрочитанное сообщение gmn » 2009-06-19 12:48:59

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, как указано в конфиге.

Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

Re: FreeBSD 7.2 dummynet

Непрочитанное сообщение neko » 2009-06-19 14:35:38

Ибо должно выглядеть как:

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

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
если хотите резать одним пайпом по подсети либо табличке - играйтесь маской.
Последний раз редактировалось Alex Keda 2009-06-21 13:48:09, всего редактировалось 1 раз.
Причина: Товарищщи, юзайте кнопочку [code], цените чужое время...

Аватара пользователя
gmn
сержант
Сообщения: 239
Зарегистрирован: 2007-02-28 18:01:37
Откуда: UA, Kiev
Контактная информация:

Re: FreeBSD 7.2 dummynet

Непрочитанное сообщение gmn » 2009-06-19 14:58:53

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 шейпится (качается файл с фтп на хосте с шейпером).
Входящий - нет.
Должно же работать ...

Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

Re: FreeBSD 7.2 dummynet

Непрочитанное сообщение neko » 2009-06-19 15:26:22

le0 куда смотрит? да и было бы классно увидеть:

#cat /etc/rc.conf

#ipfw show

#ifconfig
Прописал именно так - вообще в pipe ничего не попадает.
а куда смотрит опять же le0, а вы часом не дивертнули в нат перед этим этот же траффик? :)
Но такой пример, как я указал, не будет разве работать?
будет выглядеть совсем как настоящий но лучше не надо :)

Подозреваю что вам в любом случае если уж хочеться одним пайпом резать нужно указать recv/xmit и выкрутить mask dst-ip на пайпе.

Аватара пользователя
gmn
сержант
Сообщения: 239
Зарегистрирован: 2007-02-28 18:01:37
Откуда: UA, Kiev
Контактная информация:

Re: FreeBSD 7.2 dummynet

Непрочитанное сообщение gmn » 2009-06-19 15:57:25

Чтобы понять, как работает ipfw pipe, я упростил для себя задачу.
Отбросил вторую сетевую. Никакого NAT-а. Одна сетевая, которая смотрит в локалку.
Остается только одна карточка - le0. У нее ip 10.0.4.74.
На хосте ftp-демон. Там лежит файл.
Для понимания работы pipe я хочу ограничить через ipfw исходящий с хоста трафик до скорости 100 Кбайт/сек.

Для этого:
/boot/loader.conf

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

dummynet_load="YES"
ipfw_load="YES"
/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 всеравно.

Аватара пользователя
hizel
дядя поня
Сообщения: 9031
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: FreeBSD 7.2 dummynet

Непрочитанное сообщение hizel » 2009-06-19 16:23:20

кроме 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
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

Re: FreeBSD 7.2 dummynet

Непрочитанное сообщение neko » 2009-06-19 16:30:14

Чтобы понять, как работает 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 отличий :)
Последний раз редактировалось Alex Keda 2009-06-21 13:48:27, всего редактировалось 1 раз.
Причина: Товарищщи, юзайте кнопочку [code], цените чужое время...

Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

Re: FreeBSD 7.2 dummynet

Непрочитанное сообщение neko » 2009-06-19 16:34:36

а также поднять параметр 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.

но это ведь в случае поллинга не так ли?

Аватара пользователя
hizel
дядя поня
Сообщения: 9031
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: FreeBSD 7.2 dummynet

Непрочитанное сообщение hizel » 2009-06-19 16:52:24

нет, это в любом случае, POLLING(4) тут не причём
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

Re: FreeBSD 7.2 dummynet

Непрочитанное сообщение neko » 2009-06-19 16:57:26

тобишь кручением HZ>1000 мы переносим нагрузку с [чего?] на CPU, соответственно обратно имеем обратный эффект?

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

options         HZ=1000   # кол-во просматриваемых пакетов в очереди при шейпинге
Последний раз редактировалось Alex Keda 2009-06-21 13:48:44, всего редактировалось 1 раз.
Причина: Товарищщи, юзайте кнопочку [code], цените чужое время...

Аватара пользователя
gmn
сержант
Сообщения: 239
Зарегистрирован: 2007-02-28 18:01:37
Откуда: UA, Kiev
Контактная информация:

Re: FreeBSD 7.2 dummynet

Непрочитанное сообщение gmn » 2009-06-19 16:58:18

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. Пересобирать ядро - не пересобирал. Подгрузил модули и все.

Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

Re: FreeBSD 7.2 dummynet

Непрочитанное сообщение neko » 2009-06-19 17:00:25

HZ там вообще никоим боком при таких нагрузках, укажите полюдски xmit/recv и длину queue как уже упомянул господин hizel (скорость/8 оптимально имхо).

Аватара пользователя
gmn
сержант
Сообщения: 239
Зарегистрирован: 2007-02-28 18:01:37
Откуда: UA, Kiev
Контактная информация:

Re: FreeBSD 7.2 dummynet

Непрочитанное сообщение gmn » 2009-06-19 17:07:57

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 Кбит/сек).

Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

Re: FreeBSD 7.2 dummynet

Непрочитанное сообщение neko » 2009-06-19 17:13:29

Хорошо, приведите пример, как сделать следующее - ограничить исходящую скорость с хоста до 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

что в принципе логично.

Аватара пользователя
gmn
сержант
Сообщения: 239
Зарегистрирован: 2007-02-28 18:01:37
Откуда: UA, Kiev
Контактная информация:

Re: FreeBSD 7.2 dummynet

Непрочитанное сообщение gmn » 2009-06-19 17:26:51

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 :(

tyler56
сержант
Сообщения: 198
Зарегистрирован: 2009-06-03 18:10:15

Re: FreeBSD 7.2 dummynet

Непрочитанное сообщение tyler56 » 2009-06-21 13:42:32

Какое значение net.inet.ip.fw.one_pass.
У меня под vmware была таже история.
На серверах с фрей иногда также скорость была меньше в два раза требуемой, лечил тем что после очередного рестарта сервера перезапускал dummynet.

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

/etc/rc.d/ipfw stop
/etc/rc.d/ipfw start

Аватара пользователя
gmn
сержант
Сообщения: 239
Зарегистрирован: 2007-02-28 18:01:37
Откуда: UA, Kiev
Контактная информация:

Re: FreeBSD 7.2 dummynet

Непрочитанное сообщение gmn » 2009-06-22 9:12:58

tyler56 писал(а):Какое значение net.inet.ip.fw.one_pass.
У меня под vmware была таже история.
На серверах с фрей иногда также скорость была меньше в два раза требуемой, лечил тем что после очередного рестарта сервера перезапускал dummynet.

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

/etc/rc.d/ipfw stop
/etc/rc.d/ipfw start
net.inet.ip.fw.one_pass=0
Ради интереса взял фришку 7.2 и 6.4 и проверил один и тот же конфиг для pipe на обоих (оба хоста под vmware) - скорость отличается, но не равна заданной в конфиге.

Аватара пользователя
gmn
сержант
Сообщения: 239
Зарегистрирован: 2007-02-28 18:01:37
Откуда: UA, Kiev
Контактная информация:

Re: FreeBSD 7.2 dummynet

Непрочитанное сообщение gmn » 2009-06-22 9:24:01

Думаю, что вся причина в том, что все это я проверял под VMware.
Еще раньше замечал, что время сильно уж быстро уходит от реального под FreeBSD под VMware.
Попадалась на глаза статейка - http://www.lissyara.su/?id=1763 - сделал все, что в ней описано.
Перезагрузил - и по pipe получил желаемый результат.