Thread (86 messages) 86 messages, 3 authors, 2021-06-03

Re: [PATCH 20/39] xfs: pass lv chain length into xlog_write()

From: "Darrick J. Wong" <djwong@kernel.org>
Date: 2021-06-02 22:24:28

On Thu, Jun 03, 2021 at 08:18:52AM +1000, Dave Chinner wrote:
On Thu, May 27, 2021 at 10:20:27AM -0700, Darrick J. Wong wrote:
quoted
On Wed, May 19, 2021 at 10:12:58PM +1000, Dave Chinner wrote:
quoted
From: Dave Chinner <redacted>

The caller of xlog_write() usually has a close accounting of the
aggregated vector length contained in the log vector chain passed to
xlog_write(). There is no need to iterate the chain to calculate he
length of the data in xlog_write_calculate_len() if the caller is
already iterating that chain to build it.

Passing in the vector length avoids doing an extra chain iteration,
which can be a significant amount of work given that large CIL
commits can have hundreds of thousands of vectors attached to the
chain.

Signed-off-by: Dave Chinner <redacted>
....
quoted
quoted
@@ -849,6 +850,10 @@ xlog_cil_push_work(
 		lv = item->li_lv;
 		item->li_lv = NULL;
 		num_iovecs += lv->lv_niovecs;
+
+		/* we don't write ordered log vectors */
+		if (lv->lv_buf_len != XFS_LOG_VEC_ORDERED)
+			num_bytes += lv->lv_bytes;
 	}
 
 	/*
@@ -887,6 +892,8 @@ xlog_cil_push_work(
 	 * transaction header here as it is not accounted for in xlog_write().
 	 */
 	xlog_cil_build_trans_hdr(ctx, &thdr, &lvhdr, num_iovecs);
+	num_iovecs += lvhdr.lv_niovecs;
I have the same question that Brian had last time, which is: What's the
point of updating num_iovecs here?  It's not used after
xlog_cil_build_trans_hdr, either here or at the end of the patchset.

Is the idea that num_{iovecs,bytes} will always reflect everything
in the cil context chain that's about to be passed to xlog_write?
I left it there because I did want to keep the two variables up to
date for future use. i.e. I didn't want to leave a landmine later
down the track if I need to use num_iovecs in future changes. I've
also used it a few times for temporary debugging code, so I'd
prefer to keep it even though it isn't used.

But if "not used" is the only reason for people not giving rvbs,
then I can remove it...
...or feed it to a tracepoint, if you find it useful for debugging the
size of log writes?  <shrug>

--D
Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help