• Qu Wenruo's avatar
    btrfs: tracepoints: Add trace events for extent_io_tree · a1d19847
    Qu Wenruo authored
    Although btrfs heavily relies on extent_io_tree, we don't really have
    any good trace events for them.
    
    This patch will add the folowing trace events:
    - trace_btrfs_set_extent_bit()
    - trace_btrfs_clear_extent_bit()
    - trace_btrfs_convert_extent_bit()
    
    Since selftests could create temporary extent_io_tree without fs_info,
    modify TP_fast_assign_fsid() to accept NULL as fs_info.  NULL fs_info
    will lead to all zero fsid.
    
    The output would be:
      btrfs_set_extent_bit: <FDID>: io_tree=INODE_IO ino=1 root=1 start=22036480 len=4096 set_bits=LOCKED
      btrfs_set_extent_bit: <FSID>: io_tree=INODE_IO ino=1 root=1 start=22040576 len=4096 set_bits=LOCKED
      btrfs_set_extent_bit: <FSID>: io_tree=INODE_IO ino=1 root=1 start=22044672 len=4096 set_bits=LOCKED
      btrfs_set_extent_bit: <FSID>: io_tree=INODE_IO ino=1 root=1 start=22048768 len=4096 set_bits=LOCKED
      btrfs_clear_extent_bit: <FSID>: io_tree=INODE_IO ino=1 root=1 start=22036480 len=16384 clear_bits=LOCKED
      ^^^ Extent buffer 22036480 read from disk, the locking progress
    
      btrfs_set_extent_bit: <FSID>: io_tree=TRANS_DIRTY_PAGES ino=1 root=1 start=30425088 len=16384 set_bits=DIRTY
      btrfs_set_extent_bit: <FSID>: io_tree=TRANS_DIRTY_PAGES ino=1 root=1 start=30441472 len=16384 set_bits=DIRTY
      ^^^ 2 new tree blocks allocated in one transaction
    
      btrfs_set_extent_bit: <FSID>: io_tree=FREED_EXTENTS0 ino=0 root=0 start=30523392 len=16384 set_bits=DIRTY
      btrfs_set_extent_bit: <FSID>: io_tree=FREED_EXTENTS0 ino=0 root=0 start=30556160 len=16384 set_bits=DIRTY
      ^^^ 2 old tree blocks get pinned down
    
    There is one point which need attention:
    1) Those trace events can be pretty heavy:
       The following workload would generate over 400 trace events.
    
    	mkfs.btrfs -f $dev
    	start_trace
    	mount $dev $mnt -o enospc_debug
    	sync
    	touch $mnt/file1
    	touch $mnt/file2
    	touch $mnt/file3
    	xfs_io -f -c "pwrite 0 16k" $mnt/file4
    	umount $mnt
    	end_trace
    
       It's not recommended to use them in real world environment.
    Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    [ rename enums ]
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    a1d19847
btrfs.h 53.1 KB