public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Dave Chinner <david@fromorbit.com>
To: linux-xfs@vger.kernel.org
Subject: [PATCH 02/14] xfs: lift init CIL reservation out of xc_cil_lock
Date: Wed, 15 Jun 2022 17:53:18 +1000	[thread overview]
Message-ID: <20220615075330.3651541-3-david@fromorbit.com> (raw)
In-Reply-To: <20220615075330.3651541-1-david@fromorbit.com>

From: Dave Chinner <dchinner@redhat.com>

The xc_cil_lock is the most highly contended lock in XFS now. To
start the process of getting rid of it, lift the initial reservation
of the CIL log space out from under the xc_cil_lock.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
---
 fs/xfs/xfs_log_cil.c | 30 ++++++++++++++----------------
 1 file changed, 14 insertions(+), 16 deletions(-)

diff --git a/fs/xfs/xfs_log_cil.c b/fs/xfs/xfs_log_cil.c
index 36c0ce77d41b..8a83d901e465 100644
--- a/fs/xfs/xfs_log_cil.c
+++ b/fs/xfs/xfs_log_cil.c
@@ -462,23 +462,19 @@ xlog_cil_insert_items(
 	 */
 	xlog_cil_insert_format_items(log, tp, &len);
 
-	spin_lock(&cil->xc_cil_lock);
-
-	/* attach the transaction to the CIL if it has any busy extents */
-	if (!list_empty(&tp->t_busy))
-		list_splice_init(&tp->t_busy, &ctx->busy_extents);
-
 	/*
 	 * We need to take the CIL checkpoint unit reservation on the first
 	 * commit into the CIL. Test the XLOG_CIL_EMPTY bit first so we don't
-	 * unnecessarily do an atomic op in the fast path here.
+	 * unnecessarily do an atomic op in the fast path here. We don't need to
+	 * hold the xc_cil_lock here to clear the XLOG_CIL_EMPTY bit as we are
+	 * under the xc_ctx_lock here and that needs to be held exclusively to
+	 * reset the XLOG_CIL_EMPTY bit.
 	 */
 	if (test_bit(XLOG_CIL_EMPTY, &cil->xc_flags) &&
-	    test_and_clear_bit(XLOG_CIL_EMPTY, &cil->xc_flags)) {
+	    test_and_clear_bit(XLOG_CIL_EMPTY, &cil->xc_flags))
 		ctx_res = ctx->ticket->t_unit_res;
-		ctx->ticket->t_curr_res = ctx_res;
-		tp->t_ticket->t_curr_res -= ctx_res;
-	}
+
+	spin_lock(&cil->xc_cil_lock);
 
 	/* do we need space for more log record headers? */
 	iclog_space = log->l_iclog_size - log->l_iclog_hsize;
@@ -488,13 +484,12 @@ xlog_cil_insert_items(
 		/* need to take into account split region headers, too */
 		split_res *= log->l_iclog_hsize + sizeof(struct xlog_op_header);
 		ctx->ticket->t_unit_res += split_res;
-		ctx->ticket->t_curr_res += split_res;
-		tp->t_ticket->t_curr_res -= split_res;
-		ASSERT(tp->t_ticket->t_curr_res >= len);
 	}
-	tp->t_ticket->t_curr_res -= len;
-	tp->t_ticket->t_curr_res += released_space;
+	tp->t_ticket->t_curr_res -= split_res + ctx_res + len;
+	ctx->ticket->t_curr_res += split_res + ctx_res;
 	ctx->space_used += len;
+
+	tp->t_ticket->t_curr_res += released_space;
 	ctx->space_used -= released_space;
 
 	/*
@@ -532,6 +527,9 @@ xlog_cil_insert_items(
 			list_move_tail(&lip->li_cil, &cil->xc_cil);
 	}
 
+	/* attach the transaction to the CIL if it has any busy extents */
+	if (!list_empty(&tp->t_busy))
+		list_splice_init(&tp->t_busy, &ctx->busy_extents);
 	spin_unlock(&cil->xc_cil_lock);
 
 	if (tp->t_ticket->t_curr_res < 0)
-- 
2.35.1


  parent reply	other threads:[~2022-06-15  7:53 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-15  7:53 [PATCH 00/14 v8] xfs: improve CIL scalability Dave Chinner
2022-06-15  7:53 ` [PATCH 01/14] xfs: use the CIL space used counter for emptiness checks Dave Chinner
2022-06-15  7:53 ` Dave Chinner [this message]
2022-06-15  7:53 ` [PATCH 03/14] xfs: rework per-iclog header CIL reservation Dave Chinner
2022-06-15  7:53 ` [PATCH 04/14] xfs: introduce per-cpu CIL tracking structure Dave Chinner
2022-06-15  7:53 ` [PATCH 05/14] xfs: implement percpu cil space used calculation Dave Chinner
2022-06-28 20:01   ` Darrick J. Wong
2022-06-28 23:52     ` Dave Chinner
2022-06-15  7:53 ` [PATCH 06/14] xfs: track CIL ticket reservation in percpu structure Dave Chinner
2022-06-15  7:53 ` [PATCH 07/14] xfs: convert CIL busy extents to per-cpu Dave Chinner
2022-06-15  7:53 ` [PATCH 08/14] xfs: Add order IDs to log items in CIL Dave Chinner
2022-06-15  7:53 ` [PATCH 09/14] xfs: convert CIL to unordered per cpu lists Dave Chinner
2022-06-15  7:53 ` [PATCH 10/14] xfs: convert log vector chain to use list heads Dave Chinner
2022-06-15  7:53 ` [PATCH 11/14] xfs: move CIL ordering to the logvec chain Dave Chinner
2022-06-15  7:53 ` [PATCH 12/14] xfs: avoid cil push lock if possible Dave Chinner
2022-06-15  7:53 ` [PATCH 13/14] xfs: xlog_sync() manually adjusts grant head space Dave Chinner
2022-06-15  7:53 ` [PATCH 14/14] xfs: expanding delayed logging design with background material Dave Chinner
  -- strict thread matches above, loose matches on Subject: below --
2021-11-09  1:52 [PATCH 00/14 v6] xfs: improve CIL scalability Dave Chinner
2021-11-09  1:52 ` [PATCH 02/14] xfs: lift init CIL reservation out of xc_cil_lock Dave Chinner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220615075330.3651541-3-david@fromorbit.com \
    --to=david@fromorbit.com \
    --cc=linux-xfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox