mbox series

[v3,0/2] btrfs: trace: Trace events for btrfs tree locking

Message ID 20190415131525.20274-1-wqu@suse.com (mailing list archive)
Headers show
Series btrfs: trace: Trace events for btrfs tree locking | expand

Message

Qu Wenruo April 15, 2019, 1:15 p.m. UTC
This branch can be fetched from github:
https://github.com/adam900710/linux/tree/trace_locking
Which is based on v5.1-rc4 tag.

This patchset will introduce the following trace events for corresponding
functions:
  btrfs_tree_lock			(sleepable)
  btrfs_tree_unlock
  btrfs_tree_read_lock			(sleepable)
  btrfs_tree_read_unlock
  btrfs_tree_read_unlock_blocking
  btrfs_set_lock_blocking_read
  btrfs_set_lock_blocking_write
  btrfs_clear_lock_blocking_read
  btrfs_clear_lock_blocking_write
  btrfs_try_tree_read_lock
  btrfs_try_tree_write_lock
  btrfs_tree_read_lock_atomic

The two sleepable ones will have extra info like start_ns, end_ns,
diff_ns.
Those two can be specially useful for tree lock wait time.
There is tool to utilize those two events already:
https://github.com/adam900710/btrfs-profiler/blob/master/tree_lock_wait.py

The non-sleepable can be useful for possible user space based lock
leakage/dead lock detector.

Changelog:
v2:
- Hide all ktime_get_ns() call out of trace events
  So there will be no overhead if trace events are not enabled.

v3:
- More output for human to take a glance
- More trace events for later bcc usage
  Like lock leakage and deadlock detection.

Qu Wenruo (2):
  btrfs: trace: Introduce trace events for sleepable tree lock
  btrfs: trace: Introduce trace events for all btrfs tree locking events

 fs/btrfs/locking.c           | 22 +++++++++
 include/trace/events/btrfs.h | 86 ++++++++++++++++++++++++++++++++++++
 2 files changed, 108 insertions(+)

Comments

David Sterba April 15, 2019, 2:28 p.m. UTC | #1
On Mon, Apr 15, 2019 at 09:15:23PM +0800, Qu Wenruo wrote:
> This branch can be fetched from github:
> https://github.com/adam900710/linux/tree/trace_locking
> Which is based on v5.1-rc4 tag.
> 
> This patchset will introduce the following trace events for corresponding
> functions:
>   btrfs_tree_lock			(sleepable)
>   btrfs_tree_unlock
>   btrfs_tree_read_lock			(sleepable)
>   btrfs_tree_read_unlock
>   btrfs_tree_read_unlock_blocking
>   btrfs_set_lock_blocking_read
>   btrfs_set_lock_blocking_write
>   btrfs_clear_lock_blocking_read
>   btrfs_clear_lock_blocking_write
>   btrfs_try_tree_read_lock
>   btrfs_try_tree_write_lock
>   btrfs_tree_read_lock_atomic
> 
> The two sleepable ones will have extra info like start_ns, end_ns,
> diff_ns.
> Those two can be specially useful for tree lock wait time.
> There is tool to utilize those two events already:
> https://github.com/adam900710/btrfs-profiler/blob/master/tree_lock_wait.py
> 
> The non-sleepable can be useful for possible user space based lock
> leakage/dead lock detector.
> 
> Changelog:
> v2:
> - Hide all ktime_get_ns() call out of trace events
>   So there will be no overhead if trace events are not enabled.
> 
> v3:
> - More output for human to take a glance
> - More trace events for later bcc usage
>   Like lock leakage and deadlock detection.

V3 looks good to me, thanks. The enhanced output of the sleepable lock
is still sane.