From: "Darrick J. Wong" <djwong@kernel.org>
To: Suyash Mahar <smahar@ucsd.edu>
Cc: linux-xfs@vger.kernel.org, tpkelly@eecs.umich.edu,
Suyash Mahar <suyash12mahar@outlook.com>
Subject: Re: XFS reflink overhead, ioctl(FICLONE)
Date: Tue, 13 Dec 2022 09:18:56 -0800 [thread overview]
Message-ID: <Y5i0ALbAdEf4yNuZ@magnolia> (raw)
In-Reply-To: <CACQnzjuhRzNruTm369wVQU3y091da2c+h+AfRED+AtA-dYqXNQ@mail.gmail.com>
[ugh, your email never made it to the list. I bet the email security
standards have been tightened again. <insert rant about dkim and dmarc
silent failures here>] :(
On Sat, Dec 10, 2022 at 09:28:36PM -0800, Suyash Mahar wrote:
> Hi all!
>
> While using XFS's ioctl(FICLONE), we found that XFS seems to have
> poor performance (ioctl takes milliseconds for sparse files) and the
> overhead
> increases with every call.
>
> For the demo, we are using an Optane DC-PMM configured as a
> block device (fsdax) and running XFS (Linux v5.18.13).
How are you using fsdax and reflink on a 5.18 kernel? That combination
of features wasn't supported until 6.0, and the data corruption problems
won't get fixed until a pull request that's about to happen for 6.2.
> We create a 1 GiB dense file, then repeatedly modify a tiny random
> fraction of it and make a clone via ioctl(FICLONE).
Yay, random cow writes, that will slowly increase the number of space
mapping records in the file metadata.
> The time required for the ioctl() calls increases from large to insane
> over the course of ~250 iterations: From roughly a millisecond for the
> first iteration or two (which seems high, given that this is on
> Optane and the code doesn't fsync or msync anywhere at all, ever) to 20
> milliseconds (which seems crazy).
Does the system call runtime increase with O(number_extents)? You might
record the number of extents in the file you're cloning by running this
periodically:
xfs_io -c stat $path | grep fsxattr.nextents
FICLONE (at least on XFS) persists dirty pagecache data to disk, and
then duplicates all written-space mapping records from the source file to
the destination file. It skips preallocated mappings created with
fallocate.
So yes, the plot is exactly what I was expecting.
--D
> The plot is attached to this email.
>
> A cursory look at the extent map suggests that it gets increasingly
> complicated resulting in the complexity.
>
> The enclosed tarball contains our code, our results, and some other info
> like a flame graph that might shed light on where the ioctl is spending
> its time.
>
> - Suyash & Terence
next parent reply other threads:[~2022-12-13 17:19 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CACQnzjuhRzNruTm369wVQU3y091da2c+h+AfRED+AtA-dYqXNQ@mail.gmail.com>
2022-12-13 17:18 ` Darrick J. Wong [this message]
2022-12-14 1:46 ` XFS reflink overhead, ioctl(FICLONE) Terence Kelly
2022-12-14 4:47 ` Suyash Mahar
2022-12-15 0:19 ` Dave Chinner
2022-12-16 1:06 ` Terence Kelly
2022-12-17 17:30 ` Mike Fleetwood
2022-12-17 18:43 ` Terence Kelly
2022-12-18 1:46 ` Dave Chinner
2022-12-18 4:47 ` Suyash Mahar
2022-12-20 3:06 ` Darrick J. Wong
2022-12-21 22:34 ` atomic file commits (was: Re: XFS reflink overhead, ioctl(FICLONE)) Terence Kelly
2022-12-18 23:40 ` XFS reflink overhead, ioctl(FICLONE) Terence Kelly
2022-12-20 2:16 ` Dave Chinner
2022-12-21 23:07 ` wish list for Santa (was: Re: XFS reflink overhead, ioctl(FICLONE)) Terence Kelly
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=Y5i0ALbAdEf4yNuZ@magnolia \
--to=djwong@kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=smahar@ucsd.edu \
--cc=suyash12mahar@outlook.com \
--cc=tpkelly@eecs.umich.edu \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.