Я хочу улучшить производительность определенного метода внутри более крупного приложения.
Цель состоит в уменьшении задержки (настенных -часов, затрачиваемой на выполнение определенной функции ), а не (обязательной )нагрузки на систему.
Требования:
- Поскольку я ожидаю, что большая часть задержки будет связана с вводом-выводом, примите во внимание время, затраченное на ожидание/блокировку (, другими словами :смотрите на время настенных часов, а не на процессорное время)
- Поскольку программа делает гораздо больше, чем фрагмент, который я пытаюсь оптимизировать. Должен быть способ либо запускать/останавливать профилирование программно, либо фильтровать вывод, чтобы показывать только время между входом и выходом из функции, которую я оптимизирую.
- Профилирование на уровне метода допустимо (, если его можно выполнить на уровне инструкций, даже лучше. если он только профилирует системные вызовы,этого, вероятно, недостаточно)
- Это для хобби, поэтому дорогие инструменты не вариант
- Приборы (-плавники -функции )приемлемы
- Критический фрагмент кода, который меня интересует, трудно прервать вручную (, потому что он уже относительно быстр и его трудно реалистично вызвать в цикле ), поэтому необходима какая-то автоматизация.
Инструменты, выброшенные на данный момент:
- gprof, oprofile, callgrind (требование 1)
- создание чего-то нестандартного с помощью getrusage (требование 1)
- www.badmansprofiler.org (требование 2)
- трассировка -T,dтрассировка,http://perf.wiki.kernel.org(требования 2 и 3)
- VTune, Zoom (требование 4)
- ручной вызов -выборка стека (требование 6)
- google -perftools (должен иметь возможность измерять время стены, но в моем случае это не работает, предположительно из-за помех SIGALRM.
- systemtap (мое ядро не исправлено для включения utrace)
Другие варианты, которые я еще не оценивал:
- cprof (здесь не строит -из -ящик -, кажется, только i386 -)
- вставка точек трассировки вручную (например. с надписью)
Я хотел бы услышать о:
- другие варианты
- возможно, я слишком рано выбросил какой-то инструмент?
- имеют ли шансы сработать варианты, которые я еще не оценил, и если да, то как это лучше всего сделать.
В конце концов я остановился на:
След, созданный этим грубым инструментом, трудно интерпретировать, и я могу легко представить, что некоторые инструменты для дальнейшей обработки его вывода делают его бесконечно более полезным. Однако на данный момент это помогло мне, поэтому я отложил этот проект на потом; ).
задан Arnout Engelen 22 August 2012 в 20:49
поделиться