Zohan Опубликовано 8 апреля, 2011 (изменено) Решили использовать 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%. кто-нибудь сталкивался с таким, может подкрутить какой параметр? Изменено 8 апреля, 2011 пользователем Zohan Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Zohan Опубликовано 8 апреля, 2011 Трафик максимум 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 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ilya Evseev Опубликовано 8 апреля, 2011 Для каждого человека 2 правила вход и выход и 2 пайпа: Используйте таблицы и маски. Будет два правила, две таблицы с IP-адресами+номерами пайпов, и по пайпу на каждую входящую и исходящую скорость. Образец смотрите здесь: http://forum.nag.ru/forum/index.php?showtopic=54379 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Zohan Опубликовано 8 апреля, 2011 Для каждого человека 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 пайпа и добавляем его адрес в обе таблицы? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ilya Evseev Опубликовано 8 апреля, 2011 и дальше только создаем для каждого абонента по 2 пайпа и добавляем его адрес в обе таблицы? По пайпу на каждую входящую (mask dst-ip) и каждую исходящую (src-ip) скорость, а не на каждого клиента. Клиентские пайпы будут создаваться автоматически. Рекомендуется настроить sysctl: net.inet.ip.dummynet.hash_size=2048 net.inet.ip.dummynet.io_fast=1 Названия для FreeBSD, в Линукс-версии могут отличаться. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Sp!ZER Опубликовано 9 апреля, 2011 Простите а чем tc не устроил? Почему ipfw? Очень интерестная связка, сколько с линукосм дружу но такого гибрита еще не встречал. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ilya Evseev Опубликовано 9 апреля, 2011 Простите а чем tc не устроил? Почему ipfw? http://forum.nag.ru/forum/index.php?showtopic=61118 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Zohan Опубликовано 9 апреля, 2011 (изменено) и дальше только создаем для каждого абонента по 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 Изменено 9 апреля, 2011 пользователем Zohan Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Zohan Опубликовано 10 апреля, 2011 и дальше только создаем для каждого абонента по 2 пайпа и добавляем его адрес в обе таблицы? По пайпу на каждую входящую (mask dst-ip) и каждую исходящую (src-ip) скорость, а не на каждого клиента. Клиентские пайпы будут создаваться автоматически. Рекомендуется настроить sysctl: net.inet.ip.dummynet.hash_size=2048 net.inet.ip.dummynet.io_fast=1 Названия для FreeBSD, в Линукс-версии могут отличаться. А если практически у каждого пользователя своя скорость? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Zaqwr Опубликовано 10 апреля, 2011 Простите а чем tc не устроил? Почему ipfw? http://forum.nag.ru/forum/index.php?showtopic=61118 iptables с блеском решает такие задачи, зачем пробовать что-то портированое не понимаю... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ilya Evseev Опубликовано 10 апреля, 2011 iptables с блеском решает такие задачи, зачем пробовать что-то портированое не понимаю... Когда идёте по ссылке, не ограничивайтесь прочтением заголовка. Там сравниваются не только nat, но и шейперы. iptables решает задачу шейпирования? с блеском? :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ilya Evseev Опубликовано 10 апреля, 2011 (изменено) А если практически у каждого пользователя своя скорость? Так не бывает. Бывает некоторый набор тарифных скоростей, на каждом тарифе некоторое количество пользователей. > 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. Изменено 10 апреля, 2011 пользователем Ilya Evseev Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 10 апреля, 2011 (изменено) Как уже говорилось, прежде всего следует сделать правила с динамическими пайпами (где mask dst-ip/mask src-ip). Если нужно остаться на ipfw/dummynet, то проще поставить другую версию FreeBSD или поменять железо. Для шейпинга нативными средствами Linux есть такое решение: http://forum.nag.ru/forum/index.php?showtopic=48301 iptables и ipset не нужны, если на машине оставить только шейпинг и использовать фильтры u32. Изменено 10 апреля, 2011 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Zohan Опубликовано 11 апреля, 2011 photon, в dummynet производительность достигается за счет динамических труб, масок, таблиц, а за счет чего это достигается в sc через tc? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 11 апреля, 2011 (изменено) Динамические пайпы по сути являются методом классификации трафика, при котором динамически строятся хэш-таблицы вида IP => pipe number. За счет этого время, потраченное на классификацию, не зависит от количества IP-адресов и пакетрейта. В Linux используется аналогичный подход: там тоже хэши, но их надо создавать вручную, и при этом правила tc значительно сложнее. Для решения этой проблемы нужно было написать какую-то прослойку, генерирующую такие правила. Изменено 11 апреля, 2011 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Zohan Опубликовано 11 апреля, 2011 А если практически у каждого пользователя своя скорость? Так не бывает. Бывает некоторый набор тарифных скоростей, на каждом тарифе некоторое количество пользователей. > 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 и так для каждого абонента будут напрягать систему? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 11 апреля, 2011 (изменено) Для динамических пайпов правила с pass не нужны, если мы уже разрешили трафик для всех IP, находящихся в таблицах. Подсчет трафика следует делать на другой машине (border gateway с Netflow-коллектором). Про Netflow -- отдельный разговор. Изменено 11 апреля, 2011 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Zohan Опубликовано 11 апреля, 2011 Для динамических пайпов правила с pass не нужны, если мы уже разрешили трафик для всех IP, находящихся в таблицах. Подсчет трафика следует делать на другой машине (border gateway с Netflow-коллектором). Про Netflow -- отдельный разговор. Я в курсе что не нужны разрешающие правила :) - мы их создаем для подсчета трафика - 2*кол-во_абонентов, трафик просто пробегающий по ним будет сильно нагружать систему или нет? Или есть другие кроме Netflow-коллектора способы подсчета трафика? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 11 апреля, 2011 (изменено) Вы по счетчикам в правилах ipfw считаете что-ли? Конечно это сильно нагружает систему и к тому же ненадежно. Провайдеры для счета трафика обычно используют Netflow, т.к. полицаям надо предоставлять информацию о том, когда и на какие IP заходил тот или иной человек. Изменено 11 апреля, 2011 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
st_re Опубликовано 11 апреля, 2011 Zohan Зависит от количества клиентов. При большом будет грузить, при очень большом будет очень грузить. У меня, где надо считать только объем, пользуются теже pipe, но без ограничения по скорости (и net.inet.ip.dummynet.expire=0 есесено) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Zohan Опубликовано 11 апреля, 2011 Вы по счетчикам в правилах ipfw считаете что-ли? Конечно это сильно нагружает систему и к тому же ненадежно. Провайдеры для счета трафика обычно используют Netflow. Да, именно так, считаем правилами :( А если в правилах использовать констукцию типа skipto? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
st_re Опубликовано 11 апреля, 2011 скип ту улучшит ситуацию, но все равно количество правил имеет значение. правила просматриваются ВСЕ до сработавшего на вылет. Если в 1 правиле стоит скито 65000 то все правила от 1 до 65000 просмотрятся (но только в плане номера, что быстрее, чем полностью правило проверять, но это не скип в чистом виде) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Zohan Опубликовано 11 апреля, 2011 Решили снимать по Netflow с Циски в ядре сети :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ilya Evseev Опубликовано 11 апреля, 2011 Решили снимать по Netflow с Циски в ядре сети :) Лучше ipfw ngtee + ng_netflow на FreeBSD. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 11 апреля, 2011 (изменено) Лучше ipfw ngtee + ng_netflow на FreeBSD. Если Cisco потянет, то почему бы нет. В случае FreeBSD будет еще лучше не копировать трафик с помощью ng_tee, а сделать как показано на схеме 7: http://alexandr.sysoev.ru/node/112 Изменено 11 апреля, 2011 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...