mainameiz
@mainameiz
Full-stack web-developer

Почему несколько процессов начинают мешать друг другу на многоядерном процессоре (28 ядер)?

Есть в распоряжении jenkins на мощной тачке (28 ядер/56 логических процессора, 128Gb оперативы, hdd-диски)
В нём гоняются тесты rails-приложения.
Одна сборка запускает 12 паралелльных поток для прогона тестов. Проц при этом загружается на 25%. Памяти уходит 10Gb. Сборка выполняется за ~6 минут. Утилизация дисков вырастает только при сборке docker-образов (~30сек от общего времени сборки), а во время запуска тестов - минимальная.

И тут возникает непонятная ситуация. Казалось бы, что ресурсов CPU еще достаточно для запуска еще как минимум 3 билдов. Но при добавлении дополнительных сборок, растет время сборки всех билдов. Так, 4 одновременных билда собираются 12! минут.
Кто-нибудь может объяснить почему процессы, которые вроде бы не должны влиять на друг друга и которым хватает ресурсов, так себя ведут?
  • Вопрос задан
  • 463 просмотра
Пригласить эксперта
Ответы на вопрос 3
vaut
@vaut
А почему это не будут влиять?
Начнем с того что при частичной загрузке может работать динамический разгон частоты процессора. А при полной опускаться до базовой частоты.
Далее пропускная способность оперативной памяти и дисков тоже имеет лимит.
Ну и в конце концов кеш начинает работать менее эффективно.
Еще и про то что гипертреды работают медленнее и соответственно половина начинает просто медленнее считаться забыл.
Ответ написан
Комментировать
dimonchik2013
@dimonchik2013
non progredi est regredi
"не должны влиять" - это в Вашей голове или в коде Дженкинса?
да и rails-приложение такое впечатление что это Ruby on Rails со своим GILом и этим вот всем
Ответ написан
А что ожидалось от однопоточных приложений? Тем более jenkins никогда не отличался адекватностью в плане расходования ресурсов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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