Мне очень нравится идея профилирования Flame Graph, так как это поможет устранить ненужные вызовы функций. Однако есть уловка в том, что он требует, чтобы профилировщик выполнял полный сброс стека каждый раз, когда он собирал образец. Это можно сделать с помощью DTrace или SystemTap довольно легко, но мне нужно сделать это на устройстве ARM, работающем на ubuntu (что исключает DTrace). Я также хотел бы сделать это без перекомпиляции ядра (что исключает SystemTap).Как получить полный сброс стека из профилировщика в каждом примере для использования в графе пламени?
Можно ли получить Valgrind/Callgrind или OProfile (или какой-либо другой инструмент профилирования, который может работать на ARM устройства в Ubuntu), чтобы что-то подобное:
dtrace -n 'profile-1001 /pid == 12345 && arg1/ { @[ustack()] = count(); }
Возможности: * [pstack] (http://linuxcommand.org/man_pages/pstack1.html) * или профилировщик * [бедняк ] (http://poormansprofiler.org/) *, который использует gdb для получения следов стека. –
pstack выглядит многообещающе, мне хотелось бы что-то более автоматизированное, чем профилировщик бедных. – Leo
Проверьте наличие */proc//stack *. Это даст стек ядра для процесса. Что-то другое, но, возможно, полезно. Решение 'gdb' будет отслеживать только пространство пользователя *. То есть вы можете видеть, где ядро тратит время от имени вашего процесса. Вероятно, вы должны удалить тег * dtrace * и добавить * linux *. –