Время Linux основанный на образце профилировщик

короткая версия:

Существует ли хороший основанный на времени профилировщик выборки для Linux?

долгая версия:

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

Проблемой был жесткий цикл, порождая C++ filt к demangle имя C++. Я только наткнулся на код случайно при упорно искании другого узкого места. OProfile не показал ничего необычного о коде, таким образом, я почти проигнорировал его, но мой смысл кода сказал мне оптимизировать вызов и видеть то, что произошло. Я изменился popen из C++ filt к abi::__cxa_demangle. Время выполнения пошло с больше чем минуты немногим более, чем до секунды. О x60 убыстряются.

Есть ли способ, которым я, возможно, настроил OProfile для установки флага popen звонить? Поскольку данные профиля находятся теперь, OProfile думает, что горлышко бутылки было "кучей" и std::string вызовы (к которому BTW, однажды оптимизированный, отбросил время выполнения меньше, чем секунда, больше, чем x2, убыстряются).

Вот моя конфигурация OProfile:

$ sudo opcontrol --status
Daemon not running
Event 0: CPU_CLK_UNHALTED:90000:0:1:1
Separate options: library
vmlinux file: none
Image filter: /path/to/executable
Call-graph depth: 7
Buffer size: 65536

Есть ли другой профилировщик для Linux, который, возможно, нашел узкое место?

Я подозреваю, что проблема - то, что OProfile только регистрирует свои образцы к в настоящее время рабочему процессу. Я хотел бы, чтобы это всегда зарегистрировало свои образцы к процессу, я являюсь профильным. Таким образом, если процесс в настоящее время выключается (блокирующийся на IO или a popen звоните), OProfile просто поместил бы свой образец при заблокированном вызове.

Если я не могу зафиксировать это, OProfile только будет полезен, когда исполняемый файл продвинет близкие 100% ЦП. Это не может помочь с исполняемыми файлами, которые имеют неэффективные вызовы блокирования.

12
задан ks1322 2 April 2017 в 14:28
поделиться

2 ответа

Рад, что вы спросили. Я считаю, что OProfile можно заставить делать то, что я считаю правильным, а именно брать образцы стека по времени настенных часов , когда программа работает медленно , и, если это не позволяет вам исследовать отдельный стек образцы, по крайней мере, суммируйте для каждой строки кода, которая появляется в образцах, процент образцов, на которых появляется строка. Это прямая мера того, что было бы сохранено, если бы этой строки не было. Вот одно обсуждение. Вот еще один, и еще один . И, как сказал Пол, Zoom должен это сделать.

Если ваше время увеличилось с 60 до 1 секунды, это означает, что каждая отдельная выборка стека имела бы 59/60 вероятность показать вам проблему.

6
ответ дан 2 December 2019 в 21:23
поделиться

Попробуйте Zoom - я считаю, что это позволит вам профилировать все процессы - было бы интересно узнать, выделяет ли он вашу проблему в этом случае.

3
ответ дан 2 December 2019 в 21:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: