Online video hd

Смотреть жесткое видео

Официальный сайт interaktiveboard 24/7/365

Смотреть видео бесплатно


anjolio 05.12.09 19:02 # +0
Спасибо!
Я не программист, поэтому, если честно, не знал что такое вообще есть :)
Посему лично от меня спасибо за просвещение!
necrotigr 05.12.09 21:44 # +0
Не за что :) Я вот тоже не так давно про них узнал, точнее, знал, что профилировщики есть - но не знал, как ими пользоваться.
По учёбе приходится программировать на ассемблере микроконтроллеры и на vhdl ПЛИС, но это немножко другая сфера :)

Да, тут профилировщики вряд ли помогут :) К тому же, у каждой фирмы вроде как свой инструментарий для работы со своим железом - по крайней мере, доводилось во время учебы столкнуться с таковым у Altera и Analog Devices.
anjolio 05.12.09 21:49 # +0
я с AVR и Xilinx сталкиваюсь - на практике получается, что удобнее всего работать с их ПО, но по идее можно и на всеплатформенном писать, например тот же ActiveHDL для ПЛИС
Yadovit 05.12.09 19:29 # +0
А если вы не программист, тогда зачем вам? :)
anjolio 05.12.09 20:16 # +1
Ну я периодически пишу маленькие программки для учёбы работы, например, по обработке текста (awk, или, если текст сложный, то уже python), на С пробую писать из спортивного интереса.
По учёбе приходится программировать на ассемблере микроконтроллеры и на vhdl ПЛИС, но это немножко другая сфера :)

То есть в целом программирование мне интересно и хочется развиваться в этой области для себя, но занимаюсь этим больше в свободное время.
anjolio 05.12.09 20:17 # +1
Да, пишите лучше не комментарий к посту, а ответ к комментарию, чтобы людям, которым вы отвечаете напоминалки приходили.
Yadovit 05.12.09 20:32 # +0
У меня похожий случай, но всегда сомневался, что руки дойдут до профилировщиков. Хотя давно хочется посмотреть на них.
Спасибо за поправку, проглядел.
necrotigr 05.12.09 21:45 # +0
Лишний инструмент в арсенале никогда не помешает :)
urykhy 05.12.09 22:04 # +2
oprofile очень неплох, хотя он тщательно выбирает с кем дружить ))

можно попробовать такой скрипт(от рута), программу запускать от пользовател:

opcontrol --reseе
opcontrol --no-vmlinux
opcontrol --event=CPU_CLK_UNHALTED:10000:0:1:1 --separate=library
opcontrol --start-daemon
opcontrol --start
echo "run tasks, press enter then done"
read
opcontrol --stop
opcontrol --shutdown

теперь можно посмотреть результаты:

opreport -t 4 --long-filenames
opreport -t 0.5 -l

ps: имена событий (CPU_CLK_UNHALTED) и флаги зависят от CPU.

главный плюс - можно смотреть статистику например промахов L2 кеша, ошибки предсказания перехода и другие полезные метрики. при изучении может быть полезно смотреть в букварь vtune ( http://www.sesp.cse.clrc.ac.uk/html/SoftwareTools/vtune/users_guide/mergedProjects/analyzer_ec/mergedProjects/reference_olh/pmm/ratios/ ). Исследование gcc с помощью oprofile - https://www.labs.redhat.com/support/wpapers/redhat/OProfile/oprofile.pdf

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

ps: в обзор можно добавить vtune - но он платный, да и преимуществ особых не заметил (любителям накручивать километры мышью он понравится :)))
l1feh4ck3r 06.12.09 03:26 # +0
Годная статья. Спасибо.
m0nhawk 06.12.09 22:55 # +0
Спасибо, несколько новых для себя открыл.
digiwhite 22.01.10 00:49 # +0
Отличненько расписано, спасибо!

05.12.09 17:39

necrotigrПрофилировщики для С/С++

Как я и обещал в комментарии к посту о тематической неделе программирования в Линукс, выкладываю небольшое сравнение профилировщиков для С/С++. Недавно по работе как раз понадобилось посмотреть скорость выполнения нескольких функций в одной программе, поэтому и решил выбрать себе какой-нибудь инструмент, чтоб и в будущем пригодился.
Этой мой первый пост на welinux, поэтому не судите строго :) Конструктивная нефанатичная критика, замечания и дополнения приветствуются :)


gprof

Самый распространенный, наверное, профилировщик для *nix-систем. В Арче входит в пакет binutils.

Использование:
Чтобы воспользоваться gprof, нужно скомпилировать программу с ключом -pg, например:
gcc -pg -o profile_test profile_test.c

После этого запускаем программу как обычно, после отработки программы остаётся файл gmon.out
Запускаем профилировщик:
gprof profile_test gmon.out

Он выдаст много-много букаф, поэтому советую сразу поставить на gprof алиас c ключом --brief, который удалит всяческие подробные пояснения. Останутся только 3 части:
- flat profile: сколько времени (в миллисекундах и в процентах от общего времени выполнения программы) было потрачено на выполнение каждой функции. Обратите внимание, что время здесь - процессорное, а не реальное, т.е. выполнение sleep(1000) фактические приравнивается к нулю :)
- call graph - сколько раз вызывалась функция и откуда именно (из какой функции). Штука очень полезная, но в табличном исполнении gprof совершенно непонятная.
- index by function name - соответствие имен функций их индексам для отображения в таблицах.

С помощью статистики от gprof легко можно заметить только явные отклонения: какая-нибудь функция вдруг выполняется раз в 1000 раз медленнее, чем остальные. Это неплохо, конечно, но по сравнению с другими утилитами - мало. И не дай Бог вам прогнать gprof'ом какую-нибудь программу на С++ c использованием STL - статистика будет совершенно нечитабельной, без последующей обработки cut'ом, sed'ом, perl'ом - не разберёшься.

callgrind

Эта утилита - часть известного инструмента valgrind, также довольно распространенного в никсах.

Использование:
Особых флагов компиляции не требует - запускать можно сразу.
valgrind --tool=callgrind profile_test

Тоже советую сразу добавить алиас. Кстати говоря, для своей работы valgrind требует подмонтированной procfs, в Линуксе обычно она монтируется по умолчанию, во FreeBSD (по крайней мере, 5.3, под которой я его запускал - нет).
После отработки программы callgrind оставит файл callgrind.out.pid_запущенного_процесса. Анализировать этот файл можно двумя путями:
- в консоли с помощью callgrind_annotate
- через GUI с помощью KCacheGrind

Путь первый:
callgrind_annotate callgrind.out.<pid>

Без параметров эта утилита выдаст только список наиболее используемых в программе функций (в том числе системных) с указанием библиотек, что не очень информативно. Путём экспериментов выявил вот такой набор флагов:
callgrind_annotate --auto=yes --context=3  --inclusive=no --tree=caller


Сперва идёт тот же самый список всех функций, только более подробный, затем - annotated source, где можно посмотреть, сколько раз выполнялась каждая строчка кода, а также какие функции эта строчка неявно вызывала.

Путь второй:
Открыть файл callgrind.out.pid с помощью KCacheGrind. И тут открывается куча возможностей для нефанатично настроенных против KDE пользователей :)
- с помощью комбобокса группировки можно посмотреть как статистику вызовов по всем без исключения функциям, так и только по пользовательским.
- время на выполнение каждой функции в процентах от выполнения всей программы (callgrind_annotate почему-то этой фичи не предоставляет )
- просмотр ассемблерного кода функций - если callgrind был запущен с параметром --dump-instr=yes
- исходник с построчным указанием числа выполнений каждой функции
- и, самая главная фича - красивый и наглядный график вызовов фунций

Кроме того, KCacheGrind нормально работает с C++-ными именами функций, по крайней мере, они вполне читабельно выглядят в графике вызовов.
=Скриншот.

oprofile

Честно говоря, не совсем понял назначения этой утилиты, а точнее - целого пакета утилит. Похоже, что его можно использовать для отладки различных функций ядра, но зачем мне это нужно - я не понял...
Использование:
Чтобы воспользоваться возможностями oprofile нужно запустить демона oprofiled от рута.
opcontrol --start --no-vmlinux

(последняя опция - т.к. у меня нет обычного образа ядра, только сжатое vmlinuz. Впрочем, на всех дистрибутивах сейчас именно сжатое ядро, насколько я знаю)
Это большой минус - дома-то ещё можно себе позволить, а вот на работе могут быть проблемы, связанные с корпоративной политикой безопасности. Проще говоря, без рутовского пароля ничего не отпрофилируешь.
Запустив демон, можно использовать утилиты opreport, opannotate и прочие, чтобы получить такие вот отчеты. Однако получить мне их так и не удалось, все программы ругались то на отстутствие прав, то на не найденную session dir. Я расстроился и дальше разбираться не стал - и так, на мой взгляд, не очень удобная в использовании штука.

google-perftools

Профилировщик, которым пользуются в Гугле. В принципе, это его главное достоинство, по остальным параметрами примерно аналогичен callgrind'у.

Использование:
Программа должна быть собрана с библиотекой libprofiler:
gcc -o profile_test profile_test.c -lprofiler

Можно также выделит код для профилирования функциями ProfilerStart() и ProfilerStop() (в Callgrind есть такие опции, но тут, имхо, проще)
И запускаем программу
env CPUPROFILE=/tmp/profile_test.prof ./profile_test
После отработки программы анализируем файл, указанный в CPUPROFILE с помощью утилиты pprof:
pprof ./profile_test /tmp/profile_test.prof

Утилита неплохая, может выдавать результат в различных форматах, в том числе и в формате callgrind. В общем - тот же callgrind с более удобным интерфейсом и большим числом форматов отчёта.

Резюме: лучшим из рассмотренных профилировщиков я считаю связку callgrind + KCacheGrind, преимуществами которой являются:
- детальная статистика
- читабельная статистика по С++
- наглядное представление отчетов
- распространенность


Посты Комментарии
Последние посты
    Посты Комментарии
    Последние комментарии
      Посты Комментарии
      Изменения
        Посты Комментарии Изменения Черновики Избранное
        Черновики (все)
          Посты Комментарии Изменения Черновики Избранное
          Избранное (всё)
            Посты Комментарии Изменения Черновики Избранное
            Лучшие блоги (все 94)
            Топ пользователей Топ блогов
            Топ пользователей Топ блогов
            Элита (все 1940 из 149 городов)
            Топ пользователей Топ блогов
            welinux.ru

            Смотреть видео онлайн

            Онлайн видео бесплатно


            Смотреть русское с разговорами видео

            Online video HD

            Видео скачать на телефон

            Русские фильмы бесплатно

            Full HD video online

            Смотреть видео онлайн

            Смотреть HD видео бесплатно

            School смотреть онлайн