Снижение производительности за счет увеличения числа потоков более 4 в 24-ядерном процессоре

У меня Intel Xeon E5-2620, который имеет 24 на 2 процессора. Я написал приложение, которое создает 24 потока для расшифровки AES с использованием openssl. Когда я увеличиваю число потоков с 1 до 24 при расшифровке 1 миллиона данных, я получаю следующий результат:
введите описание изображения здесь

Проблема в том, что когда я увеличиваю номера потоков, все ядра, которые я определила, становятся на 100%, и из-за оперативной памяти в 32 ГБ всегда по крайней мере половина оперативной памяти свободна, что указывает на то, что проблема не в использовании ядра или ограничении оперативной памяти.
Мне интересно знать, должен ли я установить специальный параметр для повышения производительности на уровне ОС, или это ограничение процесса, которое не может достигать более 4 потоков при максимальной производительности.
Я должен упомянуть, что когда я выполняю «openssl evp …» для тестирования дешифрования шифрования из-за разветвления процесса, это увеличивает производительность примерно в 20 раз по сравнению с производительностью одного ядра.
У кого-нибудь есть идеи?

1

Решение

Я наконец нашел причину. несколько процессоров имеют разные оперативные памяти на серверах, которые имеют разные расстояния. когда я создавал потоки, пока 4 потока не были созданы на одном процессоре, а пятый поток будет размещен на втором процессоре, что снижает производительность из-за отсутствия использования NUMA в ОС.
поэтому, когда я отключил ядра второго процессора, производительность 6 потоков увеличилась, как и ожидалось.
Вы можете отключить 7-е ядро, используя следующую команду:

cd /sys/devices/system/cpu/
echo 0 > cpu6/online
1

Другие решения

Если многопроцессорная обработка дает 20-кратное ускорение, а эквивалентная многопоточность — только 2,5-кратное, очевидно, что в многопоточном коде есть узкое место. Кроме того, это узкое место не связано с аппаратной архитектурой.

Это может быть что-то в вашем коде или в базовой библиотеке. Это действительно невозможно сказать, не изучив оба в некоторых деталях.

Я бы начал с рассмотрения конфликта блокировок в вашем многопоточном приложении.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector