• Arnaldo Carvalho de Melo's avatar
    blktrace: add ftrace plugin · c71a8961
    Arnaldo Carvalho de Melo authored
    Impact: New way of using the blktrace infrastructure
    
    This drops the requirement of userspace utilities to use the blktrace
    facility.
    
    Configuration is done thru sysfs, adding a "trace" directory to the
    partition directory where blktrace can be enabled for the associated
    request_queue.
    
    The same filters present in the IOCTL interface are present as sysfs
    device attributes.
    
    The /sys/block/sdX/sdXN/trace/enable file allows tracing without any
    filters.
    
    The other files in this directory: pid, act_mask, start_lba and end_lba
    can be used with the same meaning as with the IOCTL interface.
    
    Using the sysfs interface will only setup the request_queue->blk_trace
    fields, tracing will only take place when the "blk" tracer is selected
    via the ftrace interface, as in the following example:
    
    To see the trace, one can use the /d/tracing/trace file or the
    /d/tracign/trace_pipe file, with semantics defined in the ftrace
    documentation in Documentation/ftrace.txt.
    
    [root@f10-1 ~]# cat /t/trace
           kjournald-305   [000]  3046.491224:   8,1    A WBS 6367 + 8 <- (8,1) 6304
           kjournald-305   [000]  3046.491227:   8,1    Q   R 6367 + 8 [kjournald]
           kjournald-305   [000]  3046.491236:   8,1    G  RB 6367 + 8 [kjournald]
           kjournald-305   [000]  3046.491239:   8,1    P  NS [kjournald]
           kjournald-305   [000]  3046.491242:   8,1    I RBS 6367 + 8 [kjournald]
           kjournald-305   [000]  3046.491251:   8,1    D  WB 6367 + 8 [kjournald]
           kjournald-305   [000]  3046.491610:   8,1    U  WS [kjournald] 1
              <idle>-0     [000]  3046.511914:   8,1    C  RS 6367 + 8 [6367]
    [root@f10-1 ~]#
    
    The default line context (prefix) format is the one described in the ftrace
    documentation, with the blktrace specific bits using its existing format,
    described in blkparse(8).
    
    If one wants to have the classic blktrace formatting, this is possible by
    using:
    
    [root@f10-1 ~]# echo blk_classic > /t/trace_options
    [root@f10-1 ~]# cat /t/trace
      8,1    0  3046.491224   305  A WBS 6367 + 8 <- (8,1) 6304
      8,1    0  3046.491227   305  Q   R 6367 + 8 [kjournald]
      8,1    0  3046.491236   305  G  RB 6367 + 8 [kjournald]
      8,1    0  3046.491239   305  P  NS [kjournald]
      8,1    0  3046.491242   305  I RBS 6367 + 8 [kjournald]
      8,1    0  3046.491251   305  D  WB 6367 + 8 [kjournald]
      8,1    0  3046.491610   305  U  WS [kjournald] 1
      8,1    0  3046.511914     0  C  RS 6367 + 8 [6367]
    [root@f10-1 ~]#
    
    Using the ftrace standard format allows more flexibility, such
    as the ability of asking for backtraces via trace_options:
    
    [root@f10-1 ~]# echo noblk_classic > /t/trace_options
    [root@f10-1 ~]# echo stacktrace > /t/trace_options
    
    [root@f10-1 ~]# cat /t/trace
           kjournald-305   [000]  3318.826779:   8,1    A WBS 6375 + 8 <- (8,1) 6312
           kjournald-305   [000]  3318.826782:
     <= submit_bio
     <= submit_bh
     <= sync_dirty_buffer
     <= journal_commit_transaction
     <= kjournald
     <= kthread
     <= child_rip
           kjournald-305   [000]  3318.826836:   8,1    Q   R 6375 + 8 [kjournald]
           kjournald-305   [000]  3318.826837:
     <= generic_make_request
     <= submit_bio
     <= submit_bh
     <= sync_dirty_buffer
     <= journal_commit_transaction
     <= kjournald
     <= kthread
    
    Please read the ftrace documentation to use aditional, standardized
    tracing filters such as /d/tracing/trace_cpumask, etc.
    
    See also /d/tracing/trace_mark to add comments in the trace stream,
    that is equivalent to the /d/block/sdaN/msg interface.
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    c71a8961
blktrace.c 36.6 KB