ISSN 2305-5626. Вестник МГТУ им. Н.Э. Баумана: электронное издание. 2013
7
практически на 100 %. Программы, запущенные с добавленным в них
анализатором, используют не более 55 % процессорного времени.
Это связано с применением глобальных блокировок между потоками
в анализаторе гонок для того, чтобы безопасно добавлять события в
журнал выполнения программы и осуществлять поиск гонок. Сред-
нее использование процессора программой (при ограничении исто-
рии) составляет 52 % и практически не изменяется со временем. В то
же время на графике видно, что использование процессора програм-
мой, когда история не ограничивается, падает с 55 до 27 %. Это обу-
словлено тем, что процедура анализа журнала выполнения происхо-
дит в единственном потоке, а так как размер журнала выполнения в
программе без использования ограничений истории растет линейно
от числа обращений к памяти, то большее время потоки ожидают по-
лучение доступа к журналу.
Рис. 6. Потребление процессорного времени анализируемой программой
В результате проделанной работы разработан динамический ана-
лизатор поиска гонок в программах, реализованных на языке С. Ана-
лизатор использует систему LLVM для модификации исполняемого
кода на этапе компиляции. Для этого разработан обработчик AST-
деревьев для платформы LLVM и переопределены системные функ-
ции POSIX по работе с примитивами синхронизации и управления
потоками выполнения. Использование анализатора показало, что при
его применении накладные расходы остаются незначительными.
Работа выполнена при частичной поддержке Российского фонда
фундаментальных исследований (грант № 13-07-00918).