Skip to content

Commit d8741e2

Browse files
Steven Rostedt (Red Hat)rostedt
authored andcommitted
tracing: Add help of snapshot feature when snapshot is empty
When cat'ing the snapshot file, instead of showing an empty trace header like the trace file does, show how to use the snapshot feature. Also, this is a good place to show if the snapshot has been allocated or not. Users may want to "pre allocate" the snapshot to have a fast "swap" of the current buffer. Otherwise, a swap would be slow and might fail as it would need to allocate the snapshot buffer, and that might fail under tight memory constraints. Here's what it looked like before: # tracer: nop # # entries-in-buffer/entries-written: 0/0 #P:4 # # _-----=> irqs-off # / _----=> need-resched # | / _---=> hardirq/softirq # || / _--=> preempt-depth # ||| / delay # TASK-PID CPU# |||| TIMESTAMP FUNCTION # | | | |||| | | Here's what it looks like now: # tracer: nop # # # * Snapshot is freed * # # Snapshot commands: # echo 0 > snapshot : Clears and frees snapshot buffer # echo 1 > snapshot : Allocates snapshot buffer, if not already allocated. # Takes a snapshot of the main buffer. # echo 2 > snapshot : Clears snapshot buffer (but does not allocate) # (Doesn't have to be '2' works with any number that # is not a '0' or '1') Acked-by: Hiraku Toyooka <[email protected]> Signed-off-by: Steven Rostedt <[email protected]>
1 parent a335358 commit d8741e2

File tree

1 file changed

+24
-1
lines changed

1 file changed

+24
-1
lines changed

kernel/trace/trace.c

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2400,6 +2400,27 @@ static void test_ftrace_alive(struct seq_file *m)
24002400
seq_printf(m, "# MAY BE MISSING FUNCTION EVENTS\n");
24012401
}
24022402

2403+
#ifdef CONFIG_TRACER_MAX_TRACE
2404+
static void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter)
2405+
{
2406+
if (iter->trace->allocated_snapshot)
2407+
seq_printf(m, "#\n# * Snapshot is allocated *\n#\n");
2408+
else
2409+
seq_printf(m, "#\n# * Snapshot is freed *\n#\n");
2410+
2411+
seq_printf(m, "# Snapshot commands:\n");
2412+
seq_printf(m, "# echo 0 > snapshot : Clears and frees snapshot buffer\n");
2413+
seq_printf(m, "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n");
2414+
seq_printf(m, "# Takes a snapshot of the main buffer.\n");
2415+
seq_printf(m, "# echo 2 > snapshot : Clears snapshot buffer (but does not allocate)\n");
2416+
seq_printf(m, "# (Doesn't have to be '2' works with any number that\n");
2417+
seq_printf(m, "# is not a '0' or '1')\n");
2418+
}
2419+
#else
2420+
/* Should never be called */
2421+
static inline void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter) { }
2422+
#endif
2423+
24032424
static int s_show(struct seq_file *m, void *v)
24042425
{
24052426
struct trace_iterator *iter = v;
@@ -2411,7 +2432,9 @@ static int s_show(struct seq_file *m, void *v)
24112432
seq_puts(m, "#\n");
24122433
test_ftrace_alive(m);
24132434
}
2414-
if (iter->trace && iter->trace->print_header)
2435+
if (iter->snapshot && trace_empty(iter))
2436+
print_snapshot_help(m, iter);
2437+
else if (iter->trace && iter->trace->print_header)
24152438
iter->trace->print_header(m);
24162439
else
24172440
trace_default_header(m);

0 commit comments

Comments
 (0)