Как интерпретировать графики Kcachegrind?

Я начал использовать Kcachegrind для анализа производительности. Но я не понимаю GUI и выходные графики.

Например, для этого графа вызовов

введите описание изображения здесьSignatureIterator::iterate_parameters() Я не понимаю, на что ссылаются 9,25%? 5 198x означает, сколько раз SignatureIterator::iterate_parameters() называется SignatureIterator::parse_type()? Что означает 100% в Symbol::byte_at(int) const? Что такое ELF Object?

Примечание: в официальной документации http://kcachegrind.sourceforge.net/html/CallGraph.html, но до сих пор не понимаю, что такое the caller distance to the function?

1 ответ

Решение

Все визуализации в KCachegrind сосредоточены вокруг текущей выбранной функции, которая Symbol::byte_at() Вот. Обычно, процентное значение выбранной функции отображается по отношению к общей стоимости (время выполнения / циклы, что когда-либо). Однако, если вы включите кнопку режима / инструмента "Относительно родителя", процентные числа на графике вызовов будут "увеличены", чтобы показать 100% для выбранной функции, чтобы упростить просмотр соотношений затрат, потраченных на другие функции. относительно выбранного.

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

Проценты на графиках вызовов всегда показывают время, затраченное на какую-то данную функцию, в то время как выбранная функция (Symbol::byte_at) была активна, т.е. время, когда обе функции могут быть найдены в стеке вызовов во время выполнения программы. Это работает как в направлении вызываемого абонента (вниз Symbol::byte_at()) и направление звонящего (вверх Symbol::byte_at()).

Вниз это легче понять: пока Symbol::byte_at() был активен, 24,14% того времени процессор фактически выполнял код из Symbol::base(), В другое время (100% - 24,14%), код из Symbol::byte_at() сам бежал.

Вверх от выбранной функции, это может быть немного сложнее. Например, 9,25% для SignatureIterator::iterate_parameters() означает, что во время Symbol::byte_at() был активен, 9,25% того времени его косвенно вызывали из SignatureIterator::iterate_parameters(), Так же, Symbol::byte_at() был вызван 11,27% времени, когда он работал прямо из SignatureIterator::parse_type(), То есть, в процентах от выбранной функции проценты в прямых родителях функции всегда складываются с точным процентом этой функции, если только функция не была исключена из визуализации из-за того, что она ниже порога видимости (см. Контекстное меню).

Другие вопросы по тегам