ftrace 설정

echo 0 > /sys/kernel/debug/tracing/tracing_on
sleep 1
echo "tracing_off"

echo 0 > /sys/kernel/debug/tracing/events/enable
sleep 1
echo "events disabled"

echo  do_init_module  > /sys/kernel/debug/tracing/set_ftrace_filter
sleep 1
echo "set_ftrace_filter init"

echo function > /sys/kernel/debug/tracing/current_tracer
sleep 1
echo "function tracer enabled"

echo dwc_otg_common_irq  > /sys/kernel/debug/tracing/set_ftrace_filter
sleep 1
echo "set_ftrace_filter enabled"

echo 1 > /sys/kernel/debug/tracing/events/irq/irq_handler_entry/enable
echo 1 > /sys/kernel/debug/tracing/events/irq/irq_handler_exit/enable
echo "event enabled"

echo 1 > /sys/kernel/debug/tracing/options/func_stack_trace
echo 1 > /sys/kernel/debug/tracing/options/stacktrace
echo "function stack trace enabled"

echo 1 > /sys/kernel/debug/tracing/tracing_on
echo "tracing_on"

코드분석

<idle>-0       [003] d.h1.  6060.470867: irq_handler_entry: irq=2 name=IPI
          <idle>-0       [003] d.h1.  6060.470869: <stack trace>
 => __traceiter_irq_handler_entry
 => handle_percpu_devid_irq
 => generic_handle_domain_irq
 => gic_handle_irq
 => call_on_irq_stack
 => do_interrupt_handler
 => el1_interrupt
 => el1h_64_irq_handler
 => el1h_64_irq
 => arch_cpu_idle
 => default_idle_call
 => do_idle
 => cpu_startup_entry
 => secondary_start_kernel
 => __secondary_switched

name : IPI

시간 : 6060.470869

IPI가 무엇인지 궁금해서 찾아보았다.

IPI : Inter-Processor Interrupt

른 프로세서 또는 코어로부터 발생하는 인터럽트입니다. 이는 다중 프로세서 시스템에서 프로세서 간 통신 및 동기화를 위해 사용

=> arch_cpu_idle
=> default_idle_call
=> do_idle
=> cpu_startup_entry
=> secondary_start_kernel
=> __secondary_switched

이 부분은 프로세스 컨텍스트.

cat /proc/interrupts 명령어 입력시

cat-2659    [000] ..... 11116.926854: sched_process_exec: filename=/usr/bin/cat pid=2659 old_pid=2659
             cat-2659    [000] ..... 11116.926858: <stack trace>
 => __traceiter_sched_process_exec
 => bprm_execve
 => do_execveat_common.isra.50
 => __arm64_sys_execve
 => invoke_syscall
 => el0_svc_common.constprop.3
 => do_el0_svc
 => el0_svc
 => el0t_64_sync_handler
 => el0t_64_sync
             cat-2659    [000] ..... 11116.928901: show_interrupts <-seq_read_iter
             cat-2659    [000] ..... 11116.928906: <stack trace>
 => show_interrupts
 => seq_read_iter
 => proc_reg_read_iter
 => vfs_read
 => ksys_read
 => __arm64_sys_read
 => invoke_syscall
 => el0_svc_common.constprop.3
 => do_el0_svc
 => el0_svc
 => el0t_64_sync_handler
 => el0t_64_sync

filename = /usr/bin/cat : pid가 2659인 cat 프로세스는 /bin/cat

이후 cat-2659에서 show_interrupts 발생 =⇒ cat/proc/interrups 명령어를 입력하면 호출되는 함수

0개의 댓글