URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 88339
[ Назад ]

Исходное сообщение
"ksoftirq каждый вечер грузит систему на 100%"

Отправлено qwek , 06-Мрт-10 00:24 
Помогите советом, сил нет выносить это уже. Чем победить, куда рыть?

   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


Содержание

Сообщения в этом обсуждении
"ksoftirq каждый вечер грузит систему на 100%"
Отправлено PavelR , 06-Мрт-10 07:19 
> Помогите советом, сил нет выносить это уже. Чем победить, куда рыть?
>
>
>   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
>

Попробуйте начать выдергивать из системника провода, в очередности:

-из сетевых карт
-шнуры прочих внешних устройств
-шнуры питания


"ksoftirq каждый вечер грузит систему на 100%"
Отправлено qwek , 06-Мрт-10 10:06 
Спасибо за ответ.
Опишу всё в более детально. Эта машинка - роутер. На борту три сетевые. Одна - локальная сеть, две других это выход на шейперы которые стоят за ней, рулится направление через iproute2 правил порядка 3000. В задачи роутера входит также блокировка входящих соединений если не разрешен форвад для пакетов источника. Таким образом в итоге имеем около 4000 правил forward accept в iptables.

Как я предполагаю в этом и есть проблема. Каждый пакет проверяется в списке правил forward, затем только отправляется дальше. Чем больше пакетов и выше скорость их поступления тем выше загрузка ядер процессом ksoftirq. При iptables stop нагрузка на ядра падает до 1% . Разделять прерывания от трёх сетевых карт пробовал - результат никакой. Драйверы сетевых менял - результат никакой. Пытался крутить настройками сетевых через ethertol - результат никакой. Пытался исправить положение через настройки sysctl - результат никакой.

Подскажите куда рыть дальше?


"ksoftirq каждый вечер грузит систему на 100%"
Отправлено sdog , 06-Мрт-10 11:09 
>[оверквотинг удален]
>
>Как я предполагаю в этом и есть проблема. Каждый пакет проверяется в
>списке правил forward, затем только отправляется дальше. Чем больше пакетов и
>выше скорость их поступления тем выше загрузка ядер процессом ksoftirq. При
>iptables stop нагрузка на ядра падает до 1% . Разделять прерывания
>от трёх сетевых карт пробовал - результат никакой. Драйверы сетевых менял
>- результат никакой. Пытался крутить настройками сетевых через ethertol - результат
>никакой. Пытался исправить положение через настройки sysctl - результат никакой.
>
>Подскажите куда рыть дальше?

обновить ядро?


"ksoftirq каждый вечер грузит систему на 100%"
Отправлено PavelR , 06-Мрт-10 11:16 
>[оверквотинг удален]
>>списке правил forward, затем только отправляется дальше. Чем больше пакетов и
>>выше скорость их поступления тем выше загрузка ядер процессом ksoftirq. При
>>iptables stop нагрузка на ядра падает до 1% . Разделять прерывания
>>от трёх сетевых карт пробовал - результат никакой. Драйверы сетевых менял
>>- результат никакой. Пытался крутить настройками сетевых через ethertol - результат
>>никакой. Пытался исправить положение через настройки sysctl - результат никакой.
>>
>>Подскажите куда рыть дальше?
>
>обновить ядро?

Вы телепатически определили что ядро старое ?
Не сильно слежу за новостями развития netfilter, но разве там внесли какие-то сверпроизводительные изменения ?


"ksoftirq каждый вечер грузит систему на 100%"
Отправлено sdog , 06-Мрт-10 14:13 
вам не нравится моё предложение обновить ядро? так и на пишите - "считаю идею обновления ядра необоснованой"

"ksoftirq каждый вечер грузит систему на 100%"
Отправлено PavelR , 06-Мрт-10 11:13 
>Опишу всё в более детально.

наконец-то.

>Эта машинка - роутер.

мы догадывались...

>На борту три сетевые. Одна - локальная сеть, две других это выход на шейперы
>которые стоят за ней, рулится направление через iproute2 правил порядка 3000.

Чем люди думают, когда такие количества правил вбивают ? Чем обосновывается такое решение ? Приведите список этих правил, чтоли... Посмотрим на эти ужасы.

>В задачи роутера входит также блокировка входящих соединений если не разрешен
>форвад для пакетов источника.
>Таким образом в итоге имеем около 4000 правил forward accept в iptables.
>Как я предполагаю в этом и есть проблема.

:-)

>Каждый пакет проверяется в
>списке правил forward, затем только отправляется дальше.
>Чем больше пакетов и выше скорость их поступления тем выше загрузка ядер процессом ksoftirq.

как ни странно - но это так и должно быть )

>При iptables stop нагрузка на ядра падает до 1% . Разделять прерывания
>от трёх сетевых карт пробовал - результат никакой. Драйверы сетевых менял
>- результат никакой. Пытался крутить настройками сетевых через ethertol - результат
>никакой. Пытался исправить положение через настройки sysctl - результат никакой.
>
>Подскажите куда рыть дальше?

Ну, причинно-следственные связи вы устанавливать умеете.

А простая логика разве не подсказывает вариантов решения:

-Оптимизировать число правил (уменьшить количество проверок)
- порядок проверок оптимизируйте,
- выстроить древовидную структуру проверок
- уменьшить число правил

-Увеличивать количество маршрутизаторов.
-Сменить маршрутизатор на нечто более производительное?


Показывайте список правил "ip ru sh" и список правил "iptables -nvL FORWARD --line" - очень интересно.


"ksoftirq каждый вечер грузит систему на 100%"
Отправлено PavelR , 06-Мрт-10 11:16 
>[оверквотинг удален]
>
>Как я предполагаю в этом и есть проблема. Каждый пакет проверяется в
>списке правил forward, затем только отправляется дальше. Чем больше пакетов и
>выше скорость их поступления тем выше загрузка ядер процессом ksoftirq. При
>iptables stop нагрузка на ядра падает до 1% . Разделять прерывания
>от трёх сетевых карт пробовал - результат никакой. Драйверы сетевых менял
>- результат никакой. Пытался крутить настройками сетевых через ethertol - результат
>никакой. Пытался исправить положение через настройки sysctl - результат никакой.
>
>Подскажите куда рыть дальше?

кстати, надо еще выгрузить неиспользуемые модули netfilter. Но это даст не такой большой эффект.


"ksoftirq каждый вечер грузит систему на 100%"
Отправлено qwek , 06-Мрт-10 16:46 
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%.


"ksoftirq каждый вечер грузит систему на 100%"
Отправлено qwek , 06-Мрт-10 16:53 
По поводу ядра:
Linux 2.6.23.17 PAE
iptables v1.3.8

"ksoftirq каждый вечер грузит систему на 100%"
Отправлено PavelR , 06-Мрт-10 18:51 
>[оверквотинг удален]
>         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. Но это уже по ситуации.


"ksoftirq каждый вечер грузит систему на 100%"
Отправлено PavelR , 06-Мрт-10 18:58 

Эмм, что-то я совсем фигню пишу :-)


Вам надо:

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


Но для этого возможно придется ядро пересобирать.


"ksoftirq каждый вечер грузит систему на 100%"
Отправлено qwek , 06-Мрт-10 22:11 
>[оверквотинг удален]
>
>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 ясное дело у меня нет. Теперь осталось только потрудиться над тем чтобы он был. Обязательно отпишусь о результате!


"ksoftirq каждый вечер грузит систему на 100%"
Отправлено qwek , 06-Мрт-10 23:42 
Нашел вот какой аргумент:
=======
При тестировании, загрузка 70000 обычных правил заняла около часа, в то время как nfqueue (http://nfqueue.sf.net) почти мгновенно подгружает большие cписки блокировки, оформленные в p2p, dat, csv форматах или преобразованные в специальный сжатый бинарный вид.
=======
http://www.frnd.org/thread-15280-post-34035.html#pid34035
Ссылаются на http://www.opennet.me

Это действительно так?


"ksoftirq каждый вечер грузит систему на 100%"
Отправлено PavelR , 07-Мрт-10 08:12 
>[оверквотинг удален]
>=======
>При тестировании, загрузка 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.


Оно вам надо ? Не, попробуйте конечно...


"ksoftirq каждый вечер грузит систему на 100%"
Отправлено qwek , 07-Мрт-10 21:05 
Да потому и спрашиваю, что сомневаюсь сильно надо ли мне это. Попытка прикрутить IPSET пока не увенчалась успехом. К своему ядру не получается прикрутить. Завтра возьму тестовую машинку, поставлю CentOS и буду пробовать на нём.

Нет ли полезных советов по этому поводу (установка ipset), чтобы не наступать на грабли?


"ksoftirq каждый вечер грузит систему на 100%"
Отправлено qwek , 10-Мрт-10 23:32 
Извините, что долго не отписывался. Проблема полностью решена установкой IPSET. Большое спасибо всем, кто помогал в решение вопроса. Opennet - лучший ресурс для системных администраторов. Еще раз спасибо!

Если у кого-то будут какие либо вопросы - с лёгкостью дам ответы на них.


"ksoftirq каждый вечер грузит систему на 100%"
Отправлено 3y6 , 01-Июн-10 23:52 
>Извините, что долго не отписывался. Проблема полностью решена установкой IPSET. Большое спасибо
>всем, кто помогал в решение вопроса. Opennet - лучший ресурс для
>системных администраторов. Еще раз спасибо!
>
>Если у кого-то будут какие либо вопросы - с лёгкостью дам ответы
>на них.

ну и?...;-)
где мануал по установке?!...три месяца прошло уже!

шучу конечно )

у меня проблема аналогичная, и судя по всему - решается эффективно только айписетом...
были подводные камни? остались ли ссылки на мануалы, которые помогли установить-настроить?...
плз...


"ksoftirq каждый вечер грузит систему на 100%"
Отправлено qwek , 10-Дек-10 21:23 
> у меня проблема аналогичная, и судя по всему - решается эффективно только
> айписетом...
> были подводные камни? остались ли ссылки на мануалы, которые помогли установить-настроить?...
> плз...

Я пошел по пути наименьшего сопротивления - выбрал систему в которой установка ipset не требовала накладывать патч на ядро и сводилась практически к одной команде. Таковой оказалась CentOS. Остальное не сложно найти в инернете, к примеру здесь:

http://mysyslog.ru/posts/244

И все таки если будут конкретные вопросы - отвечу обязательно.