From: "Darrick J. Wong" <djwong@kernel.org>
To: Zorro Lang <zlang@redhat.com>
Cc: Theodore Ts'o <tytso@mit.edu>,
fstests@vger.kernel.org, Eric Whitney <enwlinux@gmail.com>
Subject: Re: [PATCH] generic: add missing $FSX_AVOID to fsx invocations
Date: Tue, 8 Nov 2022 08:45:04 -0800 [thread overview]
Message-ID: <Y2qHkFxVvYlANCZc@magnolia> (raw)
In-Reply-To: <20221108155605.faqf7knxrdcdin4n@zlang-mailbox>
On Tue, Nov 08, 2022 at 11:56:05PM +0800, Zorro Lang wrote:
> On Tue, Nov 08, 2022 at 10:08:03AM -0500, Theodore Ts'o wrote:
> > On Tue, Nov 08, 2022 at 10:44:55AM +0800, Zorro Lang wrote:
> > > > If it's collapse/insert range you're specifically worried about, perhaps
> > > > its time to implement _get_file_block_size for ext4 so that
> > > > _test_congruent_file_oplen can exclude those tests that will get the
> > > > alignment wrong?
> > >
> > > Thanks Darrick, I'm thinking about this helper you wrote recently :)
> > > (The real name is _require_congruent_file_oplen in common/rc.)
> > >
> > > Hi Ted, is this helpful if you write a _ext4_get_file_block_size (refer to
> > > _xfs_get_file_block_size in common/xfs), then call it in _get_file_block_size
> > > to help _require_congruent_file_oplen to get the correct length which is an
> > > integer multiple of the file's allocation unit size ?
> >
> > Well, it's a bit more complicated than that, since there's a
> > distinction between the cluster size and block size. The cluster size
> > is the allocation unit. However, other things are done in units of
> > the block size, including how we report fiemap results, etc.
> >
> > For example, take a look at generic/206. It will try to create a file
> > system where the file system block size is the one fourth of the page
> > size --- so for x86, 1k. However, for ext4, the default cluster size
> > for 16 times the block size, so for this file system the allocation
> > unit size is 16k. If we make _get_file_block_size return 64k for all
> > files, then generic/206 will fail:
> >
> > pagesz=$(getconf PAGE_SIZE)
> > blksz=$((pagesz / 4))
> > ...
> > _scratch_mkfs_blocksized $blksz > $seqres.full 2>&1
> > ...
> > real_blksz=$(_get_file_block_size $testdir)
>
> Hmm... I'm wondering is it possible that g/206 need _get_block_size() at here?
>
> Due to from the logic of _get_file_block_size() [1], extN call _get_block_size()
> directly. So if you feel a specific _ext4_get_file_block_size() isn't suit for
> g/206, maybe it turely want _get_block_size() at here?
>
> [1]
> _get_file_block_size()
> {
> if [ -z $1 ] || [ ! -d $1 ]; then
> echo "Missing mount point argument for _get_file_block_size"
> exit 1
> fi
>
> case "$FSTYP" in
> "ocfs2")
> stat -c '%o' $1
> ;;
> "xfs")
> _xfs_get_file_block_size $1
> ;;
> *)
> _get_block_size $1
> ;;
> esac
> }
>
> > test $real_blksz != $blksz && _notrun "Failed to format with small blocksize."
> >
> > I assume this works for xfs because only files in the real-time block
> > size will have a larger allocation unit size, but the root directory
> > has a allocation unit size of the "real" block size?
> >
> > I suppose I could make a hypothetical _ext4_get_file_block_size lie
> > and return the "real" block size when it's called on the mount point,
> > but that seems kinda of gross, and it's also a lie, since the
> > allocation unit size for the root directory actually is the cluster
> > size, not the block size.
> >
> > If I were going to be doing things from scratch, I'd make a
> > distinction between _get_file_allocation_size and
> > _get_file_system_block_size, which would be a lot *clearer* about what
>
> Currently _get_block_size is more like _get_file_system_block_size, and
> _get_file_block_size is more like _get_file_allocation_size. Actually
> I'm confused about these two names before :)
Yes, both statements are correct. They're both crappily named, one of
them by me. :(
> > is going on. Even then, I could imagine some tests getting confused
> > with how, say, fiemap behaves with an ext4 file system with a 4k block
> > size and a 64k allocation unit size, so I'm not sure it's a complete
> > solution. And doing this now would require quite a bit of code churn
> > in xfstests.
Yes, it has been, uh, fun to fix fstests so that xfs realtime with a 28k
allocation unit doesn't spray false failures everywhere. I'm mostly
done now, I hope? ;)
(Or at least I haven't heard any complaints from Leah in a solid 2
months...)
> > > If this's helpful for your first concern [1], please tell me. Then we can talk
> > > about your second concern [2], if it's still your main concern now :)
> > >
> > > "This might *[1]* either be because the test didn't know about ext4
> > > bigalloc's cluster alignment requirements, *[2]* or because a particular
> > > operation might just be *buggy* and being able to run tests as if a
> > > particular command wasn't supported was useful."
> >
> > So [1] is a real concern, and at the moment, we just suppress all of
> > the tests that try to use collapse/insert range. For example, from
> > the ext4/bigalloc config file:
> >
> > # Until we can teach xfstests the difference between cluster size and
> > # block size, avoid collapse_range and insert_range since these will
> > # fail due the fact that these operations require cluster-aligned
> > # ranges.
> > export FSX_AVOID="-C -I"
> > export FSSTRESS_AVOID="-f collapse=0 -f insert=0"
> > export XFS_IO_AVOID="fcollapse finsert"
> > TEST_SET_EXCLUDE="-x collapse,insert"
>
> Thanks for pointing this out, I'll help to check all fcollapse and finsert
> related cases, and add them into collapse or insert group. We're keep improving
> group problem, most of cases really not take too much care about its group.
> And I'll pay more attention about the groups when I review patches.
<nod>
> >
> > That's not ideal, and it's been on my todo list to try to fix it, when
> > I could get one of those round tuit's. However, I had assumed that we
> > would split _get_file_block_size somehow, given the observation I've
> > made above. So this was always been something that has put me off,
> > because it looked like a much larger project than say, "gee, I have an
> > hour or two on a weekend, let me see if I can fix this".
>
> I'd like to help your team to deal with the fstests problems you hit in your
> using procedure, feel free to tell us the part you hope to fix/improve. I
> have to care about other teams too, so might need more time to evaluate and
> talk, sorry about that.
>
> >
> > [2] is practically not _really_ a concern any more. It used to be
> > that one of the ways that I would root cause a failing test was to
> > suppress one of the advanced fallocate modes, whether it be
> > collapse/insert range, or going even further back, punch hole. If
> > test then passed, then I could say, "ah, hah; the problem can probably
> > be localized to a certain part of the fs code."
> >
> > However, that's mainly tests that are using fsstress and fsx, and we
> > have solutions for that. And for other tests, I can examine the test
> > and see whether or not it's using collapse/insert range by inspection,
> > so it's really not that big of a deal. I could imagine other file
> > systems who might find this useful in the future, if they were trying
> > to growing support for the more advanced fallocate modes --- but that
> > wouldn't *my* concern, and arguably those file systems could solve
> > problems alternate ways, such as having mount options that suppress
> > those fallocate modes entirely which could be used when running
> > xfstests.
> >
> > - Ted
> >
> > P.S. I have noticed some tests that use collapse/insert range but
> > don't declare that they are in the collapse or insert groups.
> > Fortunately, all of these tests are also in the clone group, and so
> > they don't apply to ext4, so _I_ don't care. :-)
>
> Thanks, I'll try to check all collapse/insert related cases.
<nod> Bad throwback to the days when we didn't scrutinize group names
all that closely. Someone probably ought to write a dumb linter that
can look for obvious patterns in a testcase and nominate group names.
--D
> Thanks,
> Zorro
>
> >
>
next prev parent reply other threads:[~2022-11-08 16:45 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-05 18:29 [PATCH] generic: add missing $FSX_AVOID to fsx invocations Theodore Ts'o
2022-11-06 12:10 ` Zorro Lang
2022-11-06 21:44 ` Theodore Ts'o
2022-11-07 2:02 ` Zorro Lang
2022-11-07 16:35 ` Theodore Ts'o
2022-11-07 20:09 ` Darrick J. Wong
2022-11-08 2:44 ` Zorro Lang
2022-11-08 15:08 ` Theodore Ts'o
2022-11-08 15:56 ` Zorro Lang
2022-11-08 16:45 ` Darrick J. Wong [this message]
2022-11-11 2:25 ` Zorro Lang
2023-02-07 18:26 ` Zorro Lang
2023-07-28 20:30 ` Theodore Ts'o
2023-08-01 8:27 ` Zorro Lang
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=Y2qHkFxVvYlANCZc@magnolia \
--to=djwong@kernel.org \
--cc=enwlinux@gmail.com \
--cc=fstests@vger.kernel.org \
--cc=tytso@mit.edu \
--cc=zlang@redhat.com \
/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