Igor Diakonov Опубликовано 26 сентября, 2015 · Жалоба Так должно стрельнуть: diff --git a/compat.h b/compat.h index 6e0c8af..35d0709 100644 --- a/compat.h +++ b/compat.h @@ -1,8 +1,9 @@ - +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,19,0) static inline bool seq_has_overflowed(struct seq_file *m) { return m->count == m->size; } +#endif #if LINUX_VERSION_CODE < KERNEL_VERSION(3,15,0) void kvfree(const void *addr) Фикс в гит добавили. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
sol Опубликовано 28 сентября, 2015 · Жалоба Так стреляет, спасибо. make -C /lib/modules/4.1.7-200.fc22.x86_64/build/ M=/root/ipt-ratelimit-master modules CONFIG_DEBUG_INFO=ymake[1]: вход в каталог «/usr/src/kernels/4.1.7-200.fc22.x86_64» CC [M] /root/ipt-ratelimit-master/xt_ratelimit.o Building modules, stage 2. MODPOST 1 modules CC /root/ipt-ratelimit-master/xt_ratelimit.mod.o LD [M] /root/ipt-ratelimit-master/xt_ratelimit.ko make[1]: выход из каталога «/usr/src/kernels/4.1.7-200.fc22.x86_64» sync gcc -O2 -Wall -Wunused -fPIC -o libxt_ratelimit_sh.o -c libxt_ratelimit.c In file included from /usr/include/stdint.h:25:0, from /usr/lib/gcc/x86_64-redhat-linux/5.1.1/include/stdint.h:9, from libxt_ratelimit.c:24: /usr/include/features.h:148:3: предупреждение: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE" [-Wcpp] # warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE" ^ gcc -shared -o libxt_ratelimit.so libxt_ratelimit_sh.o rm libxt_ratelimit_sh.o Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Igor Diakonov Опубликовано 28 сентября, 2015 · Жалоба Отпишитесь о результатах :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dazgluk Опубликовано 8 октября, 2015 · Жалоба Итак, запустили модуль в продакшн. Стоит уже двое суток Машинка 2x Intel Xeon E5649 X520-DA2 на Машине запущено: 1. NAT 2. IPT_Netflow 3. IPT_Ratelimit 4. NFQUEUE_Filter 5. Другя мелочь (Ipsetы, хитрый CAR для ограничения почты, quagga) root@nat-10g-4:/# cat /proc/net/ipt_ratelimit/limit_in | wc -l 17902 Рядом стоит такая же машина но в связке с BRASом, без IPT_Ratelimit, разница в загрузке CPU при сравнимом трафике ~3% Модуль без проблем переваривает >10Gb/s In+Out. По полисингу впечатления следующие: 1. Немножко переливает (вместо 30 мегабит, speedtest.net показывает 31.5, вместо 10 мегабит, выдает 10.3) - но это даже хорошо, недовольных абонентов нет. 2. Это полисер, поэтому в начале есть бёрст вплоть до 300 мегабит в гиговом порту, но потом скорость опускается до тарифной, на железных брасах было тоже самое, потому уже привыкли к этому. в целом полисит довольно ровно, на торрентах и http/ftp, все четко по тарифу, прямо красота. В итоге модулем очень довольны - жалоб от абонентов нет, графики ровные, видно что модуль работает, входящего меньше чем исходящего. AABC, есть вопрос. Насколько тяжелая процедура для модуля - дерганье из файла cat /proc/net/ipt_ratelimit? Нам для отказа от BRASа не хватает аккаунтинга, планировали сделать аккаунтинг из данного файла? Привыкли к железным BRASам, радиусу и "сессиям", вот хотим попробовать "эмулировать" это скриптами. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
aabc Опубликовано 8 октября, 2015 · Жалоба В итоге модулем очень довольны Спасибо за тест. AABC, есть вопрос.Насколько тяжелая процедура для модуля - дерганье из файла cat /proc/net/ipt_ratelimit? Сам интерфейс seq_file довольно медленный (в этом можно убедиться сделав time cat /proc/net/nf_conntrack). В остальном должна быть не большая нагрузка. Попробуйте делать cat с нужной вам частотой и напишите на сколько увеличилась нагрузка. Вам нужно 1 строку часто считывать или всю таблицу, и как часто? Нам для отказа от BRASа не хватает аккаунтинга, планировали сделать аккаунтинг из данного файла? Что именно? Там же и сейчас есть подсчет пакетов и байтов (conf+rej pkt/bytes). Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
sanyasi Опубликовано 9 октября, 2015 · Жалоба Тестируем, пока впечатления только положительные. а действие обновить, и если нет добавить (к примеру =) скорость имеет смысл? echo +10.10.0.1,10.10.0.5 10000000 > /proc/net/ipt_ratelimit/test_out echo =10.10.0.1,10.10.0.5 20000000 > /proc/net/ipt_ratelimit/test_out Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
stasn1 Опубликовано 9 октября, 2015 · Жалоба Просто подсети не подойдут? (Они планируются.) Подсети были бы очень кстати. Пока приходится парсить подсеть на отдельные адреса при добавлении, что не совсем удобно. В остальном все просто замечательно. Огромное спасибо за идею и реализацию! Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dazgluk Опубликовано 9 октября, 2015 · Жалоба В итоге модулем очень довольны Спасибо за тест. AABC, есть вопрос.Насколько тяжелая процедура для модуля - дерганье из файла cat /proc/net/ipt_ratelimit? Сам интерфейс seq_file довольно медленный (в этом можно убедиться сделав time cat /proc/net/nf_conntrack). В остальном должна быть не большая нагрузка. Попробуйте делать cat с нужной вам частотой и напишите на сколько увеличилась нагрузка. Вам нужно 1 строку часто считывать или всю таблицу, и как часто? Нам для отказа от BRASа не хватает аккаунтинга, планировали сделать аккаунтинг из данного файла? Что именно? Там же и сейчас есть подсчет пакетов и байтов (conf+rej pkt/bytes). Скорость выбора данных устраиввает, главное чтоб в момент отдачи файла не терялась производительность форвардинга. Выгребать планируем весь файл для подсчета трафика (раз в пять минут) А так же одну строчку для просмотра "сессии", эпизодически, но может быть и 5-10 раз в минуту по запросу из OSS системы. Вопрос больше, как доставить эти циферки в биллинг :), попробуем складировать сразу в базу. Но если не получится, есть мысли дописать к модулю RADIUS обвязку, как в LISG :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
aabc Опубликовано 9 октября, 2015 · Жалоба Тестируем, пока впечатления только положительные. а действие обновить, и если нет добавить (к примеру =) скорость имеет смысл? echo +10.10.0.1,10.10.0.5 10000000 > /proc/net/ipt_ratelimit/test_out echo =10.10.0.1,10.10.0.5 20000000 > /proc/net/ipt_ratelimit/test_out Update как-то уже начал кодить, но потом понял, что это лишнее усложнение. На практике, всегда можно делать -... +... Спасибо за тестирование! Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
aabc Опубликовано 9 октября, 2015 · Жалоба Скорость выбора данных устраиввает, главное чтоб в момент отдачи файла не терялась производительность форвардинга. Выгребать планируем весь файл для подсчета трафика (раз в пять минут) Не потеряется, особенно раз в пять минут. Сейчас локи при чтении proc только на каждую запись, так же как на каждом пакете. Так что разницы нет. А так же одну строчку для просмотра "сессии", эпизодически, но может быть и 5-10 раз в минуту по запросу из OSS системы. Над этим надо подумать. Скажем, сделать netlink интерфейс для таких запросов. Вопрос больше, как доставить эти циферки в биллинг :), попробуем складировать сразу в базу.Но если не получится, есть мысли дописать к модулю RADIUS обвязку, как в LISG :) По идее, нет никаких kernel событий, которые надо было бы именно из модуля слать в radius. Просто подсети не подойдут? (Они планируются.) Подсети были бы очень кстати. Пока приходится парсить подсеть на отдельные адреса при добавлении, что не совсем удобно. В остальном все просто замечательно. Огромное спасибо за идею и реализацию! Подсети будут. Пожалуйста. Идея такой реализации полисинга - Igor Diakonov. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SyJet Опубликовано 9 октября, 2015 (изменено) · Жалоба Кстати, по идее вообще для l3-connected неплохая возможная замена брасу может статься )) Действительно, если бы еще обвязку сделать - клево было Кстати, а какую минимальную скорость можно поставить? Изменено 9 октября, 2015 пользователем SyJet Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dazgluk Опубликовано 9 октября, 2015 · Жалоба Кстати, по идее вообще для l3-connected неплохая возможная замена брасу может статься )) Действительно, если бы еще обвязку сделать - клево было Мы именно так и планируем. Просто обвязка как правило у всех будет своя, и ее не обязательно делать именно в kernel space Для меня самый большой вопрос, делать ли "сессии" как в LISG, или просто складывать IPDR в биллинг. А в OSS систему выводить текущие счетчики Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
telecom Опубликовано 12 октября, 2015 · Жалоба Удалось собрать не модулем, а монолитно. Да, и ipt_netflow уже несколько лет монолитно трудиться. Теперь буду ratelimit тестировать. Спасибо! Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Pavel.M.A Опубликовано 12 октября, 2015 (изменено) · Жалоба А такой вопрос, если у абонента было допустим echo +10.10.0.1 10000000 > /proc/net/ipt_ratelimit/test_out и он решил купить себе ещё 1 IP, добавить IP к тарифу можно будет только через - а потом + с 2-мя IP ? echo -10.10.0.1 10000000 > /proc/net/ipt_ratelimit/test_out echo +10.10.0.1,10.10.0.2 10000000 > /proc/net/ipt_ratelimit/test_out А возможно сделать чтоб добавлять IP к уже работающему тарифу, без удаления ? Изменено 12 октября, 2015 пользователем Pavel.M.A Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
aabc Опубликовано 12 октября, 2015 · Жалоба добавить IP к тарифу можно будет только через - а потом + с 2-мя IP ? Добавить IP к клиенту, да. А возможно сделать чтоб добавлять IP к уже работающему тарифу, без удаления ? Зачем? Разве не просто сделать -+? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ilijaz Опубликовано 12 октября, 2015 · Жалоба -+ - трафик потеряется и найдутся задроты, которые будут писать "каждый вечер/час/день разрывы" Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
aabc Опубликовано 12 октября, 2015 · Жалоба -+ - трафик потеряется и найдутся задроты, которые будут писать "каждый вечер/час/день разрывы" Не потеряется, так как, если нет правила, то нет и полисинга, а значит и пакеты не дропаются. Полисинг делается только для тех IP, которые +. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
sanyasi Опубликовано 12 октября, 2015 · Жалоба Обнаружилась проблема: падает ядро, при запущенном perf top. Пока не выявлена причина будьте внимательны, возможно это с модулем ipt_ratelimit связано. 3.13.0-65-generic 3.10.0-229.14.1.el7.x86_64 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Igor Diakonov Опубликовано 13 октября, 2015 · Жалоба 3.16 и 4.1 дебиановские с модулем не падали ни разу. Ни с perf top, ни с ftrace... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
sanyasi Опубликовано 13 октября, 2015 (изменено) · Жалоба ipt_ratelimit Добрый час! А не могли бы поделиться составом изменений в стандартные настройки sysctl, ethtool, и если можно, iptables-save, и какая нагрузка в пакетах и трафике, и число записей conntrack, в чнн (можно в личку). Какой процессор, и тип памяти у Вас, какая частота работы памяти. Какое из указанных ядер предпочтительней с Вашей точки зрения (Загрузка процессора, perf top и управление питанием). Будем искать причину, и тестить. Пока предварительно memory corruption ("непонятная фигня", краши где попало каждый раз) Изменено 13 октября, 2015 пользователем sanyasi Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
aabc Опубликовано 13 октября, 2015 · Жалоба Будем искать причину, и тестить. Пока предварительно memory corruption ("непонятная фигня", краши где попало каждый раз) Да. Не помешает протестить железо в стиле https://openvz.org/Hardware_testing Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Igor Diakonov Опубликовано 13 октября, 2015 · Жалоба А не могли бы поделиться составом изменений в стандартные настройки sysctl, ethtool, и если можно, iptables-save, и какая нагрузка в пакетах и трафике, и число записей conntrack, в чнн (можно в личку). Какой процессор, и тип памяти у Вас, какая частота работы памяти. Какое из указанных ядер предпочтительней с Вашей точки зрения (Загрузка процессора, perf top и управление питанием). Там выше dazgluk про железо и трафик писал http://forum.nag.ru/forum/index.php?showtopic=108580&view=findpost&p=1184625. При загрузке - intel_idle.max_cstate=0 processor.max_cstate=0, частота процессора загнана в максимум через cpufreq-set. ethtool -G eth0 rx 4096 ethtool -G eth0 tx 4096 ethtool -C eth0 rx-usecs 500 ethtool -A eth0 rx off tx off ethtool -K eth0 ntuple on (сомнительно, но на данной конкретной машине отключение вызывает постоянное дерганье native_read_tsc и delay_tsc в perf top, что ведёт к росту загрузки процентов на 20) ethtool -K eth0 gro off ethtool -K eth0 gso off echo 33554432 > /sys/module/nf_conntrack/parameters/hashsize echo 4194304 > /proc/sys/net/ipv4/netfilter/ip_conntrack_max Вобщем-то всё... iptables-save | wc -l 10990 Показывать не буду - смысла нет. Вся суть сводится к -A FORWARD -i INTERNAL_IF -m ratelimit --ratelimit-set limit_out --ratelimit-mode src -j DROP -A FORWARD -o INTERNAL_IF -m ratelimit --ratelimit-set limit_in --ratelimit-mode dst -j DROP -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT дальше 100500 наших фильтров и прочих настроек ната. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
aabc Опубликовано 15 октября, 2015 (изменено) · Жалоба Обнаружилась проблема: падает ядро, при запущенном perf top. Пока не выявлена причина будьте внимательны, возможно это с модулем ipt_ratelimit связано. 3.13.0-65-generic 3.10.0-229.14.1.el7.x86_64 3.16 и 4.1 дебиановские с модулем не падали ни разу. Ни с perf top, ни с ftrace... Аудит ratelimit_proc_write (выделения памяти и парсинга буфера строки) никаких критических проблем не выявил. (Но, я добавил больше defensive coding на всякий случай.) https://lwn.net/Articles/600645/ "3.14 kernel was randomly crashed. The reason was kernel stack overflow" https://lwn.net/Articles/600644/ "Linus has also, unsurprisingly, made it clear that he is not interested in changing the stack size in the 3.15 kernel. But the 3.16 merge window can be expected to open in the near future; at that point, we may well see this patch go in as one of the first changes." Возможно, проблема была в размере стека. У sanyasi, как я понимаю, дополнительно был запущен Accel-PPP с сотнями соединений, правда, я не знаю заводит ли Accel-PPP threadы на каждое соединение или нет, если да, то это всё отъедает стек. В ipt-ratelimit так же был массив 1024 байта на стеке (это удалено в последних патчах), и в какой нибудь ситуации стек мог переполниться. Если кто-то захочет продолжить тестирование, то берите последнюю версию. Как только убедимся, что она стабильна буду делать поддержку префиксов для IP адресов. Вроде бы, у sanyasi уже пара дней всё ок. Изменено 15 октября, 2015 пользователем aabc Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
stasn1 Опубликовано 16 октября, 2015 · Жалоба Если кто-то захочет продолжить тестирование, то берите последнюю версию. Как только убедимся, что она стабильна буду делать поддержку префиксов для IP адресов. Вроде бы, у sanyasi уже пара дней всё ок. Последняя версия, пару дней уже как, ядро 4.2.3. Записей, правда, не очень много. Полет нормальный! Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
sanyasi Опубликовано 7 ноября, 2015 · Жалоба Автору этого чудного модуля - Многая лета! Выяснилась причина падения серверов, с ядрами > 3.2 и accel-ppp. Причина в accel-ppp или нелюбви новых ядер к accel-ppp. uname -r 3.13.0-65-generic up 23 days, 20:39, 1 user, load average: 0,00, 0,01, 0,05 на сервере без accel-ppp 11996 записей в таблице шейпа трафик до 5G (реально работающих через сервер около 6000) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...