Для этого мне хотелось бы знать, сколько времени занимает каждый вызов функции. Из этой статьи я понял, что трассировка function_graph должна достичь моей цели.
При непосредственном использовании sysfs синтаксис из документации работает:
Код: Выделить всё
cd /sys/kernel/tracing
echo '*:mod:my_mod' > set_ftrace_filter
cat tracing_on
echo function_graph > current_tracer
echo 1 > tracing_on
# some command that triggers my kernel driver
echo 0 > tracing_on
cat trace > /tmp/my_mod.trace
Код: Выделить всё
my_mod.traceНо выходные данные из буфера /sys/kernel/tracing/trace не являются файлом трассировки.dat. С ним труднее работать, так как его невозможно прочитать с помощью KernelShark или отчета трассировки-cmd.
Вопрос
Как я могу отслеживать вызовы функций моего модуля с выводом, который легко анализировать?Под «простым» подразумевается инструмент для формата, который позволяет фильтровать, отображать или агрегировать данные, аналогично упомянутым инструментам. выше.
Что я пробовал
Следующие команды приводили к различным ошибкам:Код: Выделить всё
# trace-cmd record -f '*:mod:my_mod' -p function_graph cat /dev/my_mod
filter must come after event
# trace-cmd record -e '*:mod:my_mod' -p function_graph cat /dev/my_mod
trace-cmd: No such file or directory
No events enabled with *:mod:my_mod
# trace-cmd record -e sched -p function_graph -f '*mod:my_mod' cat /dev/my_mod
[13187.458282] event filter parse error: error: Error
Command: (*mod:my_mod)
^
Failed filter of /sys/kernel/tracing/events/sched/sched_switch/filter
[13187.473989] event filter parse error: error: Error
Command: (*mod:my_mod)
Код: Выделить всё
# trace-cmd record -e irq -p function_graph -f '*:mod:my_mod' cat /dev/my_mod
Подробнее здесь: https://stackoverflow.com/questions/798 ... -trace-cmd
Мобильная версия