Плюсы и минусы статического и динамического инструментария

StackOverflow https://stackoverflow.com/questions/2038625

Вопрос

Существует множество статических и динамических инструментов.Soot — это статический инструментарий для байт-кода Java.Pin и Valgrind — это инструменты динамического инструментирования двоичных файлов.

Каковы плюсы и минусы статических и динамических инструментов?Я считаю, что статические инструментальные инструменты лучше с точки зрения производительности во время выполнения, тогда как динамические инструменты более мощные.Пожалуйста, сравните их с точки зрения возможностей и производительности.

Плюс, в чем разница между использованием инструментальных средств и написанием прохода LLVM?

Это было полезно?

Решение

Я предполагаю, что необходимо найти код, который требует значительного времени и который можно оптимизировать, чтобы сэкономить это время.Это другая цель, чем просто хронометраж.

Я скептически отношусь к статическим анализаторам, потому что все зависит от состава входных данных.

Динамический инструментарий пытается измерить свойства функций, такие как:собственное время и общее время, абсолютное, среднее и процентное.Также подсчитывается количество вызовов и роль каждой подпрограммы в графе вызовов.

Динамическая инструментовка (а-ля гпроф) было стандартом де-факто на протяжении десятилетий, но это далеко не последнее слово.Во-первых, важно понимать, что большая часть статистики, которую он вам предоставляет, не соответствует вашим первоначальным потребностям.

В наши дни (ИМХО) вам нужен профилировщик выборки, который производит выборку стека вызовов, а не только счетчика программ.Он должен производить выборку по времени настенных часов, а не только по времени процессора.Нет необходимости отбирать образцы с высокой частотой.Он должен подавлять выборку, когда приложение ожидает ввода пользователя.Он должен предоставлять вам информацию на уровне строки или инструкции, а не только на уровне функции.Самая важная статистика, которую он должен предоставить вам для строки кода, — это процент содержащих ее образцов, поскольку это наиболее прямой показатель времени, которое можно сэкономить, если эта строка оптимизирована.

Некоторые профилировщики могут это сделать, в частности Oprofile и RotateRight/Zoom.

Другие советы

Плюсами статического инструментария является тот факт, что анализ не зависит от входных данных.Анализ происходит на исходном коде и включает все пути кода.Полное покрытие.Этот тип инструментов обычно перезаписывает двоичный файл, который готов к выполнению без необходимости использования другого процесса во время выполнения.Это также означает, что код будет выполняться быстро, и только накладные расходы будут связаны с внедренным кодом.Недостатком статического инструментирования является отсутствие детального анализа, который вызван отсутствием информации во время выполнения, и из-за этого иногда очень сложно достичь поставленных целей.

С другой стороны, динамическое инструментирование включает в себя все детали и информацию во время выполнения кода.В большинстве случаев инструменты, выполняющие динамическое инструментирование, написать легко.С другой стороны, он не может достичь полного покрытия кода из-за того, что путь выполнения зависит от предоставленных входных данных.Кроме того, тот факт, что необходимо подключить внешний процесс и инструментировать исходный, замедляет работу.

AFAIC, проходы LLVM используются для статического инструментирования, поскольку сгенерированный код создается во время компиляции и уже записан в окончательном двоичном виде и наверняка включает в себя все плюсы и минусы методов статического инструментирования.

В заключение, это вопрос того, что вам нужно.Вам следует выбрать правильный инструмент для своей работы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top