• Namhyung Kim's avatar
    perf ftrace: Add 'latency' subcommand · 53be5028
    Namhyung Kim authored
    The perf ftrace latency is to get a histogram of function execution
    time.  Users should give a function name using -T option.
    
    This is implemented using function_graph tracer with the given
    function only.  And it parses the output to extract the time.
    
      $ sudo perf ftrace latency -a -T mutex_lock sleep 1
      #   DURATION     |      COUNT | GRAPH                          |
           0 - 1    us |       4596 | ########################       |
           1 - 2    us |       1680 | #########                      |
           2 - 4    us |       1106 | #####                          |
           4 - 8    us |        546 | ##                             |
           8 - 16   us |        562 | ###                            |
          16 - 32   us |          1 |                                |
          32 - 64   us |          0 |                                |
          64 - 128  us |          0 |                                |
         128 - 256  us |          0 |                                |
         256 - 512  us |          0 |                                |
         512 - 1024 us |          0 |                                |
           1 - 2    ms |          0 |                                |
           2 - 4    ms |          0 |                                |
           4 - 8    ms |          0 |                                |
           8 - 16   ms |          0 |                                |
          16 - 32   ms |          0 |                                |
          32 - 64   ms |          0 |                                |
          64 - 128  ms |          0 |                                |
         128 - 256  ms |          0 |                                |
         256 - 512  ms |          0 |                                |
         512 - 1024 ms |          0 |                                |
           1 - ...   s |          0 |                                |
    
    Committer testing:
    
    Latency for the __handle_mm_fault kernel function, system wide for 1
    second, see how one can go from the usual 'perf ftrace' output, now the
    same as for the 'perf ftrace trace' subcommand, to the new 'perf ftrace
    latency' subcommand:
    
      # perf ftrace -T __handle_mm_fault -a sleep 1 | wc -l
      709
      # perf ftrace -T __handle_mm_fault -a sleep 1 | wc -l
      510
      # perf ftrace -T __handle_mm_fault -a sleep 1 | head -20
      # tracer: function
      #
      # entries-in-buffer/entries-written: 0/0   #P:32
      #
      #           TASK-PID     CPU#     TIMESTAMP  FUNCTION
      #              | |         |         |         |
             perf-exec-1685104 [007]  90638.894613: __handle_mm_fault <-handle_mm_fault
             perf-exec-1685104 [007]  90638.894620: __handle_mm_fault <-handle_mm_fault
             perf-exec-1685104 [007]  90638.894622: __handle_mm_fault <-handle_mm_fault
             perf-exec-1685104 [007]  90638.894635: __handle_mm_fault <-handle_mm_fault
             perf-exec-1685104 [007]  90638.894688: __handle_mm_fault <-handle_mm_fault
             perf-exec-1685104 [007]  90638.894702: __handle_mm_fault <-handle_mm_fault
             perf-exec-1685104 [007]  90638.894714: __handle_mm_fault <-handle_mm_fault
             perf-exec-1685104 [007]  90638.894728: __handle_mm_fault <-handle_mm_fault
             perf-exec-1685104 [007]  90638.894740: __handle_mm_fault <-handle_mm_fault
             perf-exec-1685104 [007]  90638.894751: __handle_mm_fault <-handle_mm_fault
                 sleep-1685104 [007]  90638.894962: __handle_mm_fault <-handle_mm_fault
                 sleep-1685104 [007]  90638.894977: __handle_mm_fault <-handle_mm_fault
                 sleep-1685104 [007]  90638.894983: __handle_mm_fault <-handle_mm_fault
                 sleep-1685104 [007]  90638.894995: __handle_mm_fault <-handle_mm_fault
      # perf ftrace latency -T __handle_mm_fault -a sleep 1
      #   DURATION     |      COUNT | GRAPH                                          |
           0 - 1    us |        125 | ######                                         |
           1 - 2    us |        249 | #############                                  |
           2 - 4    us |        455 | ########################                       |
           4 - 8    us |         37 | #                                              |
           8 - 16   us |          0 |                                                |
          16 - 32   us |          0 |                                                |
          32 - 64   us |          0 |                                                |
          64 - 128  us |          0 |                                                |
         128 - 256  us |          0 |                                                |
         256 - 512  us |          0 |                                                |
         512 - 1024 us |          0 |                                                |
           1 - 2    ms |          0 |                                                |
           2 - 4    ms |          0 |                                                |
           4 - 8    ms |          0 |                                                |
           8 - 16   ms |          0 |                                                |
          16 - 32   ms |          0 |                                                |
          32 - 64   ms |          0 |                                                |
          64 - 128  ms |          0 |                                                |
         128 - 256  ms |          0 |                                                |
         256 - 512  ms |          0 |                                                |
         512 - 1024 ms |          0 |                                                |
           1 - ...   s |          0 |                                                |
      #
    Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Athira Jajeev <atrajeev@linux.vnet.ibm.com>
    Cc: Changbin Du <changbin.du@gmail.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Song Liu <songliubraving@fb.com>
    Cc: Stephane Eranian <eranian@google.com>
    Link: https://lore.kernel.org/r/20211215185154.360314-4-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    53be5028
builtin-ftrace.c 27.7 KB