1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of reset-trace, for Linux bcc/BPF. 2*387f9dfdSAndroid Build Coastguard Worker 3*387f9dfdSAndroid Build Coastguard Worker 4*387f9dfdSAndroid Build Coastguard WorkerYou will probably never need this tool. If you kill -9 a bcc tool (plus other 5*387f9dfdSAndroid Build Coastguard Workersignals, like SIGTERM), or if a bcc tool crashes, then kernel tracing can be 6*387f9dfdSAndroid Build Coastguard Workerleft in a semi-enabled state. It's not as bad as it sounds: there may just be 7*387f9dfdSAndroid Build Coastguard Workeroverhead for writing to ring buffers that are never read. This tool can be 8*387f9dfdSAndroid Build Coastguard Workerused to clean up the tracing state, and reset and disable active tracing. 9*387f9dfdSAndroid Build Coastguard Worker 10*387f9dfdSAndroid Build Coastguard WorkerWARNING: Make sure no other tracing sessions are active, as it will likely 11*387f9dfdSAndroid Build Coastguard Workerstop them from functioning (perhaps ungracefully). 12*387f9dfdSAndroid Build Coastguard Worker 13*387f9dfdSAndroid Build Coastguard WorkerThis specifically clears the state in at least the following files in 14*387f9dfdSAndroid Build Coastguard Worker/sys/kernel/debug/tracing: kprobe_events, uprobe_events, trace_pipe. 15*387f9dfdSAndroid Build Coastguard WorkerOther tracing facilities (ftrace) are checked, and if not in an expected state, 16*387f9dfdSAndroid Build Coastguard Workera note is printed. All tracing files can be reset with -F for force, but this 17*387f9dfdSAndroid Build Coastguard Workerwill interfere with any other running tracing sessions (eg, ftrace). 18*387f9dfdSAndroid Build Coastguard Worker 19*387f9dfdSAndroid Build Coastguard WorkerHere's an example: 20*387f9dfdSAndroid Build Coastguard Worker 21*387f9dfdSAndroid Build Coastguard Worker# ./reset-trace.sh 22*387f9dfdSAndroid Build Coastguard Worker# 23*387f9dfdSAndroid Build Coastguard Worker 24*387f9dfdSAndroid Build Coastguard WorkerThat's it. 25*387f9dfdSAndroid Build Coastguard Worker 26*387f9dfdSAndroid Build Coastguard Worker 27*387f9dfdSAndroid Build Coastguard WorkerYou can use -v to see what it does: 28*387f9dfdSAndroid Build Coastguard Worker 29*387f9dfdSAndroid Build Coastguard Worker# ./reset-trace.sh -v 30*387f9dfdSAndroid Build Coastguard WorkerResetting tracing state... 31*387f9dfdSAndroid Build Coastguard Worker 32*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/kprobe_events 33*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/uprobe_events 34*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/trace 35*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/current_tracer 36*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/set_ftrace_filter 37*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/set_graph_function 38*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/set_ftrace_pid 39*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/events/enable 40*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/tracing_thresh 41*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/tracing_on 42*387f9dfdSAndroid Build Coastguard Worker 43*387f9dfdSAndroid Build Coastguard WorkerDone. 44*387f9dfdSAndroid Build Coastguard Worker 45*387f9dfdSAndroid Build Coastguard WorkerIn this example, no resetting was necessary. 46*387f9dfdSAndroid Build Coastguard Worker 47*387f9dfdSAndroid Build Coastguard Worker 48*387f9dfdSAndroid Build Coastguard WorkerHere's an example of actually needing it: 49*387f9dfdSAndroid Build Coastguard Worker 50*387f9dfdSAndroid Build Coastguard Worker# ./funccount 'bash:r*' 51*387f9dfdSAndroid Build Coastguard WorkerTracing 317 functions for "bash:r*"... Hit Ctrl-C to end. 52*387f9dfdSAndroid Build Coastguard Worker^C 53*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 54*387f9dfdSAndroid Build Coastguard Workerrl_free_undo_list 1 55*387f9dfdSAndroid Build Coastguard Workerrl_deprep_terminal 1 56*387f9dfdSAndroid Build Coastguard Workerreadline_internal_teardown 1 57*387f9dfdSAndroid Build Coastguard Workerrl_on_new_line 1 58*387f9dfdSAndroid Build Coastguard Workerrl_crlf 1 59*387f9dfdSAndroid Build Coastguard Workerrl_clear_signals 1 60*387f9dfdSAndroid Build Coastguard Workerrl_prep_terminal 1 61*387f9dfdSAndroid Build Coastguard Workerrl_reset_line_state 1 62*387f9dfdSAndroid Build Coastguard Workerrl_initialize 1 63*387f9dfdSAndroid Build Coastguard Workerrl_newline 1 64*387f9dfdSAndroid Build Coastguard Workerreadline_internal_setup 1 65*387f9dfdSAndroid Build Coastguard Workerrl_set_screen_size 1 66*387f9dfdSAndroid Build Coastguard Workerreadline 1 67*387f9dfdSAndroid Build Coastguard Workerrl_set_signals 1 68*387f9dfdSAndroid Build Coastguard Workerrl_expand_prompt 1 69*387f9dfdSAndroid Build Coastguard Workerreplace_history_data 1 70*387f9dfdSAndroid Build Coastguard Workerrl_set_prompt 1 71*387f9dfdSAndroid Build Coastguard Workerrl_add_undo 1 72*387f9dfdSAndroid Build Coastguard Workerrl_insert_text 2 73*387f9dfdSAndroid Build Coastguard Workerrl_insert 2 74*387f9dfdSAndroid Build Coastguard Workerrl_redisplay 3 75*387f9dfdSAndroid Build Coastguard Workerrl_read_key 3 76*387f9dfdSAndroid Build Coastguard Workerrl_getc 3 77*387f9dfdSAndroid Build Coastguard Workerreadline_internal_char 3 78*387f9dfdSAndroid Build Coastguard Workerrestore_parser_state 6 79*387f9dfdSAndroid Build Coastguard Workerreap_dead_jobs 6 80*387f9dfdSAndroid Build Coastguard Workerreset_parser 6 81*387f9dfdSAndroid Build Coastguard Workerrestore_input_line_state 6 82*387f9dfdSAndroid Build Coastguard Workerrealloc 7 83*387f9dfdSAndroid Build Coastguard Workerread_octal 10 84*387f9dfdSAndroid Build Coastguard Workerread_tty_modified 13 85*387f9dfdSAndroid Build Coastguard Workerrun_exit_trap 13 86*387f9dfdSAndroid Build Coastguard Workerredirection_expand 13 87*387f9dfdSAndroid Build Coastguard Workerrestore_pipestatus_array 18 88*387f9dfdSAndroid Build Coastguard Workerreader_loop 20 89*387f9dfdSAndroid Build Coastguard Workerrun_return_trap 21 90*387f9dfdSAndroid Build Coastguard Workerremember_args 25 91*387f9dfdSAndroid Build Coastguard Workerreset_signal_handlers 30 92*387f9dfdSAndroid Build Coastguard Workerremove_quoted_escapes 60 93*387f9dfdSAndroid Build Coastguard Workerrun_unwind_frame 102 94*387f9dfdSAndroid Build Coastguard Workerreset_terminating_signals 125 95*387f9dfdSAndroid Build Coastguard Workerrestore_original_signals 139 96*387f9dfdSAndroid Build Coastguard Workerreset_internal_getopt 405 97*387f9dfdSAndroid Build Coastguard Workerrun_debug_trap 719 98*387f9dfdSAndroid Build Coastguard Workerread_command 940 99*387f9dfdSAndroid Build Coastguard Workerremove_quoted_nulls 1830 100*387f9dfdSAndroid Build Coastguard Workerrun_pending_traps 3207 101*387f9dfdSAndroid Build Coastguard Worker^C 102*387f9dfdSAndroid Build Coastguard Worker^C 103*387f9dfdSAndroid Build Coastguard Worker^C 104*387f9dfdSAndroid Build Coastguard Worker 105*387f9dfdSAndroid Build Coastguard WorkerI've traced 317 functions using funccount, and when I hit Ctrl-C, funccount is 106*387f9dfdSAndroid Build Coastguard Workernot exiting (it can normally take many seconds, but this really looks stuck): 107*387f9dfdSAndroid Build Coastguard Worker 108*387f9dfdSAndroid Build Coastguard Worker# pidstat 1 109*387f9dfdSAndroid Build Coastguard WorkerLinux 4.9.0-rc1-virtual (bgregg-xenial-bpf-i-xxx) 10/18/2016 _x86_64_ (8 CPU) 110*387f9dfdSAndroid Build Coastguard Worker 111*387f9dfdSAndroid Build Coastguard Worker10:00:33 PM UID PID %usr %system %guest %CPU CPU Command 112*387f9dfdSAndroid Build Coastguard Worker10:00:34 PM 60004 3277 0.00 0.98 0.00 0.98 0 redis-server 113*387f9dfdSAndroid Build Coastguard Worker10:00:34 PM 0 27980 87.25 10.78 0.00 98.04 3 funccount.py 114*387f9dfdSAndroid Build Coastguard Worker10:00:34 PM 0 29965 0.00 0.98 0.00 0.98 6 pidstat 115*387f9dfdSAndroid Build Coastguard Worker 116*387f9dfdSAndroid Build Coastguard Worker10:00:34 PM UID PID %usr %system %guest %CPU CPU Command 117*387f9dfdSAndroid Build Coastguard Worker10:00:35 PM 65534 3276 0.00 1.00 0.00 1.00 2 multilog 118*387f9dfdSAndroid Build Coastguard Worker10:00:35 PM 0 27980 77.00 23.00 0.00 100.00 3 funccount.py 119*387f9dfdSAndroid Build Coastguard Worker10:00:35 PM 0 29965 0.00 1.00 0.00 1.00 6 pidstat 120*387f9dfdSAndroid Build Coastguard Worker10:00:35 PM 60004 29990 0.00 1.00 0.00 1.00 6 catalina.sh 121*387f9dfdSAndroid Build Coastguard Worker 122*387f9dfdSAndroid Build Coastguard Workerfunccount looks a lot like it's in an infinite loop (I can use a stack-sampling 123*387f9dfdSAndroid Build Coastguard Workerprofiler to confirm). This is a known bug (#665) and may be fixed by the time 124*387f9dfdSAndroid Build Coastguard Workeryou read this. But right now it's a good example of needing reset-trace. 125*387f9dfdSAndroid Build Coastguard Worker 126*387f9dfdSAndroid Build Coastguard WorkerI'll send a SIGTERM, before resorting to a SIGKILL: 127*387f9dfdSAndroid Build Coastguard Worker 128*387f9dfdSAndroid Build Coastguard Worker# kill 27980 129*387f9dfdSAndroid Build Coastguard WorkerTerminated 130*387f9dfdSAndroid Build Coastguard Worker 131*387f9dfdSAndroid Build Coastguard WorkerOk, so the process is now gone, but it did leave tracing in a semi-enabled 132*387f9dfdSAndroid Build Coastguard Workerstate. Using reset-trace: 133*387f9dfdSAndroid Build Coastguard Worker 134*387f9dfdSAndroid Build Coastguard Worker# ./reset-trace.sh -v 135*387f9dfdSAndroid Build Coastguard WorkerResetting tracing state... 136*387f9dfdSAndroid Build Coastguard Worker 137*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/kprobe_events 138*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/uprobe_events 139*387f9dfdSAndroid Build Coastguard WorkerNeeded to reset /sys/kernel/debug/tracing/uprobe_events 140*387f9dfdSAndroid Build Coastguard Workeruprobe_events, before (line enumerated): 141*387f9dfdSAndroid Build Coastguard Worker 1 p:uprobes/p__bin_bash_0xa2540 /bin/bash:0x00000000000a2540 142*387f9dfdSAndroid Build Coastguard Worker 2 p:uprobes/p__bin_bash_0x21220 /bin/bash:0x0000000000021220 143*387f9dfdSAndroid Build Coastguard Worker 3 p:uprobes/p__bin_bash_0x78530 /bin/bash:0x0000000000078530 144*387f9dfdSAndroid Build Coastguard Worker 4 p:uprobes/p__bin_bash_0xa3840 /bin/bash:0x00000000000a3840 145*387f9dfdSAndroid Build Coastguard Worker 5 p:uprobes/p__bin_bash_0x9c550 /bin/bash:0x000000000009c550 146*387f9dfdSAndroid Build Coastguard Worker 6 p:uprobes/p__bin_bash_0x5e360 /bin/bash:0x000000000005e360 147*387f9dfdSAndroid Build Coastguard Worker 7 p:uprobes/p__bin_bash_0xb2630 /bin/bash:0x00000000000b2630 148*387f9dfdSAndroid Build Coastguard Worker 8 p:uprobes/p__bin_bash_0xb1e70 /bin/bash:0x00000000000b1e70 149*387f9dfdSAndroid Build Coastguard Worker 9 p:uprobes/p__bin_bash_0xb2540 /bin/bash:0x00000000000b2540 150*387f9dfdSAndroid Build Coastguard Worker 10 p:uprobes/p__bin_bash_0xb16e0 /bin/bash:0x00000000000b16e0 151*387f9dfdSAndroid Build Coastguard Worker[...] 152*387f9dfdSAndroid Build Coastguard Worker 312 p:uprobes/p__bin_bash_0xa80b0 /bin/bash:0x00000000000a80b0 153*387f9dfdSAndroid Build Coastguard Worker 313 p:uprobes/p__bin_bash_0x9e280 /bin/bash:0x000000000009e280 154*387f9dfdSAndroid Build Coastguard Worker 314 p:uprobes/p__bin_bash_0x9e100 /bin/bash:0x000000000009e100 155*387f9dfdSAndroid Build Coastguard Worker 315 p:uprobes/p__bin_bash_0xb2bd0 /bin/bash:0x00000000000b2bd0 156*387f9dfdSAndroid Build Coastguard Worker 316 p:uprobes/p__bin_bash_0x9d9c0 /bin/bash:0x000000000009d9c0 157*387f9dfdSAndroid Build Coastguard Worker 317 p:uprobes/p__bin_bash_0x4a930 /bin/bash:0x000000000004a930 158*387f9dfdSAndroid Build Coastguard Workeruprobe_events, after (line enumerated): 159*387f9dfdSAndroid Build Coastguard Worker 160*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/trace 161*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/current_tracer 162*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/set_ftrace_filter 163*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/set_graph_function 164*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/set_ftrace_pid 165*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/events/enable 166*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/tracing_thresh 167*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/tracing_on 168*387f9dfdSAndroid Build Coastguard Worker 169*387f9dfdSAndroid Build Coastguard WorkerDone. 170*387f9dfdSAndroid Build Coastguard Worker 171*387f9dfdSAndroid Build Coastguard WorkerNow looks clean. I did truncate the output here: there were a few hundred lines 172*387f9dfdSAndroid Build Coastguard Workerfrom uprobe_events. 173*387f9dfdSAndroid Build Coastguard Worker 174*387f9dfdSAndroid Build Coastguard WorkerHere's the same situation, but without the verbose option: 175*387f9dfdSAndroid Build Coastguard Worker 176*387f9dfdSAndroid Build Coastguard Worker# ./reset-trace.sh 177*387f9dfdSAndroid Build Coastguard WorkerNeeded to reset /sys/kernel/debug/tracing/uprobe_events 178*387f9dfdSAndroid Build Coastguard Worker# 179*387f9dfdSAndroid Build Coastguard Worker 180*387f9dfdSAndroid Build Coastguard WorkerAnd again with quiet: 181*387f9dfdSAndroid Build Coastguard Worker 182*387f9dfdSAndroid Build Coastguard Worker# ./reset-trace.sh -q 183*387f9dfdSAndroid Build Coastguard Worker# 184*387f9dfdSAndroid Build Coastguard Worker 185*387f9dfdSAndroid Build Coastguard Worker 186*387f9dfdSAndroid Build Coastguard WorkerHere is an example of reset-trace detecting an unrelated tracing session: 187*387f9dfdSAndroid Build Coastguard Worker 188*387f9dfdSAndroid Build Coastguard Worker# ./reset-trace.sh 189*387f9dfdSAndroid Build Coastguard WorkerNoticed unrelated tracing file /sys/kernel/debug/tracing/set_ftrace_filter isn't set as expected. Not resetting (-F to force, -v for verbose). 190*387f9dfdSAndroid Build Coastguard Worker 191*387f9dfdSAndroid Build Coastguard WorkerAnd verbose: 192*387f9dfdSAndroid Build Coastguard Worker 193*387f9dfdSAndroid Build Coastguard Worker# ./reset-trace.sh -v 194*387f9dfdSAndroid Build Coastguard WorkerResetting tracing state... 195*387f9dfdSAndroid Build Coastguard Worker 196*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/kprobe_events 197*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/uprobe_events 198*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/trace 199*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/current_tracer 200*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/set_ftrace_filter 201*387f9dfdSAndroid Build Coastguard WorkerNoticed unrelated tracing file /sys/kernel/debug/tracing/set_ftrace_filter isn't set as expected. Not resetting (-F to force, -v for verbose). 202*387f9dfdSAndroid Build Coastguard WorkerContents of set_ftrace_filter is (line enumerated): 203*387f9dfdSAndroid Build Coastguard Worker 1 tcp_send_mss 204*387f9dfdSAndroid Build Coastguard Worker 2 tcp_sendpage 205*387f9dfdSAndroid Build Coastguard Worker 3 tcp_sendmsg 206*387f9dfdSAndroid Build Coastguard Worker 4 tcp_send_dupack 207*387f9dfdSAndroid Build Coastguard Worker 5 tcp_send_challenge_ack.isra.53 208*387f9dfdSAndroid Build Coastguard Worker 6 tcp_send_rcvq 209*387f9dfdSAndroid Build Coastguard Worker 7 tcp_send_ack 210*387f9dfdSAndroid Build Coastguard Worker 8 tcp_send_loss_probe 211*387f9dfdSAndroid Build Coastguard Worker 9 tcp_send_fin 212*387f9dfdSAndroid Build Coastguard Worker 10 tcp_send_active_reset 213*387f9dfdSAndroid Build Coastguard Worker 11 tcp_send_synack 214*387f9dfdSAndroid Build Coastguard Worker 12 tcp_send_delayed_ack 215*387f9dfdSAndroid Build Coastguard Worker 13 tcp_send_window_probe 216*387f9dfdSAndroid Build Coastguard Worker 14 tcp_send_probe0 217*387f9dfdSAndroid Build Coastguard WorkerExpected "". 218*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/set_graph_function 219*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/set_ftrace_pid 220*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/events/enable 221*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/tracing_thresh 222*387f9dfdSAndroid Build Coastguard WorkerChecking /sys/kernel/debug/tracing/tracing_on 223*387f9dfdSAndroid Build Coastguard Worker 224*387f9dfdSAndroid Build Coastguard WorkerDone. 225*387f9dfdSAndroid Build Coastguard Worker 226*387f9dfdSAndroid Build Coastguard WorkerSo this file is not currently used by bcc, but it may be useful to know that 227*387f9dfdSAndroid Build Coastguard Workerit's not in the default state -- something is either using it or has left it 228*387f9dfdSAndroid Build Coastguard Workerenabled. These files can be reset with -F, but that may break other tools that 229*387f9dfdSAndroid Build Coastguard Workerare currently using them. 230*387f9dfdSAndroid Build Coastguard Worker 231*387f9dfdSAndroid Build Coastguard Worker 232*387f9dfdSAndroid Build Coastguard WorkerUse -h to print the USAGE message: 233*387f9dfdSAndroid Build Coastguard Worker 234*387f9dfdSAndroid Build Coastguard Worker# ./reset-trace.sh -h 235*387f9dfdSAndroid Build Coastguard WorkerUSAGE: reset-trace [-Fhqv] 236*387f9dfdSAndroid Build Coastguard Worker -F # force: reset all tracing files 237*387f9dfdSAndroid Build Coastguard Worker -v # verbose: print details while working 238*387f9dfdSAndroid Build Coastguard Worker -h # this usage message 239*387f9dfdSAndroid Build Coastguard Worker -q # quiet: no output 240*387f9dfdSAndroid Build Coastguard Worker eg, 241*387f9dfdSAndroid Build Coastguard Worker reset-trace # disable semi-enabled tracing 242