Высокая частота прерываний системы

Мой сервер имеет 24 ядра ЦП, 96 ГБ памяти, установлен CentOS 7.2 x86_64.

После запуска моей программы с большим набором данных моя программа будет использовать около 50 ГБ памяти, и система Linux будет показывать высокую частоту системных прерываний, но скорость переключения контекста будет низкой. dstat покажет где-то между 500k int / s и 1000k int / s. Использование ЦП будет близко к 100%, около 40% нас, 60% от времени.

Если набор данных небольшой, программа будет использовать около 5G памяти, и все будет хорошо, загрузка процессора 100%, около 99% нас, 1% сы. Ожидается.

Программа написана мной, это многопоточная программа. Он не выполняет никакого сетевого ввода-вывода, очень мало операций ввода-вывода на диск, в основном операции с памятью и арифметические операции. Модель потока и алгоритм одинаковы независимо от размера набора данных.

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

4
задан 6 December 2016 в 14:03
2 ответа

Я предполагаю, что у вас нет однопроцессорной системы с процессором 24C. Так что это, вероятно, система NUMA с 2x12C. В этом случае я бы посоветовал убедиться, что программа использует только один узел numa (обычно сокет) и его локальную половину ОЗУ.

Когда у вас используется 50 ГБ, это означает, что локальность numa не может быть гарантирована, поскольку она больше чем половина памяти.

Для проверки фактического состояния используйте numastat. Если вы используете RHEL, вы можете использовать numad для автоматической обработки местоположения памяти. Или вы можете использовать numactl --hardware предоставит вам обзор ваших узлов HW NUMA. Есть довольно приятное руководство с примерами:

http://fibrevillage.com/sysadmin/534-numactl-installation-and-examples

Таким образом вы можете заблокировать свою программу на желаемых процессорах.

И я ' d предложить проверить, запущен ли демон irqbalance, иначе одно ядро ​​может быть перегружено прерываниями.

1
ответ дан 3 December 2019 в 04:08

В Linux: watch cat / proc / interrupts покажет вам количество вызовов прерывания на прерывание и процессор. Думаю, в вашем случае вы увидите LOC (локальный таймер) и RES (изменение расписания).

0
ответ дан 3 December 2019 в 04:08

Теги

Похожие вопросы