On 2018/10/9 上午6:41, Chris Murphy wrote:
> [chris@flap ~]$ sudo perf stat -e 'btrfs:*' -a sleep 70
> ##And then I loaded a few sites in Firefox early on in those 70 seconds.
> 
>  Performance counter stats for 'system wide':
> 
>                  5      btrfs:btrfs_transaction_commit
>                 29      btrfs:btrfs_inode_new
>                 29      btrfs:btrfs_inode_request
>                 25      btrfs:btrfs_inode_evict
>              1,602      btrfs:btrfs_get_extent
>                  0      btrfs:btrfs_handle_em_exist
>                  1      btrfs:btrfs_get_extent_show_fi_regular
>                 88      btrfs:btrfs_truncate_show_fi_regular
>                 19      btrfs:btrfs_get_extent_show_fi_inline
>                  2      btrfs:btrfs_truncate_show_fi_inline
>                189      btrfs:btrfs_ordered_extent_add
>                189      btrfs:btrfs_ordered_extent_remove
>                  9      btrfs:btrfs_ordered_extent_start
>                592      btrfs:btrfs_ordered_extent_put
>              1,207      btrfs:__extent_writepage
>              1,203      btrfs:btrfs_writepage_end_io_hook
>                 25      btrfs:btrfs_sync_file
>                  0      btrfs:btrfs_sync_fs
>                  0      btrfs:btrfs_add_block_group
>              1,508      btrfs:add_delayed_tree_ref
>              1,498      btrfs:run_delayed_tree_ref
>                379      btrfs:add_delayed_data_ref
>                336      btrfs:run_delayed_data_ref
>              1,887      btrfs:add_delayed_ref_head
>              1,839      btrfs:run_delayed_ref_head
>                  0      btrfs:btrfs_chunk_alloc
>                  0      btrfs:btrfs_chunk_free
>                794      btrfs:btrfs_cow_block
>              6,982      btrfs:btrfs_space_reservation
>                  0      btrfs:btrfs_trigger_flush
>                  0      btrfs:btrfs_flush_space
>                952      btrfs:btrfs_reserved_extent_alloc
>                  0      btrfs:btrfs_reserved_extent_free
>              1,005      btrfs:find_free_extent
>              1,005      btrfs:btrfs_reserve_extent
>                816      btrfs:btrfs_reserve_extent_cluster
>                  1      btrfs:btrfs_find_cluster
>                  0      btrfs:btrfs_failed_cluster_setup
>                  1      btrfs:btrfs_setup_cluster
>              5,952      btrfs:alloc_extent_state
>              6,034      btrfs:free_extent_state
>                374      btrfs:btrfs_work_queued
>                362      btrfs:btrfs_work_sched
>                362      btrfs:btrfs_all_work_done
>                116      btrfs:btrfs_ordered_sched
>                  0      btrfs:btrfs_workqueue_alloc
>                  0      btrfs:btrfs_workqueue_destroy
>                  0      btrfs:btrfs_qgroup_reserve_data
>                201      btrfs:btrfs_qgroup_release_data
>              1,839      btrfs:btrfs_qgroup_free_delayed_ref
>                  0      btrfs:btrfs_qgroup_account_extents
>                  0      btrfs:btrfs_qgroup_trace_extent
>                  0      btrfs:btrfs_qgroup_account_extent
>                  0      btrfs:qgroup_update_counters
>                  0      btrfs:qgroup_update_reserve
>                  0      btrfs:qgroup_meta_reserve
>                  0      btrfs:qgroup_meta_convert
>                  0      btrfs:qgroup_meta_free_all_pertrans
>                  0      btrfs:btrfs_prelim_ref_merge
>                  0      btrfs:btrfs_prelim_ref_insert
>              2,663      btrfs:btrfs_inode_mod_outstanding_extents
>                  0      btrfs:btrfs_remove_block_group
>                  0      btrfs:btrfs_add_unused_block_group
>                  0      btrfs:btrfs_skip_unused_block_group
> 
>       70.004723586 seconds time elapsed
> 
> [chris@flap ~]$
> 
> 
> Seems like a lot of activity for just a few transactions, but what
> really caught my eye here is the qgroup reporting for a file system
> that has never had qgroups enabled. Is it expected?

Indeed some of them can be avoided, as for qgroup not enabled case, such
function is really doing nothing.

In the case of btrfs_qgroup_free_delayed_ref() case, it doesn't check if
qgroup is enabled and calls btrfs_qgroup_free_refroot() under all cases,
and expect btrfs_qgroup_free_refroot() to do some check.

However btrfs_qgroup_free_refroot() doesn't do any check on if qgroup is
enabled or not.
And btrfs_qgroup_free_refroot() will just find no corresponding qgroup
and exit.

Thanks for exposing such bug,
Qu


> 
> 
> Chris Murphy
> 

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to