From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 40169C433F5 for ; Tue, 26 Apr 2022 16:56:44 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B1F156B0092; Tue, 26 Apr 2022 12:56:43 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id AA7726B0093; Tue, 26 Apr 2022 12:56:43 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8F97C6B0095; Tue, 26 Apr 2022 12:56:43 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (relay.hostedemail.com [64.99.140.27]) by kanga.kvack.org (Postfix) with ESMTP id 7B0B06B0092 for ; Tue, 26 Apr 2022 12:56:43 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 45F116100F for ; Tue, 26 Apr 2022 16:56:43 +0000 (UTC) X-FDA: 79399634286.17.BD10D6F Received: from mail-io1-f48.google.com (mail-io1-f48.google.com [209.85.166.48]) by imf11.hostedemail.com (Postfix) with ESMTP id 169F04004C for ; Tue, 26 Apr 2022 16:56:39 +0000 (UTC) Received: by mail-io1-f48.google.com with SMTP id h8so575076iov.12 for ; Tue, 26 Apr 2022 09:56:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=google; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=5MAOTSTL0j+UcFq0k0W+NNQYDSwGOqBSru0X+peZ2tA=; b=iA2K3qO8Mlk9Ua5NjrBg7SmrDhCgy+pnsrScAgZU37nA18Dm8vLoa9Dp2FRpO9sKY0 T9kvBZ2a/hRsCYUaB2kLLZIZ79LiJ0YL3cDg79Mghbe9aioh/H9FbzsScRypM4iG9Y/d dbhCai6A7UI6fc4WVd3kl50Wber7nSoR9Lvps= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=5MAOTSTL0j+UcFq0k0W+NNQYDSwGOqBSru0X+peZ2tA=; b=jckZa/3lN9CXmYumkEACoDe3SBEGdpbqY/hgyabrLLaSs+omSerc9dgqFgVTFOiFKY E4jMyn97+dvtNS285rqjjx94qk2viHncUKm7dQLMHFkA93PP/TS6rRiiXlFFLRTgTzr4 sC2IjAwj+GwOvdPb5s2LxqUTlB5trbFNWjiWEbnKk6cvo6uAd/RU5adKRnqjEE9rxJlA ceOuviWagu9Q+rfMqlqBlS+x4kadcnZoiwhwJbdvSz3WfeuT7kxqAbOgIsWURCP/CNso V6HMwY6QMGrQ/s2XpUbn+K04EQhSyw4CMPRz9rY2utuopJGaUszh7afQ1Exw3wa3bqT0 FHyg== X-Gm-Message-State: AOAM533fICxMSPzF4nhp9UrsBjcCYuURF7Ni5FaagdxvZwGg9OfjFQg5 J+8FGU/PJ2T5gQT3aOHZGHyDeQ== X-Google-Smtp-Source: ABdhPJw+4LWQEWNEpInmZrszTqCnuD5qjkIzY/NRqRzX9Ur1stkAuK0Wq5fbUx1+HQ2belv6VdSIkw== X-Received: by 2002:a05:6638:358b:b0:326:4717:90d4 with SMTP id v11-20020a056638358b00b00326471790d4mr10891855jal.136.1650992199826; Tue, 26 Apr 2022 09:56:39 -0700 (PDT) Received: from [192.168.1.128] ([71.205.29.0]) by smtp.gmail.com with ESMTPSA id y21-20020a6bc415000000b00648da092c8esm9737462ioa.14.2022.04.26.09.56.38 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 26 Apr 2022 09:56:39 -0700 (PDT) Subject: Re: [PATCH v2 5/6] userfaultfd: selftests: make /dev/userfaultfd testing configurable To: Axel Rasmussen , Alexander Viro , Andrew Morton , Charan Teja Reddy , Dave Hansen , "Dmitry V . Levin" , Gleb Fotengauer-Malinovskiy , Hugh Dickins , Jan Kara , Jonathan Corbet , Mel Gorman , Mike Kravetz , Mike Rapoport , Nadav Amit , Peter Xu , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , zhangyi Cc: linux-doc@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, Shuah Khan References: <20220422212945.2227722-1-axelrasmussen@google.com> <20220422212945.2227722-6-axelrasmussen@google.com> From: Shuah Khan Message-ID: Date: Tue, 26 Apr 2022 10:56:38 -0600 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 MIME-Version: 1.0 In-Reply-To: <20220422212945.2227722-6-axelrasmussen@google.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 169F04004C Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=linuxfoundation.org header.s=google header.b=iA2K3qO8; spf=pass (imf11.hostedemail.com: domain of skhan@linuxfoundation.org designates 209.85.166.48 as permitted sender) smtp.mailfrom=skhan@linuxfoundation.org; dmarc=pass (policy=none) header.from=linuxfoundation.org X-Rspam-User: X-Stat-Signature: d4iq9ay1ihkm5feb8hrjrgybxrhhcm8d X-HE-Tag: 1650992199-841641 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On 4/22/22 3:29 PM, Axel Rasmussen wrote: > Instead of always testing both userfaultfd(2) and /dev/userfaultfd, > let the user choose which to test. > > As with other test features, change the behavior based on a new > command line flag. Introduce the idea of "test mods", which are > generic (not specific to a test type) modifications to the behavior of > the test. This is sort of borrowed from this RFC patch series [1], but > simplified a bit. > > The benefit is, in "typical" configurations this test is somewhat slow > (say, 30sec or something). Testing both clearly doubles it, so it may > not always be desirable, as users are likely to use one or the other, > but never both, in the "real world". > > [1]: https://patchwork.kernel.org/project/linux-mm/patch/20201129004548.1619714-14-namit@vmware.com/ > > Signed-off-by: Axel Rasmussen > --- > tools/testing/selftests/vm/userfaultfd.c | 41 +++++++++++++++++------- > 1 file changed, 30 insertions(+), 11 deletions(-) > > diff --git a/tools/testing/selftests/vm/userfaultfd.c b/tools/testing/selftests/vm/userfaultfd.c > index 12ae742a9981..274522704e40 100644 > --- a/tools/testing/selftests/vm/userfaultfd.c > +++ b/tools/testing/selftests/vm/userfaultfd.c > @@ -142,8 +142,17 @@ static void usage(void) > { > fprintf(stderr, "\nUsage: ./userfaultfd " > "[hugetlbfs_file]\n\n"); > + Remove the extra blank line here. > fprintf(stderr, "Supported : anon, hugetlb, " > "hugetlb_shared, shmem\n\n"); > + Remove the extra blank line here. > + fprintf(stderr, "'Test mods' can be joined to the test type string with a ':'. " > + "Supported mods:\n"); > + fprintf(stderr, "\tdev - Use /dev/userfaultfd instead of userfaultfd(2)\n"); > + fprintf(stderr, "\nExample test mod usage:\n"); > + fprintf(stderr, "# Run anonymous memory test with /dev/userfaultfd:\n"); > + fprintf(stderr, "./userfaultfd anon:dev 100 99999\n\n"); > + > fprintf(stderr, "Examples:\n\n"); > fprintf(stderr, "%s", examples); Update examples above with new test cases if any. > exit(1); > @@ -1610,8 +1619,6 @@ unsigned long default_huge_page_size(void) > > static void set_test_type(const char *type) > { > - uint64_t features = UFFD_API_FEATURES; > - > if (!strcmp(type, "anon")) { > test_type = TEST_ANON; > uffd_test_ops = &anon_uffd_test_ops; > @@ -1631,10 +1638,28 @@ static void set_test_type(const char *type) > test_type = TEST_SHMEM; > uffd_test_ops = &shmem_uffd_test_ops; > test_uffdio_minor = true; > - } else { > - err("Unknown test type: %s", type); > + } At this point, it might make it so much easier and maintainable if we were to use getopt instead of parsing options. > +} > + > +static void parse_test_type_arg(const char *raw_type) > +{ > + char *buf = strdup(raw_type); > + uint64_t features = UFFD_API_FEATURES; > + > + while (buf) { > + const char *token = strsep(&buf, ":"); > + > + if (!test_type) > + set_test_type(token); > + else if (!strcmp(token, "dev")) > + test_dev_userfaultfd = true; > + else > + err("unrecognized test mod '%s'", token); > } > > + if (!test_type) > + err("failed to parse test type argument: '%s'", raw_type); > + > if (test_type == TEST_HUGETLB) > page_size = default_huge_page_size(); > else > @@ -1681,7 +1706,7 @@ int main(int argc, char **argv) > err("failed to arm SIGALRM"); > alarm(ALARM_INTERVAL_SECS); > > - set_test_type(argv[1]); > + parse_test_type_arg(argv[1]); > > nr_cpus = sysconf(_SC_NPROCESSORS_ONLN); > nr_pages_per_cpu = atol(argv[2]) * 1024*1024 / page_size / > @@ -1719,12 +1744,6 @@ int main(int argc, char **argv) > } > printf("nr_pages: %lu, nr_pages_per_cpu: %lu\n", > nr_pages, nr_pages_per_cpu); > - > - test_dev_userfaultfd = false; > - if (userfaultfd_stress()) > - return 1; > - > - test_dev_userfaultfd = true; > return userfaultfd_stress(); > } > > Same comments as before on fail vs. skip conditions to watch out for and report them correctly. thanks, -- Shuah