The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Профилирование программ"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Профилирование программ" 
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 15-Ноя-05, 18:46  (MSK)
Каким профилировщиком можно получить данные о времени выполнения программы в разбивке по функциям, с учётом времени выполнения непрофилированных функций и вызовов ядра? Сколько я gprof ни ковырял, нужного эффекта не получил - считает только время исполнения профилированного кода (собственно, счёт), без учёта, например, затрат времени на исполнение внешней непрофилированной библиотеки.

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

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]

1. "Профилирование программ" 
Сообщение от ACCA Искать по авторуВ закладки(ok) on 15-Ноя-05, 21:29  (MSK)
>время исполнения профилированного кода (собственно, счёт), без учёта, например, затрат времени
>на исполнение внешней непрофилированной библиотеки.

Этот вопрос имеет смысл только в real-time OS. Для обычных систем управление может в любой момент уйти к другому процессу, особенно кому-нибудь вроде kswapd, ksoftirq или kjornald.

Посмотри http://oprofile.sourceforge.net, man time

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Профилирование программ" 
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 15-Ноя-05, 21:51  (MSK)
>Этот вопрос имеет смысл только в real-time OS. Для обычных систем
>управление может в любой момент уйти к другому процессу, особенно
>кому-нибудь вроде kswapd, ksoftirq или kjornald.

Здесь весь вопрос в необходимой точности измерений и условиях их
проведения. Меня, например, сильно интересуют сравнительные затраты
времени на исполнение разных SQL-команд, вызываемых в весьма большом
количестве из моей программы. Расставить счётчики вручную можно, но
безбожно хлопотно. И результаты потом обрабатывать нетривиально:
call graph сооружать - геморрой преизрядный.

Вот и хотелось бы найти софтину, которая хотя бы на границах функций
главного, управляющего модуля тайминги померяла, поглядела структуру
вызовов и выдала отчётЪ. A la то, что даёт gprof, только с учётом
затрат времени на "внешние", непрофилируемые вызовы. Пусть даже с
погрешностями - вызовы крупные, на незагруженной посторонними
задачами машинке погрешность будет небольшая.

>Посмотри http://oprofile.sourceforge.net, man time

Про time оно понятно, а вот oprofile - слегка накрученный вариант
на тему gprof. Не то.

В любом случае спасибо за ответ.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Профилирование программ" 
Сообщение от ACCA Искать по авторуВ закладки(ok) on 15-Ноя-05, 23:07  (MSK)
>проведения. Меня, например, сильно интересуют сравнительные затраты
>времени на исполнение разных SQL-команд, вызываемых в весьма большом
>количестве из моей программы. Расставить счётчики вручную можно, но

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

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Профилирование программ" 
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 15-Ноя-05, 23:18  (MSK)
>Это вообще из SQL-сервера проще выцепить.

Интересно, как? Меня слабо интересует, как оптимизировать какой-то один
конкретный запрос, мне интересно, какие многократно исполняемые запросы
пожирают время исполнения моей программы?

>Если же хочется именно из программы, то я бы сделал макро,
>который вставит необходимый код вокруг SQL-вызова.

Запросов штук двести. Около каждого писать по макросу, да ничего при
этом не сломать, да результат иерархически разложить по процедурам -
работы на неделю. Причём работы весьма трудоёмкой и тупой.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Профилирование программ" 
Сообщение от ACCA Искать по авторуВ закладки(ok) on 15-Ноя-05, 23:38  (MSK)
>>Это вообще из SQL-сервера проще выцепить.
>
>Интересно, как? Меня слабо интересует, как оптимизировать какой-то один

grep + awk


>Запросов штук двести. Около каждого писать по макросу, да ничего при

Чуть проще - заменить вызов SQL макросом, который определить один на всех. Макрос допустим сваливает в дамп текст запроса + имя модуля + номер строки + время.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Профилирование программ" 
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 16-Ноя-05, 15:54  (MSK)
>grep + awk

Над данными трассировки СУБД? Хм, вариант. Правда, здесь уже можно получить
искажение реальной картины, так как включение трассировки исполнения
запросов значительно тормозит работу. Во всяком случае, в ORACLE.

>Чуть проще - заменить вызов SQL макросом, который определить один на всех.
>Макрос допустим сваливает в дамп текст запроса + имя модуля +
>номер строки + время.

Видимо, так и придётся. Если тулза не найду.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Профилирование программ" 
Сообщение от MaximKuznetsov Искать по авторуВ закладки on 16-Ноя-05, 21:16  (MSK)
ltrace - трассировка библиотечных вызовов,
strace - системных..
возможно ещё понадобится пачка скриптов чтоб соотнести их вывод
с текстом программы и результатом gprof


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "Профилирование программ" 
Сообщение от ACCA Искать по авторуВ закладки(ok) on 17-Ноя-05, 17:05  (MSK)
>ltrace - трассировка библиотечных вызовов,
>strace - системных..

В них времени нет. А "соотносить результаты" - совсем нетривиальная задача.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "Профилирование программ" 
Сообщение от horsh Искать по авторуВ закладки(??) on 20-Ноя-05, 19:36  (MSK)
>Каким профилировщиком можно получить данные о времени выполнения программы в разбивке по
>функциям, с учётом времени выполнения непрофилированных функций и вызовов ядра? Сколько
>я gprof ни ковырял, нужного эффекта не получил - считает только
>время исполнения профилированного кода (собственно, счёт), без учёта, например, затрат времени
>на исполнение внешней непрофилированной библиотеки.
>
>Понятно, что можно вручную расставить таймеры, но программа большая, и хотелось бы
>минимизировать ручную работу при поиске как раз тех самых мест, где
>оные таймеры и нужны.

это делается с помощью Performance Analyzer из Sun Studio. он бесплатный.

там есть программа collect для сборки семплов
что-то типа
$collect myprog myarg1 myarg2
потом можно запустить гуевый analyzer и он покажет все, что вас интересует.
Вместо гуевего аналайзера можно использовать CLI утилиты er_print с друзьями.

Для профилировки ядра есть er_kernel он сидит поверх Dtrace и собирает семплинг кернельлэнда. Чтоб профилировать и ядро и юзерлэнд можно запустить так:

$er_kernel collect myprog myarg1 myarg2
все соберется вместе.

доки тут: http://docs.sun.com/app/docs/doc/819-3687
качать тут: https://sdlcweb1b.sun.com/ECom/EComActionServlet;jsessionid=932F88E03895F0473DF4336467B55C62

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "Профилирование программ" 
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 20-Ноя-05, 21:13  (MSK)
Спасибо за наводку. Попробую. Если сработает, в очередной раз подтвердится моё старое убеждение, что Sun - rulez.
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

11. "Профилирование программ" 
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 16-Дек-05, 14:06  (MSK)
>это делается с помощью Performance Analyzer из Sun Studio. он бесплатный.

Похоже, что не делается. Проблема в том, что оный analyzer точно так же, как и прочие испробованные мной тулзы, не выдаёт время реального выполнения тех или иных функций. В счётчики накапливается только время, в течение которого данная программа жрала процессорное время. Что для моих целей непригодно.

Жаль.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

12. "Профилирование программ" 
Сообщение от horsh Искать по авторуВ закладки(??) on 22-Дек-05, 21:59  (MSK)
>>это делается с помощью Performance Analyzer из Sun Studio. он бесплатный.
>
>Похоже, что не делается. Проблема в том, что оный analyzer точно так
>же, как и прочие испробованные мной тулзы, не выдаёт время реального
>выполнения тех или иных функций. В счётчики накапливается только время, в
>течение которого данная программа жрала процессорное время. Что для моих целей
>непригодно.

В аналайзере это называется
"Total LWP time, hich is the real time, summed across threads"

нужно галочку в View->Set Data Presentation поставить.

кроме того имеет смысл пораспросить товарищей вот тут:
http://forum.sun.com/forum.jspa?forumID=256

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру