Плюсы и минусы статического и динамического инструментария
-
19-09-2019 - |
Вопрос
Существует множество статических и динамических инструментов.Soot — это статический инструментарий для байт-кода Java.Pin и Valgrind — это инструменты динамического инструментирования двоичных файлов.
Каковы плюсы и минусы статических и динамических инструментов?Я считаю, что статические инструментальные инструменты лучше с точки зрения производительности во время выполнения, тогда как динамические инструменты более мощные.Пожалуйста, сравните их с точки зрения возможностей и производительности.
Плюс, в чем разница между использованием инструментальных средств и написанием прохода LLVM?
Решение
Я предполагаю, что необходимо найти код, который требует значительного времени и который можно оптимизировать, чтобы сэкономить это время.Это другая цель, чем просто хронометраж.
Я скептически отношусь к статическим анализаторам, потому что все зависит от состава входных данных.
Динамический инструментарий пытается измерить свойства функций, такие как:собственное время и общее время, абсолютное, среднее и процентное.Также подсчитывается количество вызовов и роль каждой подпрограммы в графе вызовов.
Динамическая инструментовка (а-ля гпроф) было стандартом де-факто на протяжении десятилетий, но это далеко не последнее слово.Во-первых, важно понимать, что большая часть статистики, которую он вам предоставляет, не соответствует вашим первоначальным потребностям.
В наши дни (ИМХО) вам нужен профилировщик выборки, который производит выборку стека вызовов, а не только счетчика программ.Он должен производить выборку по времени настенных часов, а не только по времени процессора.Нет необходимости отбирать образцы с высокой частотой.Он должен подавлять выборку, когда приложение ожидает ввода пользователя.Он должен предоставлять вам информацию на уровне строки или инструкции, а не только на уровне функции.Самая важная статистика, которую он должен предоставить вам для строки кода, — это процент содержащих ее образцов, поскольку это наиболее прямой показатель времени, которое можно сэкономить, если эта строка оптимизирована.
Некоторые профилировщики могут это сделать, в частности Oprofile и RotateRight/Zoom.
Другие советы
Плюсами статического инструментария является тот факт, что анализ не зависит от входных данных.Анализ происходит на исходном коде и включает все пути кода.Полное покрытие.Этот тип инструментов обычно перезаписывает двоичный файл, который готов к выполнению без необходимости использования другого процесса во время выполнения.Это также означает, что код будет выполняться быстро, и только накладные расходы будут связаны с внедренным кодом.Недостатком статического инструментирования является отсутствие детального анализа, который вызван отсутствием информации во время выполнения, и из-за этого иногда очень сложно достичь поставленных целей.
С другой стороны, динамическое инструментирование включает в себя все детали и информацию во время выполнения кода.В большинстве случаев инструменты, выполняющие динамическое инструментирование, написать легко.С другой стороны, он не может достичь полного покрытия кода из-за того, что путь выполнения зависит от предоставленных входных данных.Кроме того, тот факт, что необходимо подключить внешний процесс и инструментировать исходный, замедляет работу.
AFAIC, проходы LLVM используются для статического инструментирования, поскольку сгенерированный код создается во время компиляции и уже записан в окончательном двоичном виде и наверняка включает в себя все плюсы и минусы методов статического инструментирования.
В заключение, это вопрос того, что вам нужно.Вам следует выбрать правильный инструмент для своей работы.