Профилирование процесса (, возможно связанного с вводом/выводом -), для уменьшения задержки

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

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

Требования:

  1. Поскольку я ожидаю, что большая часть задержки будет связана с вводом-выводом, примите во внимание время, затраченное на ожидание/блокировку (, другими словами :смотрите на время настенных часов, а не на процессорное время)
  2. Поскольку программа делает гораздо больше, чем фрагмент, который я пытаюсь оптимизировать. Должен быть способ либо запускать/останавливать профилирование программно, либо фильтровать вывод, чтобы показывать только время между входом и выходом из функции, которую я оптимизирую.
  3. Профилирование на уровне метода допустимо (, если его можно выполнить на уровне инструкций, даже лучше. если он только профилирует системные вызовы,этого, вероятно, недостаточно)
  4. Это для хобби, поэтому дорогие инструменты не вариант
  5. Приборы (-плавники -функции )приемлемы
  6. Критический фрагмент кода, который меня интересует, трудно прервать вручную (, потому что он уже относительно быстр и его трудно реалистично вызвать в цикле ), поэтому необходима какая-то автоматизация.

Инструменты, выброшенные на данный момент:

  • 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 -)
  • вставка точек трассировки вручную (например. с надписью)

Я хотел бы услышать о:

  • другие варианты
  • возможно, я слишком рано выбросил какой-то инструмент?
  • имеют ли шансы сработать варианты, которые я еще не оценил, и если да, то как это лучше всего сделать.

В конце концов я остановился на:

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

10
задан Arnout Engelen 22 August 2012 в 20:49
поделиться