diff options
author | Qu Wenruo <wqu@suse.com> | 2018-09-27 02:42:29 -0400 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2018-10-15 11:23:36 -0400 |
commit | c337e7b02f71c4b2f6f2138807a284d2c4e1ac5e (patch) | |
tree | 136cbe7591e6c48aa1b61a6d470d68e1dcdbe0a1 | |
parent | fa6ac71524f206c33accfc12294fd35e17478fe0 (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.c | 4 | ||||
-rw-r--r-- | include/trace/events/btrfs.h | 21 |
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 | ||
1579 | TRACE_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 | |||
1579 | TRACE_EVENT(btrfs_qgroup_account_extent, | 1600 | TRACE_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, |