aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQu Wenruo <wqu@suse.com>2018-09-27 02:42:29 -0400
committerDavid Sterba <dsterba@suse.com>2018-10-15 11:23:36 -0400
commitc337e7b02f71c4b2f6f2138807a284d2c4e1ac5e (patch)
tree136cbe7591e6c48aa1b61a6d470d68e1dcdbe0a1
parentfa6ac71524f206c33accfc12294fd35e17478fe0 (diff)
btrfs: qgroup: Introduce trace event to analyse the number of dirty extents accounted
Number of qgroup dirty extents is directly linked to the performance overhead, so add a new trace event, trace_qgroup_num_dirty_extents(), to record how many dirty extents is processed in btrfs_qgroup_account_extents(). This will be pretty handy to analyze later balance performance improvement. Signed-off-by: Qu Wenruo <wqu@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r--fs/btrfs/qgroup.c4
-rw-r--r--include/trace/events/btrfs.h21
2 files changed, 25 insertions, 0 deletions
diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
index bdd8c0da6e32..8a03adc11f53 100644
--- a/fs/btrfs/qgroup.c
+++ b/fs/btrfs/qgroup.c
@@ -2132,6 +2132,7 @@ int btrfs_qgroup_account_extents(struct btrfs_trans_handle *trans)
2132 struct btrfs_delayed_ref_root *delayed_refs; 2132 struct btrfs_delayed_ref_root *delayed_refs;
2133 struct ulist *new_roots = NULL; 2133 struct ulist *new_roots = NULL;
2134 struct rb_node *node; 2134 struct rb_node *node;
2135 u64 num_dirty_extents = 0;
2135 u64 qgroup_to_skip; 2136 u64 qgroup_to_skip;
2136 int ret = 0; 2137 int ret = 0;
2137 2138
@@ -2141,6 +2142,7 @@ int btrfs_qgroup_account_extents(struct btrfs_trans_handle *trans)
2141 record = rb_entry(node, struct btrfs_qgroup_extent_record, 2142 record = rb_entry(node, struct btrfs_qgroup_extent_record,
2142 node); 2143 node);
2143 2144
2145 num_dirty_extents++;
2144 trace_btrfs_qgroup_account_extents(fs_info, record); 2146 trace_btrfs_qgroup_account_extents(fs_info, record);
2145 2147
2146 if (!ret) { 2148 if (!ret) {
@@ -2186,6 +2188,8 @@ cleanup:
2186 kfree(record); 2188 kfree(record);
2187 2189
2188 } 2190 }
2191 trace_qgroup_num_dirty_extents(fs_info, trans->transid,
2192 num_dirty_extents);
2189 return ret; 2193 return ret;
2190} 2194}
2191 2195
diff --git a/include/trace/events/btrfs.h b/include/trace/events/btrfs.h
index abe3ff774f58..8568946f491d 100644
--- a/include/trace/events/btrfs.h
+++ b/include/trace/events/btrfs.h
@@ -1576,6 +1576,27 @@ DEFINE_EVENT(btrfs_qgroup_extent, btrfs_qgroup_trace_extent,
1576 TP_ARGS(fs_info, rec) 1576 TP_ARGS(fs_info, rec)
1577); 1577);
1578 1578
1579TRACE_EVENT(qgroup_num_dirty_extents,
1580
1581 TP_PROTO(const struct btrfs_fs_info *fs_info, u64 transid,
1582 u64 num_dirty_extents),
1583
1584 TP_ARGS(fs_info, transid, num_dirty_extents),
1585
1586 TP_STRUCT__entry_btrfs(
1587 __field( u64, transid )
1588 __field( u64, num_dirty_extents )
1589 ),
1590
1591 TP_fast_assign_btrfs(fs_info,
1592 __entry->transid = transid;
1593 __entry->num_dirty_extents = num_dirty_extents;
1594 ),
1595
1596 TP_printk_btrfs("transid=%llu num_dirty_extents=%llu",
1597 __entry->transid, __entry->num_dirty_extents)
1598);
1599
1579TRACE_EVENT(btrfs_qgroup_account_extent, 1600TRACE_EVENT(btrfs_qgroup_account_extent,
1580 1601
1581 TP_PROTO(const struct btrfs_fs_info *fs_info, u64 transid, u64 bytenr, 1602 TP_PROTO(const struct btrfs_fs_info *fs_info, u64 transid, u64 bytenr,