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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox