Как получить 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.