Помогите советом, сил нет выносить это уже. Чем победить, куда рыть?22 root 15 -5 0 0 0 R 100 0.0 389:01.94 ksoftirqd/6
25 root 15 -5 0 0 0 R 91 0.0 387:09.34 ksoftirqd/7
> Помогите советом, сил нет выносить это уже. Чем победить, куда рыть?
>
>
> 22 root 15
>-5 0 0
> 0 R 100 0.0 389:01.94 ksoftirqd/6
> 25 root 15
>-5 0 0
> 0 R 91 0.0 387:09.34 ksoftirqd/7
>Попробуйте начать выдергивать из системника провода, в очередности:
-из сетевых карт
-шнуры прочих внешних устройств
-шнуры питания
Спасибо за ответ.
Опишу всё в более детально. Эта машинка - роутер. На борту три сетевые. Одна - локальная сеть, две других это выход на шейперы которые стоят за ней, рулится направление через iproute2 правил порядка 3000. В задачи роутера входит также блокировка входящих соединений если не разрешен форвад для пакетов источника. Таким образом в итоге имеем около 4000 правил forward accept в iptables.Как я предполагаю в этом и есть проблема. Каждый пакет проверяется в списке правил forward, затем только отправляется дальше. Чем больше пакетов и выше скорость их поступления тем выше загрузка ядер процессом ksoftirq. При iptables stop нагрузка на ядра падает до 1% . Разделять прерывания от трёх сетевых карт пробовал - результат никакой. Драйверы сетевых менял - результат никакой. Пытался крутить настройками сетевых через ethertol - результат никакой. Пытался исправить положение через настройки sysctl - результат никакой.
Подскажите куда рыть дальше?
>[оверквотинг удален]
>
>Как я предполагаю в этом и есть проблема. Каждый пакет проверяется в
>списке правил forward, затем только отправляется дальше. Чем больше пакетов и
>выше скорость их поступления тем выше загрузка ядер процессом ksoftirq. При
>iptables stop нагрузка на ядра падает до 1% . Разделять прерывания
>от трёх сетевых карт пробовал - результат никакой. Драйверы сетевых менял
>- результат никакой. Пытался крутить настройками сетевых через ethertol - результат
>никакой. Пытался исправить положение через настройки sysctl - результат никакой.
>
>Подскажите куда рыть дальше?обновить ядро?
>[оверквотинг удален]
>>списке правил forward, затем только отправляется дальше. Чем больше пакетов и
>>выше скорость их поступления тем выше загрузка ядер процессом ksoftirq. При
>>iptables stop нагрузка на ядра падает до 1% . Разделять прерывания
>>от трёх сетевых карт пробовал - результат никакой. Драйверы сетевых менял
>>- результат никакой. Пытался крутить настройками сетевых через ethertol - результат
>>никакой. Пытался исправить положение через настройки sysctl - результат никакой.
>>
>>Подскажите куда рыть дальше?
>
>обновить ядро?Вы телепатически определили что ядро старое ?
Не сильно слежу за новостями развития netfilter, но разве там внесли какие-то сверпроизводительные изменения ?
вам не нравится моё предложение обновить ядро? так и на пишите - "считаю идею обновления ядра необоснованой"
>Опишу всё в более детально.наконец-то.
>Эта машинка - роутер.
мы догадывались...
>На борту три сетевые. Одна - локальная сеть, две других это выход на шейперы
>которые стоят за ней, рулится направление через iproute2 правил порядка 3000.Чем люди думают, когда такие количества правил вбивают ? Чем обосновывается такое решение ? Приведите список этих правил, чтоли... Посмотрим на эти ужасы.
>В задачи роутера входит также блокировка входящих соединений если не разрешен
>форвад для пакетов источника.
>Таким образом в итоге имеем около 4000 правил forward accept в iptables.
>Как я предполагаю в этом и есть проблема.:-)
>Каждый пакет проверяется в
>списке правил forward, затем только отправляется дальше.
>Чем больше пакетов и выше скорость их поступления тем выше загрузка ядер процессом ksoftirq.как ни странно - но это так и должно быть )
>При iptables stop нагрузка на ядра падает до 1% . Разделять прерывания
>от трёх сетевых карт пробовал - результат никакой. Драйверы сетевых менял
>- результат никакой. Пытался крутить настройками сетевых через ethertol - результат
>никакой. Пытался исправить положение через настройки sysctl - результат никакой.
>
>Подскажите куда рыть дальше?Ну, причинно-следственные связи вы устанавливать умеете.
А простая логика разве не подсказывает вариантов решения:
-Оптимизировать число правил (уменьшить количество проверок)
- порядок проверок оптимизируйте,
- выстроить древовидную структуру проверок
- уменьшить число правил-Увеличивать количество маршрутизаторов.
-Сменить маршрутизатор на нечто более производительное?
Показывайте список правил "ip ru sh" и список правил "iptables -nvL FORWARD --line" - очень интересно.
>[оверквотинг удален]
>
>Как я предполагаю в этом и есть проблема. Каждый пакет проверяется в
>списке правил forward, затем только отправляется дальше. Чем больше пакетов и
>выше скорость их поступления тем выше загрузка ядер процессом ksoftirq. При
>iptables stop нагрузка на ядра падает до 1% . Разделять прерывания
>от трёх сетевых карт пробовал - результат никакой. Драйверы сетевых менял
>- результат никакой. Пытался крутить настройками сетевых через ethertol - результат
>никакой. Пытался исправить положение через настройки sysctl - результат никакой.
>
>Подскажите куда рыть дальше?кстати, надо еще выгрузить неиспользуемые модули netfilter. Но это даст не такой большой эффект.
ip route show покажет только основные маршруты. Их 22 всего. С помощью iproute2 созданы собственные таблицы, список адресов в которые добавляется динамически:ip rule add from 192.168.1.* table inet1
ip rule add from 192.168.1.* table inet2и соответственно
ip route add default via $ip1 dev eth1 table inetl
ip route add default via $ip2 dev eth2 table inet2Можно было конечно сначало через mangle метить пакеты и потом согласно метке отправлять на свой дефолтный шлюз с помощью iproute2, но решили делать иначе. Почему - не суть. Не здесь собака порыта, я так думаю.
А вот интереснее процесс:
Вот где ужас настоящий. Правила типа:Chain FORWARD (policy DROP)
ACCEPT all -- 192.168.1.10 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 192.168.1.10и таких строк ровно по числу активных абонентов пользующих интернет. Число правил на текущий момент:
[root@~]# iptables -vnxL | wc -l
4155Вот именно из-за такого числа у меня возникают трудности, в момент пика загрузки падает пропускная способность роутера, два ядра загружены ksoftirq по 100%.
По поводу ядра:
Linux 2.6.23.17 PAE
iptables v1.3.8
>[оверквотинг удален]
> 192.168.1.10
>
>и таких строк ровно по числу активных абонентов пользующих интернет. Число правил
>на текущий момент:
>
>[root@~]# iptables -vnxL | wc -l
>4155
>
>Вот именно из-за такого числа у меня возникают трудности, в момент пика
>загрузки падает пропускная способность роутера, два ядра загружены ksoftirq по 100%.4 тысячи абонентов - это как минимум 16 /24 сеток
Ну так вот. У вас наверняка есть скрипт, который добавляет правила в FORWARD. Так вот. Его надо модифицировать. Чтобы на основании айпишника, которому разрещается интернет, он попадал в различные цепочки. По следующему принципу:
FORWARD:
iptables -I FORWARD -i INTERNAL_IF -j FORWARD_OUT
iptables -I FORWARD -i EXTERNAL_IF1 -j FORWARD_IN
iptables -I FORWARD -i EXTERNAL_IF2 -j FORWARD_IN
iptables -I FORWARD_OUT -s 192.168.0.0/25 -о FORWARD_OUT_0_0
iptables -I FORWARD_OUT -s 192.168.0.128/25 -о FORWARD_OUT_0_1
iptables -I FORWARD_OUT -s 192.168.1.0/25 -о FORWARD_OUT_1_0
iptables -I FORWARD_OUT -s 192.168.1.128/25 -о FORWARD_OUT_1_1
iptables -I FORWARD_OUT -s 192.168.2.0/25 -о FORWARD_OUT_2_0
iptables -I FORWARD_OUT -s 192.168.2.128/25 -о FORWARD_OUT_2_1
...
далее аналогичноа сами айпишники в скрипте проверяете, и запихиваете правила в соответствующую цепочки FORWARD_(IN|OUT)_X_Y
Таким образом резко уменьшите число проверок.
Заодно можно посмотреть в сторону connection tracking, или его отключения через table raw -j NOTRACK. Но это уже по ситуации.
Эмм, что-то я совсем фигню пишу :-)
Вам надо:man ipset
и парочку правил в FORWARD, вида
iptables -A FORWARD -i INT_IF -m set --match-set clients src
iptables -A FORWARD -i EXT_IF -m set --match-set clients dst
Но для этого возможно придется ядро пересобирать.
>[оверквотинг удален]
>
>man ipset
>
>и парочку правил в FORWARD, вида
>
>iptables -A FORWARD -i INT_IF -m set --match-set clients src
>iptables -A FORWARD -i EXT_IF -m set --match-set clients dst
>
>
>Но для этого возможно придется ядро пересобирать.Спасибо. Это то что надо! Ipset ясное дело у меня нет. Теперь осталось только потрудиться над тем чтобы он был. Обязательно отпишусь о результате!
Нашел вот какой аргумент:
=======
При тестировании, загрузка 70000 обычных правил заняла около часа, в то время как nfqueue (http://nfqueue.sf.net) почти мгновенно подгружает большие cписки блокировки, оформленные в p2p, dat, csv форматах или преобразованные в специальный сжатый бинарный вид.
=======
http://www.frnd.org/thread-15280-post-34035.html#pid34035
Ссылаются на http://www.opennet.meЭто действительно так?
>[оверквотинг удален]
>=======
>При тестировании, загрузка 70000 обычных правил заняла около часа, в то время
>как nfqueue (http://nfqueue.sf.net) почти мгновенно подгружает большие cписки блокировки, оформленные в
>p2p, dat, csv форматах или преобразованные в специальный сжатый бинарный вид.
>
>=======
>http://www.frnd.org/thread-15280-post-34035.html#pid34035
>Ссылаются на http://www.opennet.me
>
>Это действительно так?"Обычных правил".... (сравним обычный порошок и наш супертайд) - 70000 наверное всё-таки правил iptables ;-)
И что это вы цитаты обрезанно как-то рассматриваете. Как насчет:
В статье "Filtering traffic based on thousands of IPs efficiently (http://www.debian-administration.org/articles/540)" рассказывается о программе nfqueue (http://nfqueue.sf.net), _которая работает на пользовательском уровне_ и использует NetFilter библиотеку netlink-queue.
Оно вам надо ? Не, попробуйте конечно...
Да потому и спрашиваю, что сомневаюсь сильно надо ли мне это. Попытка прикрутить IPSET пока не увенчалась успехом. К своему ядру не получается прикрутить. Завтра возьму тестовую машинку, поставлю CentOS и буду пробовать на нём.Нет ли полезных советов по этому поводу (установка ipset), чтобы не наступать на грабли?
Извините, что долго не отписывался. Проблема полностью решена установкой IPSET. Большое спасибо всем, кто помогал в решение вопроса. Opennet - лучший ресурс для системных администраторов. Еще раз спасибо!Если у кого-то будут какие либо вопросы - с лёгкостью дам ответы на них.
>Извините, что долго не отписывался. Проблема полностью решена установкой IPSET. Большое спасибо
>всем, кто помогал в решение вопроса. Opennet - лучший ресурс для
>системных администраторов. Еще раз спасибо!
>
>Если у кого-то будут какие либо вопросы - с лёгкостью дам ответы
>на них.ну и?...;-)
где мануал по установке?!...три месяца прошло уже!шучу конечно )
у меня проблема аналогичная, и судя по всему - решается эффективно только айписетом...
были подводные камни? остались ли ссылки на мануалы, которые помогли установить-настроить?...
плз...
> у меня проблема аналогичная, и судя по всему - решается эффективно только
> айписетом...
> были подводные камни? остались ли ссылки на мануалы, которые помогли установить-настроить?...
> плз...Я пошел по пути наименьшего сопротивления - выбрал систему в которой установка ipset не требовала накладывать патч на ядро и сводилась практически к одной команде. Таковой оказалась CentOS. Остальное не сложно найти в инернете, к примеру здесь:
И все таки если будут конкретные вопросы - отвечу обязательно.