Скрипт для отображения всех функций ядра, выполняемых с использованием ftrace - PullRequest
0 голосов
/ 17 января 2019

Я написал скрипт, который будет отслеживать все команды ядра, выполняемые определенной командой, используя :

#!/bin/bash
# Mount the tracefs
mount -t tracefs nodev /sys/kernel/tracing
# Disable tracing
echo "0" > /sys/kernel/tracing/tracing_on
# set the current tracer to nop
echo "nop" > /sys/kernel/tracing/current_tracer
# set the current shell PID as a filter
echo $$ > /sys/kernel/tracing/set_ftrace_pid
# set the current tracer to function_graph
echo "function_graph" > /sys/kernel/tracing/current_tracer
# Enable tracing
echo "1" > /sys/kernel/tracing/tracing_on
# Execute the command
ls
# Disable tracing
echo "0" > /sys/kernel/tracing/tracing_on
# Cat the trace file into temporary file
cat /sys/kernel/tracing/trace > /tmp/mycommand_trace

Я получаю только несколько записей, когда запускаю этот скрипт с использованием function_graph tracer, тогда как множество записей с function tracer.

С function трассер:

$ cat /tmp/mycommand_trace | head -n 20
# tracer: function
#
#                              _-----=> irqs-off
#                             / _----=> need-resched
#                            | / _---=> hardirq/softirq
#                            || / _--=> preempt-depth
#                            ||| /     delay
#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
#              | |       |   ||||       |         |
 kernel_function-31784 [003] ....  5769.020705: mutex_unlock <-rb_simple_write
 kernel_function-31784 [003] ....  5769.020706: __fsnotify_parent <-vfs_write
 kernel_function-31784 [003] ....  5769.020706: fsnotify <-vfs_write
 kernel_function-31784 [003] ....  5769.020707: __sb_end_write <-vfs_write
 kernel_function-31784 [003] d...  5769.020730: do_syscall_64 <-entry_SYSCALL_64_after_hwframe
 kernel_function-31784 [003] ....  5769.020730: __x64_sys_dup2 <-do_syscall_64
 kernel_function-31784 [003] ....  5769.020730: ksys_dup3 <-__x64_sys_dup2
 kernel_function-31784 [003] ....  5769.020730: _raw_spin_lock <-ksys_dup3
 kernel_function-31784 [003] ....  5769.020731: expand_files <-ksys_dup3
 kernel_function-31784 [003] ....  5769.020731: do_dup2 <-__x64_sys_dup2
 kernel_function-31784 [003] ....  5769.020732: filp_close <-do_dup2

С function_graph трассер:

$ cat /tmp/mycommand_trace 
# tracer: function_graph
#
# CPU  DURATION                  FUNCTION CALLS
# |     |   |                     |   |   |   |
  3) # 1485.764 us |          } /* schedule */
  3) # 1494.689 us |        } /* do_wait */
  3) # 1495.325 us |      } /* kernel_wait4 */
  3) # 1495.565 us |    } /* __x64_sys_wait4 */
  3) # 1495.848 us |  } /* do_syscall_64 */

Но, насколько мне известно, ftrace , function_graph трассировщик должен отслеживать как выход, так и вход вызова функции ядра, но я не могу увидеть его в приведенном выше выводе .

Есть ли проблема в моем скрипте?

...