# Kernel Debugging References - trace-cmd [TOC] ## References Basically try search *Steven Rostedt* on YouTube and watch his every talk. ### [Steven Rostedt - Learning the Linux Kernel with tracing](https://youtu.be/JRyrhsx-L5Y) {%youtube JRyrhsx-L5Y %} ### [Tracing Summit 2022 - State of the Linux Tracers (34:43)](https://youtu.be/Er8q8Vtp9eM?t=2083) {%youtube Er8q8Vtp9eM %} ### [Tracing VMs Seeing How Host and Guest Interact - Steven Rostedt, Google](https://youtu.be/v0ocveEsvNU) {%youtube v0ocveEsvNU %} ### [Kernel Recipes 2022 - Ftrace update](https://youtu.be/CLUVleQBm-w) {%youtube CLUVleQBm-w %} ### [Embedded Recipes 2022 - Tracing on embedded boards](https://youtu.be/7KHLoZKwlBk) {%youtube 7KHLoZKwlBk %} ### [Finding Sources of Latency on your Linux System - Steven Rostedt, VMware (18:50 ~ FIN)](https://youtu.be/Tkra8g0gXAU?t=1130) {%youtube Tkra8g0gXAU %} Note that `do_IRQ` has been replaced with [`common_interrupt`](https://elixir.bootlin.com/linux/latest/source/arch/x86/kernel/irq.c#L240) in x86_64 architecture. See this mailing list regarding [the change](https://lore.kernel.org/lkml/87fsgsee2n.fsf@meer.lwn.net/t/) made in documentation. Hook into `irq_handler_entry` could see its call stack. This equivalent would be: ``` $ trace-cmd record \ -p function_graph \ -g __common_interrupt \ -g '*_interrupt' \ -e irq_handler_entry ``` For 5.19 kernel, it go through the following code path: ``` __handle_irq_event_percpu+305 __handle_irq_event_percpu+305 handle_irq_event+57 handle_edge_irq+140 __common_interrupt+86 common_interrupt+68 asm_common_interrupt+39 ``` ## Cheat Sheet ### List tracepoints List tracepoints: ``` $ trace-cmd list -e ``` List tracepoint field: ``` trace-cmd list -F -e "syscalls:sys_enter_nanosleep" ``` List tracepoint format with, with format string: ``` trace-cmd list -F --full -e "syscalls:sys_enter_nanosleep" ``` Most tracepoints are from `/sys/kernel/tracing/available_events` ### List tracable functions List available filter function: ``` $ trace-cmd list -f ``` ### Trace function call stack ``` $ trace-cmd record -p function --func-stack -l "__common_interrupt" ``` ### Trace function execution ``` $ trace-cmd record -p function_graph -g "__common_interrupt" ```