]> nv-tegra.nvidia Code Review - linux-2.6.git/commitdiff
tracing: add average time in function to function profiler
authorSteven Rostedt <srostedt@redhat.com>
Thu, 26 Mar 2009 01:00:47 +0000 (21:00 -0400)
committerSteven Rostedt <srostedt@redhat.com>
Thu, 26 Mar 2009 01:03:36 +0000 (21:03 -0400)
Show the average time in the function (Time / Hit)

  Function                               Hit    Time            Avg
  --------                               ---    ----            ---
  mwait_idle                              51    140326.6 us     2751.503 us
  smp_apic_timer_interrupt                47    3517.735 us     74.845 us
  schedule                                10    2738.754 us     273.875 us
  __schedule                              10    2732.857 us     273.285 us
  hrtimer_interrupt                       47    1896.104 us     40.342 us
  irq_exit                                56    1711.833 us     30.568 us
  __run_hrtimer                           47    1315.589 us     27.991 us
  tick_sched_timer                        47    1138.690 us     24.227 us
  do_softirq                              56    1116.829 us     19.943 us
  __do_softirq                            56    1066.932 us     19.052 us
  do_IRQ                                   9    926.153 us      102.905 us

Signed-off-by: Steven Rostedt <srostedt@redhat.com>
kernel/trace/ftrace.c

index 4d90c916b2bbd75d8ba024a6da7f332a2e110a68..c7f4a4be05dc0f96c35fec5163c23f7761d081fd 100644 (file)
@@ -347,8 +347,10 @@ static int function_stat_cmp(void *p1, void *p2)
 static int function_stat_headers(struct seq_file *m)
 {
 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
-       seq_printf(m, "  Function                               Hit    Time\n"
-                     "  --------                               ---    ----\n");
+       seq_printf(m, "  Function                               "
+                  "Hit    Time            Avg\n"
+                     "  --------                               "
+                  "---    ----            ---\n");
 #else
        seq_printf(m, "  Function                               Hit\n"
                      "  --------                               ---\n");
@@ -361,12 +363,9 @@ static int function_stat_show(struct seq_file *m, void *v)
        struct ftrace_profile *rec = v;
        char str[KSYM_SYMBOL_LEN];
 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
-       static struct trace_seq s;
        static DEFINE_MUTEX(mutex);
-
-       mutex_lock(&mutex);
-       trace_seq_init(&s);
-       trace_print_graph_duration(rec->time, &s);
+       static struct trace_seq s;
+       unsigned long long avg;
 #endif
 
        kallsyms_lookup(rec->ip, NULL, NULL, NULL, str);
@@ -374,6 +373,14 @@ static int function_stat_show(struct seq_file *m, void *v)
 
 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
        seq_printf(m, "    ");
+       avg = rec->time;
+       do_div(avg, rec->counter);
+
+       mutex_lock(&mutex);
+       trace_seq_init(&s);
+       trace_print_graph_duration(rec->time, &s);
+       trace_seq_puts(&s, "    ");
+       trace_print_graph_duration(avg, &s);
        trace_print_seq(m, &s);
        mutex_unlock(&mutex);
 #endif