Всем привет!

 

Недавно начала проявляться проблема с высокой нагрузкой цпу. Perf сказал, что грузит native_queued_spin_lock_slowpath.

На машине крутится 32-х ядерный АМД 6282se, прерывания по картам прибиты, bonding + htb + skbprio + ifb + iptables. Трафика порядка ~1Gbp/s и около 2 000 классов.

В какую сторону копать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 08.10.2017 в 10:39, vasya_petrovich сказал:

ашине крутится 32-х ядерный АМД 6282se, прерывания по картам прибиты, bonding + htb + skbprio + ifb + iptables

ОС какой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 08.10.2017 в 10:39, vasya_petrovich сказал:

bonding + htb + skbprio + ifb + iptables

Кроме этого добра есть какая-нибудь СУБД и т.п.?

В top'е чем проц загружен?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
8 минут назад, default_vlan сказал:

Кроме этого добра есть какая-нибудь СУБД и т.п.?

В top'е чем проц загружен?

Нет, более ничего грузящего нет.

NAT на другой машине вынесен.

 

Когда удаляю qdisc на псевдоустройстве, то нагрузка резко падает и native_queued_spin_lock_slowpath идет вниз по нагрузке.
 

Цитата

tc qdisc del dev ifb0 root

Получается, что где-то в htb какая-то бяка.

Хотя там только классы, без фильтров.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
6 минут назад, vasya_petrovich сказал:

Когда удаляю qdisc на псевдоустройстве, то нагрузка резко падает

в slow.log и dmesg что-то есть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В dmesg ничего лишнего не выкидывает.

А что за slow.log? Насколько мне известно он в мускуле юзается...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, vasya_petrovich сказал:

Насколько мне известно он в мускуле юзается...

Точно.

Как я понял из описания проблемы с других форумов, эта проблема возникает по вине файловой системы (массово жалуются на ZFS), либо по причине проблем с самим диском.

Как вариант, в пик нагрузки попробуйте посмотреть в сторону nmon или dstat (nmon более информативен).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не совсем понимаю, какая связь между htb и хардом?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, vasya_petrovich сказал:

Я не совсем понимаю, какая связь между htb и хардом?

Я считаю, что данная нагрузка на проц следствие чего-то более глобального, нежели чем первопричина.

Я бы начал рассматривать от стандартного ввода/вывода: хард, память, сеть. Алгоритм такой:

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

 

htb, насколько я понимаю, ничто иное как шейпирование трафика, поправьте, если не так. Насколько я помню, Iptables шейпировать трафик умеет, причем получше, чем любой другой сторонний софт.

Тот же top позволяет посмотреть насколько то или иное прерывание валит проц.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
34 минуты назад, default_vlan сказал:

Я считаю, что данная нагрузка на проц следствие чего-то более глобального, нежели чем первопричина.

Я бы начал рассматривать от стандартного ввода/вывода: хард, память, сеть. Алгоритм такой:

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

 

htb, насколько я понимаю, ничто иное как шейпирование трафика, поправьте, если не так. Насколько я помню, Iptables шейпировать трафик умеет, причем получше, чем любой другой сторонний софт.

Тот же top позволяет посмотреть насколько то или иное прерывание валит проц.

 

Таблесы не умеют шейпировать трафик.

Правда есть сторонний модуль, где-то тут на форуме пробегала тема, но там больше резалка, нежели шейпер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
8 часов назад, vasya_petrovich сказал:

Получается, что где-то в htb какая-то бяка.

Хотя там только классы, без фильтров.

Это как так? А как трафик по классам раскидывается?

Косяк в логике шейпера, где-то линейный перебор правил начинается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
22 минуты назад, kayot сказал:

Это как так? А как трафик по классам раскидывается?

Косяк в логике шейпера, где-то линейный перебор правил начинается.

Трафик классифицируется через ipset + skbprio

Изменено пользователем vasya_petrovich

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть небольшой прогресс.

Где-то тут на форуме писали, что прибивать очереди к ядрам надо к "близлежащему процу".
Перепривязал очереди, нагрузка резко упала на 15-20%.

 

Гуру, объясните взаимосвязь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно особенности NUMA - адресация памяти соседнего проца очень дорого выходит

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А почему бы hfsc не использовать? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Alex/AT сказал:

А почему бы hfsc не использовать? 

Что-то пока нет желания )))

Я не видел положительных отзывов, по крайней мере на НАГе, и у местных спрашивал, они не знают, как будет работать с hfsc. Те кто сталкивался с локами и отписывался здесь на форуме в конечном итоге ушли на полисер, а меня полисер не устраивает.

Я тут на медне переписывался c иностранными админами, и у меня есть еще одно решение, которое я хочу попробовать.

Дело в том, что на сетевухах интегрированных в моём серваке стоят BCM5709 (Broadcom NetXtreme II), а там очереди совмещенные RxTx, хочу перекинуться на интеловскую карту I350, где очереди разделенные RX отдельно и TX отдельно.

Пробовал дрова компилить более свежие под bcm5709, но они на новом ядре не компилируются, и я особо не стал разбираться. Возможно есть какая-то опция в драйвере, которая делает разделенные очереди?
Возможно, что тогда локов будет меньше.

Отпишусь по результатам.

Изменено пользователем vasya_petrovich

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скорее всего это аппаратная особенность чипа, что очереди совмещены

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 13.10.2017 в 10:48, vasya_petrovich сказал:

Что-то пока нет желания )))

Я не видел положительных отзывов

По опыту (трёхлетней давности) могу сказать, что у HTB с lock contention полная задница. За последние годы оно чуть выровнялось, но не кардинально. Честно говоря, давно не глядел, но вроде бы на RCU его перевести нереально.

 

Я использовал HFSC на BRAS достаточно долго, не могу сказать об этом шейпере ничего негативного. Свою задачу выполняет, иерархию поддерживает, в конфигурации не сложнее HTB. Производительность выше, lock contention был намного ниже. Ну и типовых болезней HTB, связанных с квантованием, у HFSC нет.

И да, меняйте сетевухи таки на I350 или хотя бы на 82576. BCM5709 - это ужасный адаптер в плане производительности, несмотря на его 8 очередей. Хуже наверное только одноочередные 5708 и 82574... :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Переехал на Intel I350-T4.
Ситуацию особо не улучшило, по всей видимости придется пробовать с hfsc.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
4 часа назад, Alex/AT сказал:

И да, меняйте сетевухи таки на I350 или хотя бы на 82576. BCM5709 - это ужасный адаптер в плане производительности, несмотря на его 8 очередей. Хуже наверное только одноочередные 5708 и 82574... :)

Это неправда. Поменял на нагруженном БРАСе bmc5709 на i340 - ничего не поменялось в плане загрузки и производительности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
15 часов назад, Alex/AT сказал:

По опыту (трёхлетней давности) могу сказать, что у HTB с lock contention полная задница. За последние годы оно чуть выровнялось, но не кардинально. Честно говоря, давно не глядел, но вроде бы на RCU его перевести нереально.

 

Я использовал HFSC на BRAS достаточно долго, не могу сказать об этом шейпере ничего негативного. Свою задачу выполняет, иерархию поддерживает, в конфигурации не сложнее HTB. Производительность выше, lock contention был намного ниже. Ну и типовых болезней HTB, связанных с квантованием, у HFSC нет.

И да, меняйте сетевухи таки на I350 или хотя бы на 82576. BCM5709 - это ужасный адаптер в плане производительности, несмотря на его 8 очередей. Хуже наверное только одноочередные 5708 и 82574... :)

Пробовал HFSC на брасе с +\- 6к правил, но увы он отрабатывает в разы хуже HTB, на HTB проц грузится в разы меньше. Возможно я просто не умею готовить HFSC, не поделитесь примером правила для class ?

Пробовал что-то типа такова:
 

tc q replace dev eth1 root handle 1: est 1sec 8sec hfsc default ffff

tc c replace dev eth1 parent 1: classid 1:ffff est 1sec 8sec hfsc sc umax 1500b dmax 150ms rate 1Gbit ul rate 1Gbit
tc q replace dev eth1 parent 1:ffff handle ffff: pfifo

tc c replace dev eth1 parent 1: classid 1:10 est 1sec 8sec hfsc sc umax 1500b dmax 10ms rate 1Mbit ul rate 1Mbit
tc q replace dev eth1 parent 1:10 handle 10: pfifo

 

Изменено пользователем Pavel.M.A

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 16.10.2017 в 12:43, kayot сказал:

Это неправда. Поменял на нагруженном БРАСе bmc5709 на i340 - ничего не поменялось в плане загрузки и производительности.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Alex/AT,  просим в студию вынести приз с вашим примером скрипта hfsc

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
22 часа назад, Pavel.M.A сказал:

Пробовал HFSC на брасе с +\- 6к правил, но увы он отрабатывает в разы хуже HTB, на HTB проц грузится в разы меньше. Возможно я просто не умею готовить HFSC, не поделитесь примером правила для class ?

А можно вопрос - зачем добавляете est / umax / dmax? С заданием только sc rate / ul rate ныне есть проблемы?


vasya_petrovich

Секунду, вытаскиваю из старого кода. На выходных погоняю синтетику и напишу, есть ли разница с HTB на свежих ядрах. У меня в конфигурации использовалось огромное число классов - например на входных интерфейсах класс на сессию/сервис.

Ну, для понимания, из чего дёргаю:

        $this->asg->nq->tc_enqueue('class', 'replace', $session->params['alloc']['ingress']['dev'],
            'parent 1: classid 1:'.dechex($session->params['alloc']['ingress']['bcc']).' hfsc',
            isset($session->params['in_rate']) ?
             ('sc rate '.$session->params['in_rate'].' ul rate '.$session->params['in_rate']) :
             'sc rate 10gbit');
        $this->asg->nq->tc_enqueue('class', 'replace', $session->params['alloc']['egress']['dev'],
            ' parent 1: classid 1:'.dechex($session->params['alloc']['egress']['bcc']).' hfsc',
            isset($session->params['out_rate']) ?
             ('sc rate '.$session->params['out_rate'].' ul rate '.$session->params['out_rate']) :
             'sc rate 10gbit');

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти