From: Christoph Hellwig <hch@infradead.org>
To: Dave Chinner <david@fromorbit.com>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH 1/8] xfs: AIL doesn't need manual pushing
Date: Sun, 10 Jul 2022 23:02:24 -0700 [thread overview]
Message-ID: <Ysu88PpxIRs0An3W@infradead.org> (raw)
In-Reply-To: <20220708015558.1134330-2-david@fromorbit.com>
This looks very nice, but a bunch of minor comments:
> This is silly and expensive. The AIL is perfectly capable of
> calculating the push target itself, and it will always be running
> when the AIL contains objects.
>
> Modify the AIL to calculate it's 25% push target before it starts a
> push using the same reserve grant head based calculation as is
> currently used, and remove all the places where we ask the AIL to
> push to a new 25% free target.
>
I suspect some of these "the AIL" to xfsaild or te AIL pusher for
the sentences to make sense.
> +#include "xfs_trans_priv.h"
> +#include "xfs_log_priv.h"
> - threshold_lsn = xlog_grant_push_threshold(log, 0);
> + threshold_lsn = xfs_ail_push_target(log->l_ailp);
Should xfs_ail_push_target go into xfs_log.h instead of xfs_log_priv.h?
> +int xlog_space_left(struct xlog *log, atomic64_t *head);
Nit: odd formatting with the tab before the *log.
> +xfs_lsn_t
> +__xfs_ail_push_target(
> + struct xfs_ail *ailp)
> +{
> + struct xlog *log = ailp->ail_log;
> + xfs_lsn_t threshold_lsn = 0;
> + xfs_lsn_t last_sync_lsn;
> + int free_blocks;
> + int free_bytes;
> + int threshold_block;
> + int threshold_cycle;
> + int free_threshold;
This culd use a:
lockdep_assert_held(&ailp->ail_lock);
to document the locking assumptions.
> + free_bytes = xlog_space_left(log, &log->l_reserve_head.grant);
> + free_blocks = BTOBBT(free_bytes);
> +
> + /*
> + * Set the threshold for the minimum number of free blocks in the
> + * log to the maximum of what the caller needs, one quarter of the
> + * log, and 256 blocks.
> + */
> + free_threshold = log->l_logBBsize >> 2;
> + if (free_blocks >= free_threshold)
Nit: free_block is only used once, so there might not be much in a point
in keeping it as a logcal variable.
> +static inline void xfs_ail_push(struct xfs_ail *ailp)
> +{
> + wake_up_process(ailp->ail_task);
> +}
> +
> +static inline void xfs_ail_push_all(struct xfs_ail *ailp)
> +{
> + if (!test_and_set_bit(XFS_AIL_OPSTATE_PUSH_ALL, &ailp->ail_opstate))
> + xfs_ail_push(ailp);
> +}
> +
> +xfs_lsn_t __xfs_ail_push_target(struct xfs_ail *ailp);
> +static inline xfs_lsn_t xfs_ail_push_target(struct xfs_ail *ailp)
> +{
> + xfs_lsn_t lsn;
> +
> + spin_lock(&ailp->ail_lock);
> + lsn = __xfs_ail_push_target(ailp);
> + spin_unlock(&ailp->ail_lock);
> + return lsn;
> +}
Is there really any point in micro-optimizing these as inlines in
a header?
next prev parent reply other threads:[~2022-07-11 6:02 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-08 1:55 [RFC] [PATCH 0/8] xfs: byte-base grant head reservation tracking Dave Chinner
2022-07-08 1:55 ` [PATCH 1/8] xfs: AIL doesn't need manual pushing Dave Chinner
2022-07-08 7:23 ` kernel test robot
2022-07-11 6:02 ` Christoph Hellwig [this message]
2022-07-11 23:40 ` Dave Chinner
2022-07-08 1:55 ` [PATCH 2/8] xfs: AIL targets log space, not grant space Dave Chinner
2022-07-11 6:04 ` Christoph Hellwig
2022-07-08 1:55 ` [PATCH 3/8] xfs: ensure log tail is always up to date Dave Chinner
2022-07-11 6:07 ` Christoph Hellwig
2022-07-11 23:42 ` Dave Chinner
2022-07-08 1:55 ` [PATCH 4/8] xfs: l_last_sync_lsn is really tracking AIL state Dave Chinner
2022-07-11 6:42 ` Christoph Hellwig
2022-07-11 23:47 ` Dave Chinner
2022-07-20 1:18 ` Dave Chinner
2022-07-08 1:55 ` [PATCH 5/8] xfs: track log space pinned by the AIL Dave Chinner
2022-07-11 6:54 ` Christoph Hellwig
2022-07-11 23:53 ` Dave Chinner
2022-07-08 1:55 ` [PATCH 6/8] xfs: pass the full grant head to accounting functions Dave Chinner
2022-07-08 1:55 ` [PATCH 7/8] xfs: move and xfs_trans_committed_bulk Dave Chinner
2022-07-08 7:54 ` kernel test robot
2022-07-08 9:15 ` kernel test robot
2022-07-11 6:12 ` Christoph Hellwig
2022-07-11 23:54 ` Dave Chinner
2022-07-08 1:55 ` [PATCH 8/8] xfs: grant heads track byte counts, not LSNs Dave Chinner
2022-07-11 6:59 ` Christoph Hellwig
2022-07-11 23:59 ` Dave Chinner
2022-07-12 8:28 ` [xfs] 65cf4eb83e: xfstests.xfs.011.fail kernel test robot
2022-07-12 22:24 ` 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=Ysu88PpxIRs0An3W@infradead.org \
--to=hch@infradead.org \
--cc=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