Jump to content

Recommended Posts

Posted (edited)

Решили использовать ipfw for Linux

 

2.6.32-30

Ununtu 10.04.2

 

Шейпим реальники.

Для каждого человека 2 правила вход и выход и 2 пайпа:

 

#out

ipfw pipe 1 config bw 3000Kbit/s

#in

ipfw pipe 2 config bw 3000Kbit/s

 

ipfw add 1 pipe 1 all from 175.*.*.* to any out

ipfw add 2 pipe 2 all from any to 175.*.*.* in

 

пока что шейпим 150 человек, т.е. 300 пайпов и система по вечерам тормозит - чем больше пайпов, тем более, ksoftirqd уходит в 100%.

 

кто-нибудь сталкивался с таким, может подкрутить какой параметр?

Edited by Zohan
Posted

Трафик максимум 250 Мбит.

 

Машина с 2-мя Ксеонами каждый по 4 ядра.

 

Загружен 2 ядра. smp_afinity не помогает.

ipfw что-то сильно лопатит - очищаю правила и машина спокойно пропускает 2 Гбита.

 

Тюнинг ipfw такой:

 

echo "1" > /sys/module/ipfw_mod/parameters/io_fast

echo "10240" > /sys/module/ipfw_mod/parameters/hash_size

Posted

Для каждого человека 2 правила вход и выход и 2 пайпа:

Используйте таблицы и маски.

Будет два правила, две таблицы с IP-адресами+номерами пайпов, и по пайпу на каждую входящую и исходящую скорость.

Образец смотрите здесь:

http://forum.nag.ru/forum/index.php?showtopic=54379

Posted

Для каждого человека 2 правила вход и выход и 2 пайпа:

Используйте таблицы и маски.

Будет два правила, две таблицы с IP-адресами+номерами пайпов, и по пайпу на каждую входящую и исходящую скорость.

Образец смотрите здесь:

http://forum.nag.ru/forum/index.php?showtopic=54379

 

Наример, вот так:

 

 

ipfw add pipe tablearg ip from any to table(1) in

ipfw add pipe tablearg ip from table(2) to any out

 

ipfw pipe 1000 config bw 512Kbit/s mask dst-ip 0xffffffff

ipfw pipe 1001 config bw 512Kbit/s mask src-ip 0xffffffff

 

ipfw table 1 add 175.2.2.1 1000

ipfw table 2 add 175.2.2.1 1001

 

и дальше только создаем для каждого абонента по 2 пайпа и добавляем его адрес в обе таблицы?

Posted

и дальше только создаем для каждого абонента по 2 пайпа и добавляем его адрес в обе таблицы?

По пайпу на каждую входящую (mask dst-ip) и каждую исходящую (src-ip) скорость, а не на каждого клиента.

Клиентские пайпы будут создаваться автоматически.

 

Рекомендуется настроить sysctl:

net.inet.ip.dummynet.hash_size=2048

net.inet.ip.dummynet.io_fast=1

Названия для FreeBSD, в Линукс-версии могут отличаться.

Posted

Простите а чем tc не устроил? Почему ipfw? Очень интерестная связка, сколько с линукосм дружу но такого гибрита еще не встречал.

Posted (edited)

и дальше только создаем для каждого абонента по 2 пайпа и добавляем его адрес в обе таблицы?

По пайпу на каждую входящую (mask dst-ip) и каждую исходящую (src-ip) скорость, а не на каждого клиента.

Клиентские пайпы будут создаваться автоматически.

 

Рекомендуется настроить sysctl:

net.inet.ip.dummynet.hash_size=2048

net.inet.ip.dummynet.io_fast=1

Названия для FreeBSD, в Линукс-версии могут отличаться.

 

В понедельник попробую и отпишусь о результатах :)

Кстати, новые версии ipfw for Linux здесь - http://info.iet.unipi.it/~marta/dummynet/

последняя от 4 апреля http://info.iet.unipi.it/~marta/dummynet/ipfw3-20110404.tar.gz

Edited by Zohan
Posted

и дальше только создаем для каждого абонента по 2 пайпа и добавляем его адрес в обе таблицы?

По пайпу на каждую входящую (mask dst-ip) и каждую исходящую (src-ip) скорость, а не на каждого клиента.

Клиентские пайпы будут создаваться автоматически.

 

Рекомендуется настроить sysctl:

net.inet.ip.dummynet.hash_size=2048

net.inet.ip.dummynet.io_fast=1

Названия для FreeBSD, в Линукс-версии могут отличаться.

 

А если практически у каждого пользователя своя скорость?

Posted

iptables с блеском решает такие задачи, зачем пробовать что-то портированое не понимаю...

Когда идёте по ссылке, не ограничивайтесь прочтением заголовка.

Там сравниваются не только nat, но и шейперы.

iptables решает задачу шейпирования? с блеском? :)

Posted (edited)

А если практически у каждого пользователя своя скорость?

Так не бывает. Бывает некоторый набор тарифных скоростей, на каждом тарифе некоторое количество пользователей.

> sudo ipfw pipe list | perl -e '$a=0; $b=0; while(<>) {
/\d+ buckets (\d+) active/ or next; ++$a; $b += $1 } print "$a speeds, $b pipes.\n"'
49 speeds, 2188 clients.

Edited by Ilya Evseev
Posted (edited)

Как уже говорилось, прежде всего следует сделать правила с динамическими пайпами (где mask dst-ip/mask src-ip). Если нужно остаться на ipfw/dummynet, то проще поставить другую версию FreeBSD или поменять железо.

 

Для шейпинга нативными средствами Linux есть такое решение: http://forum.nag.ru/forum/index.php?showtopic=48301

iptables и ipset не нужны, если на машине оставить только шейпинг и использовать фильтры u32.

Edited by photon
Posted

photon, в dummynet производительность достигается за счет динамических труб, масок, таблиц, а за счет чего это достигается в sc через tc?

Posted (edited)

Динамические пайпы по сути являются методом классификации трафика, при котором динамически строятся хэш-таблицы вида IP => pipe number. За счет этого время, потраченное на классификацию, не зависит от количества IP-адресов и пакетрейта. В Linux используется аналогичный подход: там тоже хэши, но их надо создавать вручную, и при этом правила tc значительно сложнее. Для решения этой проблемы нужно было написать какую-то прослойку, генерирующую такие правила.

Edited by photon
Posted

А если практически у каждого пользователя своя скорость?

Так не бывает. Бывает некоторый набор тарифных скоростей, на каждом тарифе некоторое количество пользователей.

> sudo ipfw pipe list | perl -e '$a=0; $b=0; while(<>) {
/\d+ buckets (\d+) active/ or next; ++$a; $b += $1 } print "$a speeds, $b pipes.\n"'
49 speeds, 2188 clients.

 

Ilya Evseev, photon - а плюс к динамическим пайпам

обычные правила для подсчета трафика аля:

 

ipfw add 1000 pass ip from 175.2.2.1 to any

ipfw add 1001 pass ip from any to 175.2.2.1

 

и так для каждого абонента будут напрягать систему?

Posted (edited)

Для динамических пайпов правила с pass не нужны, если мы уже разрешили трафик для всех IP, находящихся в таблицах. Подсчет трафика следует делать на другой машине (border gateway с Netflow-коллектором). Про Netflow -- отдельный разговор.

Edited by photon
Posted

Для динамических пайпов правила с pass не нужны, если мы уже разрешили трафик для всех IP, находящихся в таблицах. Подсчет трафика следует делать на другой машине (border gateway с Netflow-коллектором). Про Netflow -- отдельный разговор.

Я в курсе что не нужны разрешающие правила :) - мы их создаем для подсчета трафика - 2*кол-во_абонентов, трафик просто пробегающий по ним будет сильно нагружать систему или нет?

 

Или есть другие кроме Netflow-коллектора способы подсчета трафика?

Posted (edited)

Вы по счетчикам в правилах ipfw считаете что-ли? Конечно это сильно нагружает систему и к тому же ненадежно. Провайдеры для счета трафика обычно используют Netflow, т.к. полицаям надо предоставлять информацию о том, когда и на какие IP заходил тот или иной человек.

Edited by photon
Posted

Zohan Зависит от количества клиентов. При большом будет грузить, при очень большом будет очень грузить. У меня, где надо считать только объем, пользуются теже pipe, но без ограничения по скорости (и net.inet.ip.dummynet.expire=0 есесено)

Posted

Вы по счетчикам в правилах ipfw считаете что-ли? Конечно это сильно нагружает систему и к тому же ненадежно. Провайдеры для счета трафика обычно используют Netflow.

Да, именно так, считаем правилами :( А если в правилах использовать констукцию типа skipto?

Posted

скип ту улучшит ситуацию, но все равно количество правил имеет значение. правила просматриваются ВСЕ до сработавшего на вылет. Если в 1 правиле стоит скито 65000 то все правила от 1 до 65000 просмотрятся (но только в плане номера, что быстрее, чем полностью правило проверять, но это не скип в чистом виде)

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...