Received: by 2002:a05:6602:2086:0:0:0:0 with SMTP id a6csp4417874ioa; Wed, 27 Apr 2022 03:30:29 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyuEFRJFT7HOCbptoHOWYEOgmANOQIB6OoG6sX0p/ufvOWvwZ4NTs7HccPrqrqimwVbXqCL X-Received: by 2002:a17:902:900c:b0:15c:f94a:849c with SMTP id a12-20020a170902900c00b0015cf94a849cmr18641888plp.48.1651055428853; Wed, 27 Apr 2022 03:30:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651055428; cv=none; d=google.com; s=arc-20160816; b=WaF0cfkMoExHqqCZFKBq4q5PjEHVgQlOgNPHassgLFNMV3Vbqh3oys8pBp91Xag74N CgAp+kKxFUMOOWn9BCArHKdTgYZ7wSz9Usaf17rb9cdKgCSqxxBvMDetMh0tg0hUBeLE kWjg3eLW54zA95yFOVSGeDQ1Npt3esz9dUTM5T+xaf7oWBXFOcn35RQgDfpet+siXZ3v WUppddrENGycBxYQ2nvFskojGgok+lXNsDxI6fmKLyx+m9CCRNOoXlrjBsK8sY1T+ziN L9EBoJEQDKATprl1i5gQ5aeS+AYtp9FaodtBKuH0ikWAxLg5N1ElM2sGYFlamkWcN4a+ va7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject:dkim-signature; bh=5MAOTSTL0j+UcFq0k0W+NNQYDSwGOqBSru0X+peZ2tA=; b=M8dOBVEHxqBlRh3K9By+4G+iWTayFZjiADhrWdgmUQ8KUnRjdyUytg71h6NUpxg4Yx z21N/n3iOBqid61SmP4DqyD0CpcxbpNQt8yccK140fZBIsFNBhvLglDQe4zR8zF11goD R3OozYV3+1WlN+iuep9IK2quwgIrZTDnO3g+O1LvcJP+EpOdJNB8wsZ2vRWZ631fOKhM w3gDvxIreMsn3VN/64mV2ymzwJD1UnsZLo7OTi4+/KQ7zX1Y8j68wUx83t+uqcS4C258 0yUFc6EBUk96im6r1U1k2ewuLkeDIeuQqYG4SoBYzDxfvIHuIdxxbZhEJvBHInsdXTVF L1gg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=google header.b=iA2K3qO8; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id j19-20020a170902759300b0015b113c6bcbsi1097118pll.547.2022.04.27.03.30.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Apr 2022 03:30:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=google header.b=iA2K3qO8; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 87C573A1A10; Wed, 27 Apr 2022 02:45:01 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1353554AbiDZQ7x (ORCPT + 99 others); Tue, 26 Apr 2022 12:59:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54922 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346075AbiDZQ7u (ORCPT ); Tue, 26 Apr 2022 12:59:50 -0400 Received: from mail-io1-xd31.google.com (mail-io1-xd31.google.com [IPv6:2607:f8b0:4864:20::d31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9AC91694A8 for ; Tue, 26 Apr 2022 09:56:42 -0700 (PDT) Received: by mail-io1-xd31.google.com with SMTP id e15so2782034iob.3 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=LN7jnF6dEl7FfU09OEEL3s+8IKa4DJ3Rv5g3WBSp2//HJYySS1s+HFO5NfQ3mA9WIA HalM32oF/GE0oBfTOpxH65+jW/RI1KEiPfv3b4OK32LaROKYVXobdhsWxFFYJbhDfw2o HmfKglkjlRAO4t6Xv8OICvqrCjlj5C644SOOAILuxAHtl/QbCyK80woTsYfT3U9EzTQh aCQp7YCt99xpE8iConTpJxrCWJG9YbWSm1TH5W/GaTd/SKsVOAasNrQWApnCOLGmrWW3 tLg+4WpCNEvQzd2qrtDQYzz6JDAo30qaW+8KGQooOWGFW6E8gnutxIAYw3JjgXpkb0I8 70HA== X-Gm-Message-State: AOAM532l/Z79QLk3PjaC7irKpGkPpA2RhLSwQBsoEKvvu7yI0YGKNQi9 bVN4WgPskezXN738KFvgW6cyoQ== 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-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,NICE_REPLY_A,RDNS_NONE,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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