Как получить vars с perf на ядре Linux?

Я хотел бы использовать --vars средство perf описано на https://www.systutorials.com/docs/linux/man/1-perf-probe/:

 -V, --vars=

    Show available local variables at given probe point. The 
    argument syntax is same as PROBE SYNTAX, but NO ARGs. 

По этой ссылке: https://www.systutorials.com/linux-kernels/31208/perf-probe-fix-to-search-local-variables-in-appropriate-scope-linux-3-1/ является единственным примером Я когда-либо нашел, как использовать perf--vars опция:

Этот патч исправляет эту проблему путем поиска переменных в локальной области действия экземпляра встроенной функции. Вот результат.

$ perf probe -V pre_schedule
Available variables at pre_schedule
        @<schedule+445>
                struct rq*      rq
                struct task_struct*     prev

Итак, я попробую это на Raspbian 9, но просто не могу заставить его работать. Начать с pre_schedule не в моем /proc/kallsymsтак что я буду lruvec_init как функция вместо этого:

pi@raspberrypi:~ $ grep pre_schedule /proc/kallsyms 
pi@raspberrypi:~ $ 
pi@raspberrypi:~ $ grep lruvec_init /proc/kallsyms 
80243a78 T lruvec_init
pi@raspberrypi:~ $ /home/pi/linux/tools/perf/perf --version
perf version 4.14.37
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.14.37-v7+ #5 SMP Wed May 9 21:53:59 CEST 2018 armv7l GNU/Linux

По сути, я могу использовать --line с этим символом, но не --vars:

pi@raspberrypi:~ $ sudo /home/pi/linux/tools/perf/perf probe -k ~/linux/vmlinux -s /home/pi/linux --line lruvec_init
</home/pi/linux/mm/mmzone.c:90>
     90  {
                enum lru_list lru;

     93         memset(lruvec, 0, sizeof(struct lruvec));

     95         for_each_lru(lru)
                        INIT_LIST_HEAD(&lruvec->lists[lru]);
     97  }

         #if defined(CONFIG_NUMA_BALANCING) && !defined(LAST_CPUPID_NOT_IN_PAGE_FLAGS)
         int page_cpupid_xchg_last(struct page *page, int cpupid)

pi@raspberrypi:~ $ sudo /home/pi/linux/tools/perf/perf probe -k ~/linux/vmlinux -s /home/pi/linux --vars lruvec_init
Failed to find scope of probe point.
Failed to find the address of lruvec_init
  Error: Failed to show vars.

(Если я использую оба --list а также --vars тогда я могу заставить perf чтобы вывести сообщение справки, иначе вызов справки хочет вызвать страницы man, которые не установлены для меня, как я построил perf из источника:

pi@raspberrypi:~ $ /home/pi/linux/tools/perf/perf help list
No manual entry for perf-list
pi@raspberrypi:~ $ sudo /home/pi/linux/tools/perf/perf probe -k ~/linux/vmlinux -s /home/pi/linux --line lruvec_init --vars
 Error: option `vars' cannot be used with line
 Usage: perf probe [<options>] 'PROBEDEF' ['PROBEDEF' ...]
    or: perf probe [<options>] --add 'PROBEDEF' [--add 'PROBEDEF' ...]
    or: perf probe [<options>] --del '[GROUP:]EVENT' ...
    or: perf probe --list [GROUP:]EVENT ...
    or: perf probe [<options>] --line 'LINEDESC'
    or: perf probe [<options>] --vars 'PROBEPOINT'
    or: perf probe [<options>] --funcs

    -V, --vars <FUNC[@SRC][+OFF|%return|:RL|;PT]|SRC:AL|SRC;PT>
                          Show accessible variables on PROBEDEF
    -L, --line <FUNC[:RLN[+NUM|-RLN2]]|SRC:ALN[+NUM|-ALN2]>
                          Show source code lines.

)

Итак, как я могу использовать --vars вариант perf?

РЕДАКТИРОВАТЬ: также это не удается:

pi@raspberrypi:~ $ sudo /home/pi/linux/tools/perf/perf probe -k ~/linux/vmlinux -s /home/pi/linux --vars lruvec_init@/home/pi/linux/mm/mmzone.c:93
Debuginfo analysis failed.
  Error: Failed to show vars.

pi@raspberrypi:~ $ sudo /home/pi/linux/tools/perf/perf probe -k ~/linux/vmlinux -s /home/pi/linux --vars lruvec_init@mm/mmzone.c:93
Debuginfo analysis failed.
  Error: Failed to show vars.

0 ответов

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