浏览代码

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>
Qu Wenruo 6 年之前
父节点
当前提交
c337e7b02f
共有 2 个文件被更改,包括 25 次插入0 次删除
  1. 4 0
      fs/btrfs/qgroup.c
  2. 21 0
      include/trace/events/btrfs.h

+ 4 - 0
fs/btrfs/qgroup.c

@@ -2132,6 +2132,7 @@ int btrfs_qgroup_account_extents(struct btrfs_trans_handle *trans)
 	struct btrfs_delayed_ref_root *delayed_refs;
 	struct btrfs_delayed_ref_root *delayed_refs;
 	struct ulist *new_roots = NULL;
 	struct ulist *new_roots = NULL;
 	struct rb_node *node;
 	struct rb_node *node;
+	u64 num_dirty_extents = 0;
 	u64 qgroup_to_skip;
 	u64 qgroup_to_skip;
 	int ret = 0;
 	int ret = 0;
 
 
@@ -2141,6 +2142,7 @@ int btrfs_qgroup_account_extents(struct btrfs_trans_handle *trans)
 		record = rb_entry(node, struct btrfs_qgroup_extent_record,
 		record = rb_entry(node, struct btrfs_qgroup_extent_record,
 				  node);
 				  node);
 
 
+		num_dirty_extents++;
 		trace_btrfs_qgroup_account_extents(fs_info, record);
 		trace_btrfs_qgroup_account_extents(fs_info, record);
 
 
 		if (!ret) {
 		if (!ret) {
@@ -2186,6 +2188,8 @@ cleanup:
 		kfree(record);
 		kfree(record);
 
 
 	}
 	}
+	trace_qgroup_num_dirty_extents(fs_info, trans->transid,
+				       num_dirty_extents);
 	return ret;
 	return ret;
 }
 }
 
 

+ 21 - 0
include/trace/events/btrfs.h

@@ -1576,6 +1576,27 @@ DEFINE_EVENT(btrfs_qgroup_extent, btrfs_qgroup_trace_extent,
 	TP_ARGS(fs_info, rec)
 	TP_ARGS(fs_info, rec)
 );
 );
 
 
+TRACE_EVENT(qgroup_num_dirty_extents,
+
+	TP_PROTO(const struct btrfs_fs_info *fs_info, u64 transid,
+		 u64 num_dirty_extents),
+
+	TP_ARGS(fs_info, transid, num_dirty_extents),
+
+	TP_STRUCT__entry_btrfs(
+		__field(	u64, transid			)
+		__field(	u64, num_dirty_extents		)
+	),
+
+	TP_fast_assign_btrfs(fs_info,
+		__entry->transid	   = transid;
+		__entry->num_dirty_extents = num_dirty_extents;
+	),
+
+	TP_printk_btrfs("transid=%llu num_dirty_extents=%llu",
+		__entry->transid, __entry->num_dirty_extents)
+);
+
 TRACE_EVENT(btrfs_qgroup_account_extent,
 TRACE_EVENT(btrfs_qgroup_account_extent,
 
 
 	TP_PROTO(const struct btrfs_fs_info *fs_info, u64 transid, u64 bytenr,
 	TP_PROTO(const struct btrfs_fs_info *fs_info, u64 transid, u64 bytenr,