From: Dave Chinner <david@fromorbit.com>
To: "Darrick J. Wong" <djwong@kernel.org>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH 38/45] xfs: convert CIL busy extents to per-cpu
Date: Fri, 12 Mar 2021 12:15:39 +1100 [thread overview]
Message-ID: <20210312011539.GH63242@dread.disaster.area> (raw)
In-Reply-To: <20210311003601.GL3419940@magnolia>
On Wed, Mar 10, 2021 at 04:36:01PM -0800, Darrick J. Wong wrote:
> On Fri, Mar 05, 2021 at 04:11:36PM +1100, Dave Chinner wrote:
> > From: Dave Chinner <dchinner@redhat.com>
> >
> > To get them out from under the CIL lock.
> >
> > This is an unordered list, so we can simply punt it to per-cpu lists
> > during transaction commits and reaggregate it back into a single
> > list during the CIL push work.
> >
> > Signed-off-by: Dave Chinner <dchinner@redhat.com>
> > ---
> > fs/xfs/xfs_log_cil.c | 26 ++++++++++++++++++--------
> > 1 file changed, 18 insertions(+), 8 deletions(-)
> >
> > diff --git a/fs/xfs/xfs_log_cil.c b/fs/xfs/xfs_log_cil.c
> > index a2f93bd7644b..7428b98c8279 100644
> > --- a/fs/xfs/xfs_log_cil.c
> > +++ b/fs/xfs/xfs_log_cil.c
> > @@ -501,6 +501,9 @@ xlog_cil_insert_items(
> > atomic_add(cilpcp->space_used, &ctx->space_used);
> > cilpcp->space_used = 0;
> > }
> > + /* attach the transaction to the CIL if it has any busy extents */
> > + if (!list_empty(&tp->t_busy))
> > + list_splice_init(&tp->t_busy, &cilpcp->busy_extents);
> > put_cpu_ptr(cilpcp);
> >
> > /*
> > @@ -540,9 +543,6 @@ 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)
> > @@ -802,7 +802,10 @@ xlog_cil_push_work(
> > ctx->ticket->t_curr_res += cilpcp->space_reserved;
> > cilpcp->space_used = 0;
> > cilpcp->space_reserved = 0;
> > -
> > + if (!list_empty(&cilpcp->busy_extents)) {
> > + list_splice_init(&cilpcp->busy_extents,
> > + &ctx->busy_extents);
> > + }
> > }
> >
> > spin_lock(&cil->xc_push_lock);
> > @@ -1459,17 +1462,24 @@ static void __percpu *
> > xlog_cil_pcp_alloc(
> > struct xfs_cil *cil)
> > {
> > + void __percpu *pcptr;
> > struct xlog_cil_pcp *cilpcp;
> > + int cpu;
> >
> > - cilpcp = alloc_percpu(struct xlog_cil_pcp);
> > - if (!cilpcp)
> > + pcptr = alloc_percpu(struct xlog_cil_pcp);
> > + if (!pcptr)
> > return NULL;
> >
> > + for_each_possible_cpu(cpu) {
> > + cilpcp = per_cpu_ptr(pcptr, cpu);
>
> So... in my mind, "cilpcp" and "pcptr" aren't really all that distinct
> from each other. I /think/ you're trying to use "cilpcp" everywhere
> else to mean "pointer to a particular CPU's CIL data", and this change
> makes that usage consistent in the alloc function.
Yeah, it's had to have short, concise, distinct names here because
the generic pointer returned is a pointer to per cpu memory that
contains CIL specific per-cpu structures...
> However, this leaves xlog_cil_pcp_free using "cilpcp" to refer to the
> entire chunk of per-CPU data structures.
I'll fix that, I obviously missed that when trying to clean this up
to be consistent...
> Given that the first refers to
> a specific structure and the second refers to them all in aggregate,
> maybe _pcp_alloc and _pcp_free should use a name that at least sounds
> plural?
>
> e.g.
>
> void __percpu *all_cilpcps = alloc_percpu(...);
>
> for_each_possible_cpu(cpu) {
> cilpcp = per_cpu_ptr(all_cilpcps, cpu);
> cilpcp->magicval = 7777;
> }
The problem with "all" is that it implies a "global" all, not
something that is owned by this specific CIL instance. i.e. there
will be a per-cpu CIL area for every filesystem that is mounted, and
they are actually all linked together into a global list for CPU
hotplug to walk. So "all" CIL pcps to me means walking this list:
static LIST_HEAD(xlog_cil_pcp_list);
static DEFINE_SPINLOCK(xlog_cil_pcp_lock);
which is linked by the cil->xc_pcp_list list heads in each CIL
instance so that CPU hotplug can do the right thing.
"pcp" is typical shorthand for a "per cpu pointer" but it's
horrible when we have pointers to per-cpu lists, lists of per-cpu
aware structures, pointers to per-cpu regions, pointers to per-cpu
data (structures) within per-cpu regions, etc.
There is no way to win here, it's going to be confusing whatever we
do. I've tried to keep it simple:
pcptr - generic pointer to allocated per CPU region
cil->xc_pcp - CIL instance pointer to allocated percpu region
cil->xc_pcp_list - global list for CPU hotplug pcp management
cilpcp - pointer to specfic CPU instance of the CIL
percpu data inside cil->xc_pcp region.
I might just change the generic (void percpu *) regions to "pcp" so
that they align with all the other uses of "pcp" in the naming.
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
next prev parent reply other threads:[~2021-03-12 1:16 UTC|newest]
Thread overview: 145+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-05 5:10 [PATCH 00/45 v3] xfs: consolidated log and optimisation changes Dave Chinner
2021-03-05 5:10 ` [PATCH 01/45] xfs: initialise attr fork on inode create Dave Chinner
2021-03-08 22:20 ` Darrick J. Wong
2021-03-16 8:35 ` Christoph Hellwig
2021-03-05 5:11 ` [PATCH 02/45] xfs: log stripe roundoff is a property of the log Dave Chinner
2021-03-05 5:11 ` [PATCH 03/45] xfs: separate CIL commit record IO Dave Chinner
2021-03-08 8:34 ` Chandan Babu R
2021-03-15 14:40 ` Brian Foster
2021-03-16 8:40 ` Christoph Hellwig
2021-03-05 5:11 ` [PATCH 04/45] xfs: remove xfs_blkdev_issue_flush Dave Chinner
2021-03-08 9:31 ` Chandan Babu R
2021-03-08 22:21 ` Darrick J. Wong
2021-03-15 14:40 ` Brian Foster
2021-03-16 8:41 ` Christoph Hellwig
2021-03-05 5:11 ` [PATCH 05/45] xfs: async blkdev cache flush Dave Chinner
2021-03-08 9:48 ` Chandan Babu R
2021-03-08 22:24 ` Darrick J. Wong
2021-03-15 14:41 ` Brian Foster
2021-03-15 16:32 ` Darrick J. Wong
2021-03-16 8:43 ` Christoph Hellwig
2021-03-08 22:26 ` Darrick J. Wong
2021-03-15 14:42 ` Brian Foster
2021-03-05 5:11 ` [PATCH 06/45] xfs: CIL checkpoint flushes caches unconditionally Dave Chinner
2021-03-15 14:43 ` Brian Foster
2021-03-16 8:47 ` Christoph Hellwig
2021-03-05 5:11 ` [PATCH 07/45] xfs: remove need_start_rec parameter from xlog_write() Dave Chinner
2021-03-15 14:45 ` Brian Foster
2021-03-16 14:15 ` Christoph Hellwig
2021-03-05 5:11 ` [PATCH 08/45] xfs: journal IO cache flush reductions Dave Chinner
2021-03-08 10:49 ` Chandan Babu R
2021-03-08 12:25 ` Brian Foster
2021-03-09 1:13 ` Dave Chinner
2021-03-10 20:49 ` Brian Foster
2021-03-10 21:28 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 09/45] xfs: Fix CIL throttle hang when CIL space used going backwards Dave Chinner
2021-03-05 5:11 ` [PATCH 10/45] xfs: reduce buffer log item shadow allocations Dave Chinner
2021-03-15 14:52 ` Brian Foster
2021-03-05 5:11 ` [PATCH 11/45] xfs: xfs_buf_item_size_segment() needs to pass segment offset Dave Chinner
2021-03-05 5:11 ` [PATCH 12/45] xfs: optimise xfs_buf_item_size/format for contiguous regions Dave Chinner
2021-03-05 5:11 ` [PATCH 13/45] xfs: xfs_log_force_lsn isn't passed a LSN Dave Chinner
2021-03-08 22:53 ` Darrick J. Wong
2021-03-11 0:26 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 14/45] xfs: AIL needs asynchronous CIL forcing Dave Chinner
2021-03-08 23:45 ` Darrick J. Wong
2021-03-05 5:11 ` [PATCH 15/45] xfs: CIL work is serialised, not pipelined Dave Chinner
2021-03-08 23:14 ` Darrick J. Wong
2021-03-08 23:38 ` Dave Chinner
2021-03-09 1:55 ` Darrick J. Wong
2021-03-09 22:35 ` Andi Kleen
2021-03-10 6:11 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 16/45] xfs: type verification is expensive Dave Chinner
2021-03-05 5:11 ` [PATCH 17/45] xfs: No need for inode number error injection in __xfs_dir3_data_check Dave Chinner
2021-03-05 5:11 ` [PATCH 18/45] xfs: reduce debug overhead of dir leaf/node checks Dave Chinner
2021-03-05 5:11 ` [PATCH 19/45] xfs: factor out the CIL transaction header building Dave Chinner
2021-03-08 23:47 ` Darrick J. Wong
2021-03-16 14:50 ` Brian Foster
2021-03-05 5:11 ` [PATCH 20/45] xfs: only CIL pushes require a start record Dave Chinner
2021-03-09 0:07 ` Darrick J. Wong
2021-03-16 14:51 ` Brian Foster
2021-03-05 5:11 ` [PATCH 21/45] xfs: embed the xlog_op_header in the unmount record Dave Chinner
2021-03-09 0:15 ` Darrick J. Wong
2021-03-11 2:54 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 22/45] xfs: embed the xlog_op_header in the commit record Dave Chinner
2021-03-09 0:17 ` Darrick J. Wong
2021-03-05 5:11 ` [PATCH 23/45] xfs: log tickets don't need log client id Dave Chinner
2021-03-09 0:21 ` Darrick J. Wong
2021-03-09 1:19 ` Dave Chinner
2021-03-09 1:48 ` Darrick J. Wong
2021-03-11 3:01 ` Dave Chinner
2021-03-16 14:51 ` Brian Foster
2021-03-05 5:11 ` [PATCH 24/45] xfs: move log iovec alignment to preparation function Dave Chinner
2021-03-09 2:14 ` Darrick J. Wong
2021-03-16 14:51 ` Brian Foster
2021-03-05 5:11 ` [PATCH 25/45] xfs: reserve space and initialise xlog_op_header in item formatting Dave Chinner
2021-03-09 2:21 ` Darrick J. Wong
2021-03-11 3:29 ` Dave Chinner
2021-03-11 3:41 ` Darrick J. Wong
2021-03-16 14:54 ` Brian Foster
2021-03-16 14:53 ` Brian Foster
2021-05-19 3:18 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 26/45] xfs: log ticket region debug is largely useless Dave Chinner
2021-03-09 2:31 ` Darrick J. Wong
2021-03-16 14:55 ` Brian Foster
2021-05-19 3:27 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 27/45] xfs: pass lv chain length into xlog_write() Dave Chinner
2021-03-09 2:36 ` Darrick J. Wong
2021-03-11 3:37 ` Dave Chinner
2021-03-16 18:38 ` Brian Foster
2021-03-05 5:11 ` [PATCH 28/45] xfs: introduce xlog_write_single() Dave Chinner
2021-03-09 2:39 ` Darrick J. Wong
2021-03-11 4:19 ` Dave Chinner
2021-03-16 18:39 ` Brian Foster
2021-05-19 3:44 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 29/45] xfs:_introduce xlog_write_partial() Dave Chinner
2021-03-09 2:59 ` Darrick J. Wong
2021-03-11 4:33 ` Dave Chinner
2021-03-18 13:22 ` Brian Foster
2021-05-19 4:49 ` Dave Chinner
2021-05-20 12:33 ` Brian Foster
2021-05-27 18:03 ` Darrick J. Wong
2021-03-05 5:11 ` [PATCH 30/45] xfs: xlog_write() no longer needs contwr state Dave Chinner
2021-03-09 3:01 ` Darrick J. Wong
2021-03-05 5:11 ` [PATCH 31/45] xfs: CIL context doesn't need to count iovecs Dave Chinner
2021-03-09 3:16 ` Darrick J. Wong
2021-03-11 5:03 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 32/45] xfs: use the CIL space used counter for emptiness checks Dave Chinner
2021-03-10 23:01 ` Darrick J. Wong
2021-03-05 5:11 ` [PATCH 33/45] xfs: lift init CIL reservation out of xc_cil_lock Dave Chinner
2021-03-10 23:25 ` Darrick J. Wong
2021-03-11 5:42 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 34/45] xfs: rework per-iclog header CIL reservation Dave Chinner
2021-03-11 0:03 ` Darrick J. Wong
2021-03-11 6:03 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 35/45] xfs: introduce per-cpu CIL tracking sructure Dave Chinner
2021-03-11 0:11 ` Darrick J. Wong
2021-03-11 6:33 ` Dave Chinner
2021-03-11 6:42 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 36/45] xfs: implement percpu cil space used calculation Dave Chinner
2021-03-11 0:20 ` Darrick J. Wong
2021-03-11 6:51 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 37/45] xfs: track CIL ticket reservation in percpu structure Dave Chinner
2021-03-11 0:26 ` Darrick J. Wong
2021-03-12 0:47 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 38/45] xfs: convert CIL busy extents to per-cpu Dave Chinner
2021-03-11 0:36 ` Darrick J. Wong
2021-03-12 1:15 ` Dave Chinner [this message]
2021-03-05 5:11 ` [PATCH 39/45] xfs: Add order IDs to log items in CIL Dave Chinner
2021-03-11 1:00 ` Darrick J. Wong
2021-03-05 5:11 ` [PATCH 40/45] xfs: convert CIL to unordered per cpu lists Dave Chinner
2021-03-11 1:15 ` Darrick J. Wong
2021-03-12 2:18 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 41/45] xfs: move CIL ordering to the logvec chain Dave Chinner
2021-03-11 1:34 ` Darrick J. Wong
2021-03-12 2:29 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 42/45] xfs: __percpu_counter_compare() inode count debug too expensive Dave Chinner
2021-03-11 1:36 ` Darrick J. Wong
2021-03-05 5:11 ` [PATCH 43/45] xfs: avoid cil push lock if possible Dave Chinner
2021-03-11 1:47 ` Darrick J. Wong
2021-03-12 2:36 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 44/45] xfs: xlog_sync() manually adjusts grant head space Dave Chinner
2021-03-11 2:00 ` Darrick J. Wong
2021-03-16 3:04 ` Dave Chinner
2021-03-05 5:11 ` [PATCH 45/45] xfs: expanding delayed logging design with background material Dave Chinner
2021-03-11 2:30 ` Darrick J. Wong
2021-03-16 3:28 ` 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=20210312011539.GH63242@dread.disaster.area \
--to=david@fromorbit.com \
--cc=djwong@kernel.org \
--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