trace_init()

trace_init()

kernel/trace/trace.c

void __init trace_init(void)
{
        if (tracepoint_printk) {
                tracepoint_print_iter =
                        kmalloc(sizeof(*tracepoint_print_iter), GFP_KERNEL);
                if (WARN_ON(!tracepoint_print_iter))
                        tracepoint_printk = 0;
        }
        tracer_alloc_buffers();
        trace_event_init();
}

CONFIG_TRACING 커널 옵션이 설정된 경우에 빌드되어 동작되며 트레이스용 버퍼 및 이벤트를 초기화한다.

  • 성능상의 이유로 production 커널을 빌드시에는 이 옵션을 사용하면 안된다.

 

  • if (tracepoint_printk) {
    • “tp_printk=on” 등의 커널 파라메터가 동작된 경우
  • tracepoint_print_iter = kmalloc(sizeof(*tracepoint_print_iter), GFP_KERNEL);
    • trace_iterator 구조체 공간을 할당받는다.
  • tracer_alloc_buffers();
    • trace용 per-cpu 버퍼를 할당받고 초기화한다.
      • (생략)
  • trace_event_init();
    • CONFIG_EVENT_TRACING 커널 옵션을 사용하는 경우 이벤트 트레이스를 위해 초기화한다.
      • (생략)

 

“tp_printk=” 커널 파라메터

static int __init set_tracepoint_printk(char *str)
{
        if ((strcmp(str, "=0") != 0 && strcmp(str, "=off") != 0))
                tracepoint_printk = 1;
        return 1;
}
__setup("tp_printk", set_tracepoint_printk);

“tp_printk=0” 및 “tp_printk=off”가 아닌 경우 전역 tracepoint_printk를 1로 설정하여 trace 출력이 가능하게한다.

댓글 남기기