Re: [PATCH 42/45] xfs: __percpu_counter_compare() inode count debug too expensive

Darrick J. Wong
2021-03-11T01:37:48Z

On Fri, Mar 05, 2021 at 04:11:40PM +1100, Dave Chinner wrote:
> From: Dave Chinner <dchinner@redhat.com>
>
> - 21.92% __xfs_trans_commit
> - 21.62% xfs_log_commit_cil
> - 11.69% xfs_trans_unreserve_and_mod_sb
> - 11.58% __percpu_counter_compare
> - 11.45% __percpu_counter_sum
> - 10.29% _raw_spin_lock_irqsave
> - 10.28% do_raw_spin_lock
> __pv_queued_spin_lock_slowpath
>
> We debated just getting rid of it last time this came up and
> there was no real objection to removing it. Now it's the biggest
> scalability limitation for debug kernels even on smallish machines,
> so let's just get rid of it.
>
> Signed-off-by: Dave Chinner <dchinner@redhat.com>

Reviewed-by: Darrick J. Wong <djwong@kernel.org>

...unless you want a CONFIG_XFS_DEBUG_SLOW to hide these things behind?

--D

> ---
> fs/xfs/xfs_trans.c | 11 ++---------
> 1 file changed, 2 insertions(+), 9 deletions(-)
>
> diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c
> index b20e68279808..637d084c8aa8 100644
> --- a/fs/xfs/xfs_trans.c
> +++ b/fs/xfs/xfs_trans.c
> @@ -616,19 +616,12 @@ xfs_trans_unreserve_and_mod_sb(
> ASSERT(!error);
> }
>
> - if (idelta) {
> + if (idelta)
> percpu_counter_add_batch(&mp->m_icount, idelta,
> XFS_ICOUNT_BATCH);
> - if (idelta < 0)
> - ASSERT(__percpu_counter_compare(&mp->m_icount, 0,
> - XFS_ICOUNT_BATCH) >= 0);
> - }
>
> - if (ifreedelta) {
> + if (ifreedelta)
> percpu_counter_add(&mp->m_ifree, ifreedelta);
> - if (ifreedelta < 0)
> - ASSERT(percpu_counter_compare(&mp->m_ifree, 0) >= 0);
> - }
>
> if (rtxdelta == 0 && !(tp->t_flags & XFS_TRANS_SB_DIRTY))
> return;
> --
> 2.28.0
>