Jump to content

Гпроф

Gprof — это анализа производительности инструмент приложений Unix . Он использовал гибрид инструментов и выборки. [1] и был создан как расширенная версия более старого «профессионального» инструмента. В отличие от prof, gprof способен собирать и печатать ограниченный график вызовов . [1] [2]

GPROF изначально был написан группой под руководством Сьюзан Л. Грэм из Калифорнийского университета в Беркли для Berkeley Unix ( 4.2BSD). [3] ). в рамках проекта GNU для GNU Binutils в 1988 году. Другая реализация была написана Джеем Фенласоном [4] [5]

Выполнение

[ редактировать ]

Код инструментирования автоматически вставляется в код программы во время компиляции (например, с помощью ' -pg'опция компилятора gcc ), чтобы собрать данные вызывающей функции. Вызов функции монитора mcount вставляется перед каждым вызовом функции. [6]

Данные выборки сохраняются в файле «gmon.out» или в файле « имя_программы .gmon» непосредственно перед выходом из программы и могут быть проанализированы с помощью команды « gprof'инструмент командной строки. Несколько файлов gmon можно объединить с помощью ' gprof -s' для накопления данных после нескольких запусков программы.

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

Вторая часть вывода представляет собой текстовый граф вызовов, который показывает для каждой функции, кто ее вызвал (родительская функция) и кого она вызвала (дочерние подпрограммы). Существует внешний инструмент под названием gprof2dot, способный преобразовать граф вызовов из gprof в графическую форму. [7]

Ограничения и точность

[ редактировать ]

Во время выполнения значения времени получаются путем статистической выборки. Выборка осуществляется путем проверки счетчика программ целевой программы через регулярные промежутки времени с использованием операционной системы прерываний profil(2) или setitimer(2) (запрограммированных с помощью системных вызовов ). Полученные данные не являются точными, а являются статистическим приближением. Величина ошибки обычно превышает один период выборки. Если значение в n раз превышает период выборки, ожидаемая ошибка значения равна квадратному корню из n периодов выборки. [8] [9] Типичный период выборки составляет 0,01 секунды (10 миллисекунд) или 0,001 секунды (1 мс), или, другими словами, 100 или 1000 выборок в секунду времени работы ЦП.

В некоторых версиях, таких как BSD, профилирование общих библиотек может быть ограничено из-за ограничений функции профиля , которая может быть реализована как библиотечная функция или как системный вызов. существовала аналогичная утилита В glibc под названием «sprof» для профилирования динамических библиотек. [10]

Gprof не может измерять время, проведенное в режиме ядра (системные вызовы, ожидание процессора или ожидание ввода-вывода), и профилируется только код пользовательского пространства. [9]

В некоторых реализациях функция mcount может не быть потокобезопасной, поэтому профили многопоточного приложения могут быть неправильными (обычно она профилирует только основной поток приложения). [11]

Накладные расходы на оборудование могут быть высокими (по оценкам, 30 % [12] -260% [13] ) для программ высшего порядка или объектно-ориентированных программ. Взаимная рекурсия и нетривиальные циклы не разрешаются с помощью подхода gprof (контекстно-независимый граф вызовов), поскольку он записывает только обход дуги, а не полные цепочки вызовов. [13] [14] [15]

Gprof со сбором графа вызовов можно использовать только с совместимыми компиляторами, такими как GCC, clang/LLVM и некоторыми другими.

В 2004 году газета GPROF появилась в списке 50 самых влиятельных газет PLDI всех времен как одна из четырех газет 1982 года. [16]

По словам Тиля, [6] «GPROF... произвел революцию в области анализа производительности и быстро стал инструментом, который выбирают разработчики по всему миру... инструмент до сих пор имеет большое количество поклонников... инструмент по-прежнему активно поддерживается и остается актуальным в современном мире».

См. также

[ редактировать ]
  1. ^ Jump up to: а б Сьюзен Л. Грэм, Питер Б. Кесслер и Маршалл К. Маккусик. gprof: профилировщик выполнения графа вызовов // Материалы симпозиума SIGPLAN '82 по построению компиляторов, SIGPLAN Notifications, Vol. 17, № 6, стр. 120-126; дои: 10.1145/800230.806987
  2. ^ gprof --- Граф вызовов // Пин Хуан, Новое изобретение вычислений, Лаборатория искусственного интеллекта Массачусетского технологического института
  3. ^ ИСТОРИЯ Профилировщик gprof появился в версии 4.2BSD.
  4. ^ Руководство по GNU gprof : «GNU gprof был написан Джеем Фенласоном».
  5. ^ Бюллетень GNU, том. 1 нет. 5 (1988): «Сотрудник Фонда, заменяющий Gprof, Джей Фенласон недавно завершил работу над профилировщиком для GNU C, совместимым с GPROF от Berkeley Unix».
  6. ^ Jump up to: а б Джастин Тиль, Обзор инструментов и методов анализа производительности программного обеспечения: от GProf до DTrace (2006) «2.1.1 Обзор GProf»
  7. ^ Визуализация графа вызовов Gprof // Поваренная книга для научных вычислений. Кулинарная книга Python. Федеральная политехническая школа Лозанны (EPFL)
  8. ^ Статистическая неточность gprof Вывод , заархивированный 29 мая 2012 г. на Wayback Machine.
  9. ^ Jump up to: а б Инструменты профилирования gprof в системах BG/P. Архивировано 21 декабря 2013 г. в Wayback Machine , «Проблемы интерпретации данных профиля», Argonne Leadership Computing Facility.
  10. ^ «Проект qprof» . HP Labs, Research (в архиве) . Архивировано из оригинала 4 августа 2014 года . Проверено 28 сентября 2023 г. {{cite web}}: CS1 maint: bot: исходный статус URL неизвестен ( ссылка )
  11. ^ HOWTO: использование gprof с многопоточными приложениями // Сэм Хосевар, 13 декабря 2004 г.
  12. ^ GNU gprof Profiler. Архивировано 8 декабря 2015 г. в Wayback Machine , Ю Кай Хун, факультет математики Национального тайваньского университета; 19 июля 2008 г.
  13. ^ Jump up to: а б Профилирование пути вызова с низкими издержками для немодифицированного оптимизированного кода , ACM 1-59593-167/8/06/2005.
  14. ^ JM Spivey Быстрое и точное профилирование графа вызовов . Архивировано 7 февраля 2012 г. в Wayback Machine , 3 сентября 2003 г. // Архив программного обеспечения - практика и опыт, том 34, выпуск 3, март 2004 г., страницы 249–264. Спиви, Дж. М. (2004). «Быстрое и точное профилирование графа вызовов». Программное обеспечение: практика и опыт . 34 (3): 249–264. CiteSeerX   10.1.1.62.1032 . дои : 10.1002/спе.562 . S2CID   17866706 .
  15. ^ Йоси Крейнин, Как лгут профилировщики: случаи gprof и KCachegrind // 2 февраля 2013 г.
  16. ^ 20 лет PLDI (1979–1999): Выбор, Кэтрин С. МакКинли, редактор

Дальнейшее чтение

[ редактировать ]
  • Сьюзен Л. Грэм, Питер Б. Кесслер и Маршалл К. Маккусик. gprof: профилировщик выполнения графа вызовов // Материалы симпозиума SIGPLAN '82 по построению компиляторов, SIGPLAN Notifications, Vol. 17, № 6, стр. 120–126; дои: 10.1145/800230.806987
  • Грэм С.Л., Кесслер П.Б. и МакКьюсик М.К. (1983). Профилировщик выполнения модульных программ. Программное обеспечение: Практика. Эксперимент., 13: 671–685. дои: 10.1002/спе.4380130803
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 224b689ff7e00477201b526da4cbd0ad__1718481780
URL1:https://arc.ask3.ru/arc/aa/22/ad/224b689ff7e00477201b526da4cbd0ad.html
Заголовок, (Title) документа по адресу, URL1:
Gprof - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)