Re: [PATCH] Btrfs: add file item tracepoint
On Thu, Mar 09, 2017 at 01:52:22PM +0100, David Sterba wrote: > On Tue, Mar 07, 2017 at 08:49:42AM -0800, Liu Bo wrote: > > On Tue, Mar 07, 2017 at 04:48:24PM +0100, David Sterba wrote: > > > On Fri, Mar 03, 2017 at 06:41:27PM -0800, Liu Bo wrote: > > > > + TP_printk_btrfs( > > > > + "root %llu(%s) ino %llu sz 0x%llx disk_isz 0x%llx " > > > > + "file extent range [0x%llx 0x%llx] " > > > > + "(num_bytes 0x%llx ram_bytes 0x%llx disk_bytenr 0x%llx " > > > > + "disk_num_bytes 0x%llx extent_offset 0x%llx type (%s) " > > > > + "compression %u", > > > > > > > + TP_printk_btrfs( > > > > + "root %llu(%s) ino %llu sz 0x%llx disk_isz 0x%llx " > > > > + "file extent range [0x%llx 0x%llx] " > > > > + "extent_type (%s) compression %u", > > > > > > Please update the message formats according to > > > https://btrfs.wiki.kernel.org/index.php/Development_notes#Tracepoints > > > > I feel like for size and offset, if using '%llu' rather than '%llx', it > > is not easy to tell whether the size/offset is aligned to 4K or not. > > I think we'll have to do some conversion either way, and I don't see > %llx used anywhere in our thacepoints. > > If the alignment is useful for certain values, we can extend the format > to signify that, for example: "start=4097!". OK, I'll update this patch to comply with the wiki so you can take it, and then make a new patch to convert %llu to %llx to see if any objections. Thanks, -liubo -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] Btrfs: add file item tracepoint
On Tue, Mar 07, 2017 at 08:49:42AM -0800, Liu Bo wrote: > On Tue, Mar 07, 2017 at 04:48:24PM +0100, David Sterba wrote: > > On Fri, Mar 03, 2017 at 06:41:27PM -0800, Liu Bo wrote: > > > + TP_printk_btrfs( > > > + "root %llu(%s) ino %llu sz 0x%llx disk_isz 0x%llx " > > > + "file extent range [0x%llx 0x%llx] " > > > + "(num_bytes 0x%llx ram_bytes 0x%llx disk_bytenr 0x%llx " > > > + "disk_num_bytes 0x%llx extent_offset 0x%llx type (%s) " > > > + "compression %u", > > > > > + TP_printk_btrfs( > > > + "root %llu(%s) ino %llu sz 0x%llx disk_isz 0x%llx " > > > + "file extent range [0x%llx 0x%llx] " > > > + "extent_type (%s) compression %u", > > > > Please update the message formats according to > > https://btrfs.wiki.kernel.org/index.php/Development_notes#Tracepoints > > I feel like for size and offset, if using '%llu' rather than '%llx', it > is not easy to tell whether the size/offset is aligned to 4K or not. I think we'll have to do some conversion either way, and I don't see %llx used anywhere in our thacepoints. If the alignment is useful for certain values, we can extend the format to signify that, for example: "start=4097!". -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] Btrfs: add file item tracepoint
On Tue, Mar 07, 2017 at 04:48:24PM +0100, David Sterba wrote: > On Fri, Mar 03, 2017 at 06:41:27PM -0800, Liu Bo wrote: > > + TP_printk_btrfs( > > + "root %llu(%s) ino %llu sz 0x%llx disk_isz 0x%llx " > > + "file extent range [0x%llx 0x%llx] " > > + "(num_bytes 0x%llx ram_bytes 0x%llx disk_bytenr 0x%llx " > > + "disk_num_bytes 0x%llx extent_offset 0x%llx type (%s) " > > + "compression %u", > > > + TP_printk_btrfs( > > + "root %llu(%s) ino %llu sz 0x%llx disk_isz 0x%llx " > > + "file extent range [0x%llx 0x%llx] " > > + "extent_type (%s) compression %u", > > Please update the message formats according to > https://btrfs.wiki.kernel.org/index.php/Development_notes#Tracepoints I feel like for size and offset, if using '%llu' rather than '%llx', it is not easy to tell whether the size/offset is aligned to 4K or not. Thanks, -liubo -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] Btrfs: add file item tracepoint
On Fri, Mar 03, 2017 at 06:41:27PM -0800, Liu Bo wrote: > + TP_printk_btrfs( > + "root %llu(%s) ino %llu sz 0x%llx disk_isz 0x%llx " > + "file extent range [0x%llx 0x%llx] " > + "(num_bytes 0x%llx ram_bytes 0x%llx disk_bytenr 0x%llx " > + "disk_num_bytes 0x%llx extent_offset 0x%llx type (%s) " > + "compression %u", > + TP_printk_btrfs( > + "root %llu(%s) ino %llu sz 0x%llx disk_isz 0x%llx " > + "file extent range [0x%llx 0x%llx] " > + "extent_type (%s) compression %u", Please update the message formats according to https://btrfs.wiki.kernel.org/index.php/Development_notes#Tracepoints -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH] Btrfs: add file item tracepoint
While debugging truncate problems, I found that these tracepoints could help us quickly know what went wrong. Two sets of tracepoints are created to track regular/prealloc file item and inline file item respectively, I put inline as a separate one since what inline file items cares about are way less than the regular one. This adds four tracepoints: - btrfs_get_extent_show_fi_regular - btrfs_get_extent_show_fi_inline - btrfs_truncate_show_fi_regular - btrfs_truncate_show_fi_inline Signed-off-by: Liu Bo--- fs/btrfs/inode.c | 15 + include/trace/events/btrfs.h | 133 +++ 2 files changed, 148 insertions(+) diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 5652f5f..8a26712 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -4401,9 +4401,17 @@ int btrfs_truncate_inode_items(struct btrfs_trans_handle *trans, if (extent_type != BTRFS_FILE_EXTENT_INLINE) { item_end += btrfs_file_extent_num_bytes(leaf, fi); + + trace_btrfs_truncate_show_fi_regular( + BTRFS_I(inode), leaf, fi, + found_key.offset); } else if (extent_type == BTRFS_FILE_EXTENT_INLINE) { item_end += btrfs_file_extent_inline_len(leaf, path->slots[0], fi); + + trace_btrfs_truncate_show_fi_inline( + BTRFS_I(inode), leaf, fi, path->slots[0], + found_key.offset); } item_end--; } @@ -6814,11 +6822,18 @@ struct extent_map *btrfs_get_extent(struct btrfs_inode *inode, found_type == BTRFS_FILE_EXTENT_PREALLOC) { extent_end = extent_start + btrfs_file_extent_num_bytes(leaf, item); + + trace_btrfs_get_extent_show_fi_regular(inode, leaf, item, + extent_start); } else if (found_type == BTRFS_FILE_EXTENT_INLINE) { size_t size; size = btrfs_file_extent_inline_len(leaf, path->slots[0], item); extent_end = ALIGN(extent_start + size, fs_info->sectorsize); + + trace_btrfs_get_extent_show_fi_inline(inode, leaf, item, + path->slots[0], + extent_start); } next: if (start >= extent_end) { diff --git a/include/trace/events/btrfs.h b/include/trace/events/btrfs.h index a3c3cab..6353d0f 100644 --- a/include/trace/events/btrfs.h +++ b/include/trace/events/btrfs.h @@ -12,6 +12,7 @@ struct btrfs_root; struct btrfs_fs_info; struct btrfs_inode; struct extent_map; +struct btrfs_file_extent_item; struct btrfs_ordered_extent; struct btrfs_delayed_ref_node; struct btrfs_delayed_tree_ref; @@ -54,6 +55,12 @@ struct btrfs_qgroup_extent_record; (obj >= BTRFS_ROOT_TREE_OBJECTID && \ obj <= BTRFS_QUOTA_TREE_OBJECTID)) ? __show_root_type(obj) : "-" +#define show_fi_type(type) \ + __print_symbolic(type, \ +{ BTRFS_FILE_EXTENT_INLINE,"INLINE" }, \ +{ BTRFS_FILE_EXTENT_REG, "REG"}, \ +{ BTRFS_FILE_EXTENT_PREALLOC, "PREALLOC"}) + #define BTRFS_GROUP_FLAGS \ { BTRFS_BLOCK_GROUP_DATA, "DATA"},\ { BTRFS_BLOCK_GROUP_SYSTEM, "SYSTEM"}, \ @@ -232,6 +239,132 @@ TRACE_EVENT_CONDITION(btrfs_get_extent, __entry->refs, __entry->compress_type) ); +/* file extent item */ +DECLARE_EVENT_CLASS(btrfs__file_extent_item_regular, + + TP_PROTO(struct btrfs_inode *bi, struct extent_buffer *l, struct btrfs_file_extent_item *fi, u64 start), + + TP_ARGS(bi, l, fi, start), + + TP_STRUCT__entry_btrfs( + __field(u64,root_obj) + __field(u64,ino ) + __field(loff_t, isize ) + __field(u64,disk_isize ) + __field(u64,num_bytes ) + __field(u64,ram_bytes ) + __field(u64,disk_bytenr ) + __field(u64,disk_num_bytes ) + __field(u64,extent_offset ) + __field(u8, extent_type ) + __field(u8, compression ) + __field(u64,extent_start) + __field(u64,