From: Peter Xu <peterx@redhat.com>
To: David Hildenbrand <david@redhat.com>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Andrea Arcangeli <aarcange@redhat.com>,
Andrew Morton <akpm@linux-foundation.org>,
Nadav Amit <nadav.amit@gmail.com>,
Mike Kravetz <mike.kravetz@oracle.com>,
Axel Rasmussen <axelrasmussen@google.com>,
Leonardo Bras Soares Passos <lsoaresp@redhat.com>,
Mike Rapoport <rppt@linux.vnet.ibm.com>
Subject: Re: [PATCH 16/29] selftests/mm: UFFDIO_API test
Date: Mon, 3 Apr 2023 16:24:12 -0400 [thread overview]
Message-ID: <ZCs17E5frPyIoCOs@x1n> (raw)
In-Reply-To: <b282519e-d43d-026c-3f96-4d7fb287d96b@redhat.com>
On Mon, Apr 03, 2023 at 09:06:26PM +0200, David Hildenbrand wrote:
> On 03.04.23 18:43, Peter Xu wrote:
> > On Mon, Apr 03, 2023 at 09:59:50AM +0200, David Hildenbrand wrote:
> > > There is ksft_print_msg, ksft_test_result, ksft_test_result_fail, ... do we
> > > maybe want to convert properly to ksft while already at it?
> >
> > Yes, I started with trying to use that but found that there're not a lot of
> > things that I can leverage.
> >
> > Starting with ksft_set_plan() - I think this is something we call first. I
> > want the current unit test to skip everything if UFFD API test failed here,
> > then I need to feed in a dynamic number of "plan" into ksft_set_plan().
> > But I never know after I ran the 1st test..
>
> In cow.c I did that. Getting the number of tests right can be challenging
> indeed.
IMHO the major thing is not about not easy to set, it's about there's
merely no benefit I can see of having that calculated at the start of a
test.
There's one thing it can do, that is when calling ksft_finished() it can be
used to know whether all tests are run, but sadly here we're calculating
everything just to make it match.. so it loses its last purpose.. IMHO.
>
> Basic "feature availability" checks would go first (is uffd even around?),
> and depending on that you can set the plan.
>
> For everything else, you can skip instead of test, so it will still be
> accounted towards the plan.
>
> >
> > I can call ksft_set_plan() later than this, but it misses a few tests which
> > also looks weird.
>
> Yeah, it would be nice to simply make ksft_set_plan() optional. For example,
> make ksft_print_cnts() skip the comparison if ksft_plan == 0. At least
> ksft_exit_skip() handles that already in a descend way (below).
>
> >
> > It also seems to not really help anything at all and not obvious to use.
> > E.g. ksft_finished() will reference ksft_plan then it'll trigger
> > ksft_exit_fail() but here I want to make it SKIP if the 1st test failed
> > simply because the kernel probably doesn't have CONFIG_USERFAULTFD.
>
> You'd simply do that availability check first and then use ksft_exit_skip()
> in case not available I guess.
>
> >
> > Another example: I never figured what does x{fail|pass|skip} meant in the
> > header.. e.g. ksft_inc_xfail_cnt() is used nowhere so I cannot reference
> > either. Then I don't know when I should increase them.
>
> In cow.c I have the following flow:
>
> ksft_print_header();
> ksft_set_plan();
> ... tests ...
> err = ksft_get_fail_cnt();
> if (err)
> ksft_exit_fail_msg();
> return ksft_exit_pass();
>
> That gives me:
>
> # [INFO] detected THP size: 2048 KiB
> # [INFO] detected hugetlb size: 2048 KiB
> # [INFO] detected hugetlb size: 1048576 KiB
> # [INFO] huge zeropage is enabled
> TAP version 13
> 1..190
> ...
> # Totals: pass:87 fail:0 xfail:0 xpass:0 skip:103 error:0
>
>
> I didn't use xfail or xpass so far, but what I understood is that these are
> "expected failures" and "expected passes". fail/pass/skip are straight
Yes, xfail can be expressed that way, but maybe not xpass? Otherwise it's
hard to identify what's the difference between xpass and pass, because IIUC
pass also means "expected to pass".
> forward.
> ksft_test_result_fail()/ksft_test_result_pass()/ksft_test_result_skip() are
> used to set them.
>
> You'd do availability checks before ksft_set_plan() and fail with a
> ksft_exit_skip() if the kernel doesn't support it. Then, you'd just use
> ksft_test_result_fail()/ksft_test_result_pass()/ksft_test_result_skip().
>
> >
> > In short, to make the unit test behave as expected, I figured I'll just
> > write these few helpers and that's good enough for this unit test. That
> > takes perhaps 5 min anyway and isn't hugely bad for an unit test.
> >
> > Then I keep the exit code matching kselftests (KSFT_SKIP, etc.).
> >
> > What I can do here, though, is at least reuse the counters, e.g:
> >
> > ksft_inc_pass_cnt() / ksft_inc_fail_cnt()
> >
> > There's no ksft_inc_skip_cnt() so, maybe, I can just reuse
> > ksft_inc_xskip_cnt() assuming that counts "skip"s?
> >
> > Let me know if you have better ideas, I'll be happy to switch in that case.
>
> I guess once you start manually increasing/decreasing the cnt, you might be
> abusing the ksft framework indeed and are better off handling it differently
> :D
I'm serious considering that to address your comment here, to show that I'm
trying my best to use whatever can help in this test case. :) Here reusing
it would avoid a few bytes in the bss, which is still beneficial so I can
do. At least I'm sure xskip is for skipping now, so I know what to use.
PS: one other reason I didn't use the header is also because I prefer the
current output of uffd-self-tests.c. I didn't say anything because I think
it's stingy.. So let's keep this in a trivial small PS. After all, the
print format is half of what the header provides functional-wise.
I'll see what I can come up with at last in the next version, thanks David.
--
Peter Xu
next prev parent reply other threads:[~2023-04-03 20:27 UTC|newest]
Thread overview: 97+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-30 15:56 [PATCH 00/29] selftests/mm: Split / Refactor userfault test Peter Xu
2023-03-30 15:56 ` [PATCH 01/29] Revert "userfaultfd: don't fail on unrecognized features" Peter Xu
2023-03-30 18:31 ` David Hildenbrand
2023-03-30 22:22 ` Peter Xu
2023-03-30 19:04 ` Axel Rasmussen
2023-03-30 22:27 ` Peter Xu
2023-03-31 16:52 ` Axel Rasmussen
2023-03-31 18:08 ` Dmitry Safonov
2023-03-31 20:04 ` Axel Rasmussen
2023-04-03 7:48 ` David Hildenbrand
2023-03-30 16:06 ` [PATCH 02/29] selftests/mm: Update .gitignore with two missing tests Peter Xu
2023-04-03 7:48 ` David Hildenbrand
2023-04-07 9:09 ` Mike Rapoport
2023-03-30 16:06 ` [PATCH 03/29] selftests/mm: Dump a summary in run_vmtests.sh Peter Xu
2023-03-30 19:07 ` Axel Rasmussen
2023-03-30 22:28 ` Peter Xu
2023-04-03 7:49 ` David Hildenbrand
2023-04-07 9:15 ` Mike Rapoport
2023-03-30 16:06 ` [PATCH 04/29] selftests/mm: Merge util.h into vm_util.h Peter Xu
2023-03-30 19:14 ` Axel Rasmussen
2023-04-03 7:50 ` David Hildenbrand
2023-04-07 9:18 ` Mike Rapoport
2023-03-30 16:06 ` [PATCH 05/29] selftests/mm: Use TEST_GEN_PROGS where proper Peter Xu
2023-04-03 7:52 ` David Hildenbrand
2023-04-07 9:22 ` Mike Rapoport
2023-03-30 16:07 ` [PATCH 06/29] selftests/mm: Link vm_util.c always Peter Xu
2023-04-03 7:52 ` David Hildenbrand
2023-04-07 9:23 ` Mike Rapoport
2023-03-30 16:07 ` [PATCH 07/29] selftests/mm: Merge default_huge_page_size() into one Peter Xu
2023-03-30 20:30 ` Axel Rasmussen
2023-03-31 18:15 ` Mike Kravetz
2023-04-03 15:16 ` Peter Xu
2023-04-03 7:53 ` David Hildenbrand
2023-04-07 9:24 ` Mike Rapoport
2023-03-30 16:07 ` [PATCH 08/29] selftests/mm: Use PM_* macros in vm_utils.h Peter Xu
2023-03-31 18:24 ` Mike Kravetz
2023-04-03 7:53 ` David Hildenbrand
2023-04-07 9:28 ` Mike Rapoport
2023-03-30 16:07 ` [PATCH 09/29] selftests/mm: Reuse pagemap_get_entry() in vm_util.h Peter Xu
2023-03-30 21:08 ` Axel Rasmussen
2023-03-31 18:27 ` Mike Kravetz
2023-04-03 7:54 ` David Hildenbrand
2023-04-07 9:32 ` Mike Rapoport
2023-03-30 16:07 ` [PATCH 10/29] selftests/mm: Test UFFDIO_ZEROPAGE only when !hugetlb Peter Xu
2023-03-31 18:37 ` Mike Kravetz
2023-04-01 1:57 ` Axel Rasmussen
2023-04-03 7:55 ` David Hildenbrand
2023-04-03 16:10 ` Peter Xu
2023-04-07 9:42 ` Mike Rapoport
2023-04-11 19:03 ` Peter Xu
2023-03-30 16:07 ` [PATCH 11/29] selftests/mm: Drop test_uffdio_zeropage_eexist Peter Xu
2023-04-01 0:03 ` Mike Kravetz
2023-04-03 16:16 ` Peter Xu
2023-04-03 7:56 ` David Hildenbrand
2023-04-07 9:48 ` Mike Rapoport
2023-03-30 16:07 ` [PATCH 12/29] selftests/mm: Create uffd-common.[ch] Peter Xu
2023-04-07 10:10 ` Mike Rapoport
2023-03-30 16:07 ` [PATCH 13/29] selftests/mm: Split uffd tests into uffd-stress and uffd-unit-tests Peter Xu
2023-04-07 11:02 ` Mike Rapoport
2023-03-30 16:07 ` [PATCH 14/29] selftests/mm: uffd_[un]register() Peter Xu
2023-04-05 19:12 ` Peter Xu
2023-04-07 11:08 ` Mike Rapoport
2023-04-11 19:13 ` Peter Xu
2023-04-12 16:42 ` Mike Rapoport
2023-03-30 16:07 ` [PATCH 15/29] selftests/mm: uffd_open_{dev|sys}() Peter Xu
2023-04-03 8:00 ` David Hildenbrand
2023-04-07 11:11 ` Mike Rapoport
2023-03-30 16:07 ` [PATCH 16/29] selftests/mm: UFFDIO_API test Peter Xu
2023-04-03 7:59 ` David Hildenbrand
2023-04-03 16:43 ` Peter Xu
2023-04-03 19:06 ` David Hildenbrand
2023-04-03 20:24 ` Peter Xu [this message]
2023-04-04 12:48 ` David Hildenbrand
2023-04-05 16:21 ` Peter Xu
2023-03-30 16:08 ` [PATCH 17/29] selftests/mm: Drop global mem_fd in uffd tests Peter Xu
2023-04-11 10:39 ` Mike Rapoport
2023-03-30 16:08 ` [PATCH 18/29] selftests/mm: Drop global hpage_size " Peter Xu
2023-04-11 10:41 ` Mike Rapoport
2023-03-30 16:08 ` [PATCH 19/29] selftests/mm: Let uffd_handle_page_fault() takes wp parameter Peter Xu
2023-04-11 10:52 ` Mike Rapoport
2023-04-11 19:36 ` Peter Xu
2023-03-30 16:08 ` [PATCH 20/29] selftests/mm: Allow allocate_area() to fail properly Peter Xu
2023-04-11 11:02 ` Mike Rapoport
2023-04-11 19:42 ` Peter Xu
2023-03-30 16:08 ` [PATCH 21/29] selftests/mm: Add framework for uffd-unit-test Peter Xu
2023-04-11 11:09 ` Mike Rapoport
2023-04-11 20:09 ` Peter Xu
2023-03-30 16:08 ` [PATCH 22/29] selftests/mm: Move uffd pagemap test to unit test Peter Xu
2023-04-11 12:41 ` Mike Rapoport
2023-03-30 16:08 ` [PATCH 23/29] selftests/mm: Move uffd minor " Peter Xu
2023-03-30 16:08 ` [PATCH 24/29] selftests/mm: Move uffd sig/events tests into uffd unit tests Peter Xu
2023-03-30 16:08 ` [PATCH 25/29] selftests/mm: Move zeropage test " Peter Xu
2023-03-30 16:08 ` [PATCH 26/29] selftests/mm: Workaround no way to detect uffd-minor + wp Peter Xu
2023-03-30 16:08 ` [PATCH 27/29] selftests/mm: Allow uffd test to skip properly with no privilege Peter Xu
2023-03-30 16:08 ` [PATCH 28/29] selftests/mm: Drop sys/dev test in uffd-stress test Peter Xu
2023-03-30 16:08 ` [PATCH 29/29] selftests/mm: Add shmem-private test to uffd-stress Peter Xu
2023-03-31 16:47 ` [PATCH 00/29] selftests/mm: Split / Refactor userfault test Peter Xu
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=ZCs17E5frPyIoCOs@x1n \
--to=peterx@redhat.com \
--cc=aarcange@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=axelrasmussen@google.com \
--cc=david@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lsoaresp@redhat.com \
--cc=mike.kravetz@oracle.com \
--cc=nadav.amit@gmail.com \
--cc=rppt@linux.vnet.ibm.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;
as well as URLs for NNTP newsgroup(s).