PVS-Studio - статический анализатор, выявляющий ошибки в исходном коде приложений на языке C/C++. Подобно компилятору, анализатор обходит файл за файлом в каталоге с исходниками проекта, выполняя свою задачу. Но и без использования внешних инструментов, сборка некоторых проектов может длиться несколько часов. Статический анализ такого проекта будет занимать ещё больше времени. Для сборки крупных проектов, некоторые разработчики прибегают к использованию распределённой сборки с помощью инструмента Incredibuild. В данной статье не будут рассмотрены детали интеграции PVS-Studio в Incredibuild, а будет рассказано о проверке большого проекта, замерах времени и других интересных фактах.
PVS-Studio выполняет анализ C/C++ кода и подсказывает программисту, где находятся возможные ошибки, или указывает на участки кода, которые могут повлечь проблемы в будущем.
Анализатор состоит из нескольких частей, и проверку каждого файла с исходным кодом выполняет процесс PVS-Studio.exe (ядро анализатора). Далее я буду использовать термин "поток", подразумевая, что в одном потоке запущен один процесс PVS-Studio.exe для проверки одного исходно файла проекта. А файлов будет очень много....
Incredibuild - программное обеспечение для распределённых вычислений, которое позволяет с лёгкостью задействовать несколько компьютеров и ускорить работу своих приложений. При этом не нужно беспокоится за зависимости, которые присутствуют у распараллеленных процессах.
Мы будем использовать Incredibuild, чтобы выполнить анализ проекта во много потоков, используя дополнительные компьютеры.
Проверяемый проект пожелал быть неназванным, но он имеет около 7 млн. строк исходного кода. Размер кодовой базы - 300 MB, и около 9000 файлов. Проверка такого проекта анализатором PVS-Studio на компьютере с процессором Intel Core i7-4770 3.40 GHz и 16 GB ОЗУ в 8 потоков занимает около 6 часов. Далее я расскажу, как с помощью инструмента Incredibuild и нескольких компьютеров удалось сильно ускорить время анализа проекта.
Во всех тестах использовались компьютеры примерно одной конфигурации, позволяя выполнять анализ в 8 потоков на каждом из них.
При настройке Incredibuild на компьютерах, один из них настраивается как координатор, остальные настраиваются как агенты, которые подключаются к координатору. Т.к. проверка проекта запускалась на агенте, то на этом компьютере в настройках было задано загружать только 1 поток, чтобы излишняя нагрузка не мешала сбору результатов. Для координатора тоже было задано выполнять вычисления только в 1 поток.
Для первого тестового запуска PVS-Studio, были доступны 5 компьютеров:
Итого 1 + 1 + 8 + 8 + 8 = 26 потоков для параллельного запуска анализатора для 26 файлов одновременно.
На рисунке 1 представлена проверка проекта анализатором в 26 потоков.
Рисунок 1 - Проверка проекта анализатором в 26 потоков
Для читателей, не знакомых с Incredibuild, поясню, что зелёной полоской обозначается 1 процесс, который успешно отработал на компьютере с именем, которое написано слева. На полоске пишется имя процесса. А по временной шкале снизу можно определить, в какой момент времени процесс стартовал и завершился, таким образом сразу видна длительность работы любого распределённого процесса.
На рисунке выше запечатлена проверка довольно крупных исходных файлов. Распараллеливание выполняется очень равномерно и эффективно при длительной загрузке потоков.
На рисунке 2 представлен анализ разных по объёму файлов исходного кода.
Рисунок 2 - Проверка мелких и крупных файлов проекта в 26 потоков
Как мы видим, быстрое завершение потоков приводит к накладным расходам на создание новых потоков и происходит небольшое простаивание некоторых компьютеров. Но в целом распараллеливание выполняется очень хорошо. Анализ проекта выполнился за 2 часа 10 минут вместо 6 часов, очень даже неплохо.
Для второго тестового запуска PVS-Studio, были доступны 7 компьютеров:
Итого 1 + 2 + 8 + 8 + 8 + 8 + 8 = 43 потоков для параллельного запуска анализатора для 43 файлов одновременно.
На рисунке 3 представлена проверка проекта анализатором в 43 потока.
Рисунок 3 - Проверка проекта анализатором в 43 потока.
Список из 43 потоков не удаётся увидеть целиком, но хорошо видно, как возросло простаивание компьютеров при проверке маленьких файлов. Но всё равно выглядит очень здорово, учитывая, что общее время анализа составило уже 1 час 24 минуты вместо 6 часов и из приложенных усилий было только быстрая установка Incredibuild на нужные компьютеры. Для настройки PVS-Studio потребовалось изменить всего 1 пункт в настройках - задать количество потоков.
Воспользовавшись инструментом Incredibuild, который обычно присутствует для сборки очень крупных проектов, мы смогли ускорить время анализа проекта с помощью PVS-Studio в 4.2 раза, задействовав несколько компьютеров разработчиков, которые сидели рядом. Все настройки Incredibuild использовались по умолчанию, а их там довольно много. Наверняка можно достичь ещё большей производительности, но нам был интересен "быстрый старт".
Ещё раз, что нам потребовалось для быстрой проверки проекта с помощью PVS-Studio:
Полученные результаты:
О том, как использовать PVS-Studio и Incredibuild в своём проекте, вы можете прочесть в статье: "Интеграция PVS-Studio с системой распределённой сборки Incredibuild".
0