부팅 시간이 느려짐
아예 부팅을 못함 (모든 event를 활성화)
자주 트레이싱되는 이벤트 메시지는 overwritten됨
부팅 초반에 출력되는 메시지를 볼 수 없음
최적화된 필터 설정 필요
cat /sys/kernel/debug/tracing/available_events // ftrace와 관련된 속성정보는 tracing 디렉토리의 하부에 존재 , available : ftrace에서 트레이싱 가능한 이벤트 목록 확인
vc4:vc4_wait_for_seqno_begin // 이벤트들
vc4:vc4_wait_for_seqno_end
vc4:vc4_submit_cl_ioctl
...
irq:irq_handler_exit // irq *를 하게되면 해당 이벤트가 모두 활성화된다
irq:irq_handler_entry
...
sched:sched_switch
sched:sched_wakeup_new
sched:sched_wakeup
ls /sys/kernel/debug/tracing/options/ => 아래의 정보를 트레이스 옵션에 지정 가능
annotate display-graph funcgraph-proc hex raw test_nop_accept
bin event-fork funcgraph-tail irq-info record-cmd test_nop_refuse
blk_cgname funcgraph-abstime func-no-repeats latency-format record-tgid trace_printk
blk_cgroup funcgraph-cpu func_stack_trace markers sleep-time userstacktrace
blk_classic funcgraph-duration function-fork overwrite stacktrace verbose
block funcgraph-irqs function-trace pause-on-trace sym-addr
context-info funcgraph-overhead graph-time printk-msg-only sym-offset
disable_on_free funcgraph-overrun hash-ptr print-parent sym-userobj
trace_buf_size=2M trace_event=kmem:mm_page_alloc trace_options=stacktrace,symaddr,sym-offset ftrace=function ftrace_filter=rpi_firmware_init
==> 버퍼사이즈 , 이벤트 , 트레이스 옵션 , ftrace = function trace , 필터함수
trace_buf_size=2M trace_event=printk:console
=> init call 카테고리를 모두 활성화하겠다.
https://elixir.bootlin.com/linux/v5.15.30/source/kernel/trace/trace.c
static int __init set_cmdline_ftrace(char *str)
{
strlcpy(bootup_tracer_buf, str, MAX_TRACER_SIZE);
default_bootup_tracer = bootup_tracer_buf;
/* We are using ftrace early, expand it */
ring_buffer_expanded = true;
return 1;
}
__setup("ftrace=", set_cmdline_ftrace);
https://elixir.bootlin.com/linux/v5.15.30/source/kernel/trace/trace.c
static int __init set_buf_size(char *str)
{
...
buf_size = memparse(str, &str);
/*
* nr_entries can not be zero and the startup
* tests require some buffer space. Therefore
* ensure we have at least 4096 bytes of buffer.
*/
trace_buf_size = max(4096UL, buf_size);
return 1;
}
__setup("trace_buf_size=", set_buf_size);
https://elixir.bootlin.com/linux/v5.15.30/source/kernel/trace/trace.c
static int __init set_trace_boot_options(char *str)
{
strlcpy(trace_boot_options_buf, str, MAX_TRACER_SIZE);
return 1;
}
__setup("trace_options=", set_trace_boot_options);