LINUX.ORG.RU

Как отобразить вывод perf report на место в .so файле при отсутствии таблицы имён?


0

2

Собрал perf'ом данные по процессу:

perf record -g -p 7242
смотрю вывод
perf report
Events: 146K cycles                                                                                                                   
+     91,67%  operapluginwrap  libflashplayer.so                   [.] 0x86fd75
+      2,01%  operapluginwrap  libspeexdsp.so.1.5.0                [.] 0x976d
+      1,12%  operapluginwrap  [rtlwifi]                           [k] pci_read32_sync
+      0,80%  operapluginwrap  libasound.so.2.0.0                  [.] 0x639d7
+      0,29%  operapluginwrap  perf-7242.map                       [.] 0x7fa105be3e82
+      0,17%  operapluginwrap  libm-2.13.so                        [.] __floor
+      0,14%  operapluginwrap  libspeexdsp.so.1.5.0                [.] speex_resampler_process_int
+      0,12%  operapluginwrap  operapluginwrapper-native           [.] 0x26b62
Там, где символов нет, отображается шестнадцатиричное число. Как по нему найти точку в файле, которой он соответствует? Отсчитывать от начала файла или от начала .text? В обоих местах какая-то бредятина. Каждый раз при новом сборе семплов число меняется.

★★★★★

(wild guess) Может это адрес в адресном пространстве процесса? И ты можешь на этот адрес бряк в gdb повесит.

*подписался на обновления

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Может это адрес в адресном пространстве процесса?

вряд ли. По крайней мере, gdb там прочитать не может, не то что бряк поставить. perf ещё какие-то адреса показывает, если группу (+) раскрыть. Они уже на настоящие адреса похожи, и ложатся на начала инструкций.

Больше 90% времени флеш проводит в куске кода длиной около 350 байт.

i-rinat ★★★★★
() автор топика

Трудно ответит на такой туманный вопрос - только предложить вдумчивую работу с objdump. В качестве еще одной wild guess - это код, сгенерированный в рантайме.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Трудно ответит на такой туманный вопрос - только предложить вдумчивую работу с objdump.

Да не такой он уж и туманный. Задача состояла в поиске хотспота. Я думал, что то число, которое печатается вместо имени функции, как-то определяет адрес внутри модуля, но похоже это просто число.

По нажатию enter открывается список адресов. Посмотрел по этим адресам байты, а потом нашёл их в .so-шке.

В общем, задача решена.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от tensai_cirno

350 байт, обогревающих мой дом в студию. Что там хоть? :)

http://pastebin.com/0vKmqURJ Что-то вроде целочисленного смешивания двух буферов. По трём компонентам отдельно. Этот кусок начинает жрать большую часть времени cpu, когда переключаю в полный экран. Если закомментить последнюю строчку (с переходом назад), в полноэкранном режиме остаётся видно только левый столбец в один пиксель.

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

i-rinat ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.