• Q
    btrfs: add trace event for submitted RAID56 bio · b8bea09a
    Qu Wenruo 提交于
    Add tracepoint for better insight to how the RAID56 data are submitted.
    
    The output looks like this: (trace event header and UUID skipped)
    
       raid56_read_partial: full_stripe=389152768 devid=3 type=DATA1 offset=32768 opf=0x0 physical=323059712 len=32768
       raid56_read_partial: full_stripe=389152768 devid=1 type=DATA2 offset=0 opf=0x0 physical=67174400 len=65536
       raid56_write_stripe: full_stripe=389152768 devid=3 type=DATA1 offset=0 opf=0x1 physical=323026944 len=32768
       raid56_write_stripe: full_stripe=389152768 devid=2 type=PQ1 offset=0 opf=0x1 physical=323026944 len=32768
    
    The above debug output is from a 32K data write into an empty RAID56
    data chunk.
    
    Some explanation on the event output:
    
      full_stripe:	the logical bytenr of the full stripe
      devid:	btrfs devid
      type:		raid stripe type.
             	DATA1:	the first data stripe
             	DATA2:	the second data stripe
             	PQ1:	the P stripe
             	PQ2:	the Q stripe
      offset:	the offset inside the stripe.
      opf:		the bio op type
      physical:	the physical offset the bio is for
      len:		the length of the bio
    
    The first two lines are from partial RMW read, which is reading the
    remaining data stripes from disks.
    
    The last two lines are for full stripe RMW write, which is writing the
    involved two 16K stripes (one for DATA1 stripe, one for P stripe).
    The stripe for DATA2 doesn't need to be written.
    
    There are 5 types of trace events:
    
    - raid56_read_partial
      Read remaining data for regular read/write path.
    
    - raid56_write_stripe
      Write the modified stripes for regular read/write path.
    
    - raid56_scrub_read_recover
      Read remaining data for scrub recovery path.
    
    - raid56_scrub_write_stripe
      Write the modified stripes for scrub path.
    
    - raid56_scrub_read
      Read remaining data for scrub path.
    
    Also, since the trace events are included at super.c, we have to export
    needed structure definitions to 'raid56.h' and include the header in
    super.c, or we're unable to access those members.
    Signed-off-by: NQu Wenruo <wqu@suse.com>
    Reviewed-by: NDavid Sterba <dsterba@suse.com>
    [ reformat comments ]
    Signed-off-by: NDavid Sterba <dsterba@suse.com>
    b8bea09a
super.c 74.9 KB