Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp3500601pxb; Mon, 25 Jan 2021 19:02:20 -0800 (PST) X-Google-Smtp-Source: ABdhPJxVbhBuzX3gDjWC1qJj27IqNHF22hG/ihNREnQT6YlA9N+J37R7yQQCc/+XRsdsueTvx0d0 X-Received: by 2002:a05:6402:b6f:: with SMTP id cb15mr2857912edb.277.1611630140584; Mon, 25 Jan 2021 19:02:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611630140; cv=none; d=google.com; s=arc-20160816; b=o+1Ac8ugDaZPX+Zp31WeCEUdoICfQNvzy7Zi8G4UO8xS80ayjZzD5/I8WtZLJluUZo HBrjP84o94CZxcQKGbI10i5VbD1pUhsHuUd+ji2zNT/MuftYtJvLPq42iiVyd5CNEII8 4Zrm3HVXV/KjhZvkIL80p9BP530eJ5qsRYnnApRoMWi/v4vUOw4cIX4/tR0+pTBIKuGR MrhvrNQ9WQfvRcbnfVZe0Gkzkmpc2KBZEPNyAw0vof9uWuFk95PJySPVmquQXNZxfoVN MmH2bMvzvcOEf9h2SSWaht9fvVzzsrtLKsyDbZsTs7nC4ryUwsjOtq8VeciB2m3w+5q+ Mvfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=W8jVFguuT6m3F5w/xn5YSJGes8cxtxtvar1ZUvu/eoM=; b=z/lIf1x+Bo0ySfGemVtN29SM5cu69Rg57/UfNp/eiTwNLEkqbc90SFtWaJVrq79saZ Suz8WpfULqajpz7D5bRqmenHGIbOSyWHXE0jdh65uHOcFFGSSSwc1hcUPO+wPOuOOxyD l7XnNNPnnxODVdcnOAvGCEhsE2MyoSYsLjRd+4ag3jeK1KEL8QP226p6uccLQqG4XPCs YuxS80L2Ir9GEhnMGGtQYT27ssS23aVbWkFo4s90e8TmT3pEgPVezyoLD2axIPrnXhDC 8Wbbk4sV3qclMDr6Wp6tePDzxil5U52iu1LjucjmsUXRaGGcwsKpnruPoe3KF6wQAr0c 9MgA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@soleen.com header.s=google header.b=Jqrr5sIJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id bu13si6398990ejb.588.2021.01.25.19.01.55; Mon, 25 Jan 2021 19:02:20 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@soleen.com header.s=google header.b=Jqrr5sIJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729430AbhAYOXx (ORCPT + 99 others); Mon, 25 Jan 2021 09:23:53 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42518 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729363AbhAYOTA (ORCPT ); Mon, 25 Jan 2021 09:19:00 -0500 Received: from mail-ej1-x62e.google.com (mail-ej1-x62e.google.com [IPv6:2a00:1450:4864:20::62e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CE87AC06174A for ; Mon, 25 Jan 2021 06:18:18 -0800 (PST) Received: by mail-ej1-x62e.google.com with SMTP id g3so18241756ejb.6 for ; Mon, 25 Jan 2021 06:18:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen.com; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=W8jVFguuT6m3F5w/xn5YSJGes8cxtxtvar1ZUvu/eoM=; b=Jqrr5sIJHZI42XyeQSNtEGhk/iXqs8XvtEUmwFOySC5uU/nWPWlXqZXMheutWEKUq9 ztBO3zMX5+8VcQwOkMtEqp71gmApj74c3avAiqu8MNY8EH4L0FEiAmJGymk16irl0VmL BoU6mFDqvtOwQ6PLtHfnGX461kpXxwvCrpsyMKh2tGv3D7aXI6qat6lwoSY2f/W3Zr9d gXOGQ1HqM+BaQ9Fhn4h8+xPBkvX8SQxajAGgp7dvz9VZBZZ6wgEyhYVyo5fApBjrtBy2 uWHiCjI2V9i8m87Sq7SVmEVmCQ/8M5/m2gwpBELHJhXMS7kj8EMj3oLPh+s1p4EcRrYV e9DA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=W8jVFguuT6m3F5w/xn5YSJGes8cxtxtvar1ZUvu/eoM=; b=r73jdgfIdnjs7b37m12616ry5hPfwM3WzTx2+WTGSrEeJ4LVgYR7xUALYXYhh4Lf1R chg9hWeY9HKRpf70KfqZ7OMeRTH8lvmUBkiL/yHACG4Qwi7UYvOTHIqFca/r+jDfcwqW likENbU0h1VK4adqQ2DBHh7w/KYJYVWUjoMcuQDu0ni1VDSHxLZsjcGgzN7ZTkdu4+hA 7TFhO2CjxqzoHjZZHv8KgALLMkCzFvZ60g99LcxTrjMKyeCZnKiiZDxu/xRXOMFEGfaS qyGD2fVk8yahf0Mncd/5f6hCMdX9Gq7mbsc3MT7PmsyiQgz/UzIIqoiotlDbsAVxkFQs Sygg== X-Gm-Message-State: AOAM5308hF1OK7vdX26ujyrsgj7U/dRGPU7fBvRCa9yeLT41ZrYC0wJM 2nWbdUiLAC4Wo9iD3lNtnA5diF9iXzhicbONnb0Rzw== X-Received: by 2002:a17:906:cedd:: with SMTP id si29mr539677ejb.426.1611584297565; Mon, 25 Jan 2021 06:18:17 -0800 (PST) MIME-Version: 1.0 References: <20210122033748.924330-1-pasha.tatashin@soleen.com> <20210122033748.924330-15-pasha.tatashin@soleen.com> <532b1927-1b5d-83e8-f1f9-50cd5e72435f@nvidia.com> In-Reply-To: <532b1927-1b5d-83e8-f1f9-50cd5e72435f@nvidia.com> From: Pavel Tatashin Date: Mon, 25 Jan 2021 09:17:41 -0500 Message-ID: Subject: Re: [PATCH v7 14/14] selftests/vm: test faulting in kernel, and verify pinnable pages To: John Hubbard Cc: LKML , linux-mm , Andrew Morton , Vlastimil Babka , Michal Hocko , David Hildenbrand , Oscar Salvador , Dan Williams , Sasha Levin , Tyler Hicks , Joonsoo Kim , Mike Kravetz , Steven Rostedt , Ingo Molnar , Jason Gunthorpe , Peter Zijlstra , Mel Gorman , Matthew Wilcox , David Rientjes , Linux Doc Mailing List , Ira Weiny , linux-kselftest@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, Jan 24, 2021 at 6:18 PM John Hubbard wrote: > > On 1/21/21 7:37 PM, Pavel Tatashin wrote: > > When pages are pinned they can be faulted in userland and migrated, and > > they can be faulted right in kernel without migration. > > > > In either case, the pinned pages must end-up being pinnable (not movable). > > > > Add a new test to gup_test, to help verify that the gup/pup > > (get_user_pages() / pin_user_pages()) behavior with respect to pinnable > > and movable pages is reasonable and correct. Specifically, provide a > > way to: > > > > 1) Verify that only "pinnable" pages are pinned. This is checked > > automatically for you. > > > > 2) Verify that gup/pup performance is reasonable. This requires > > comparing benchmarks between doing gup/pup on pages that have been > > pre-faulted in from user space, vs. doing gup/pup on pages that are not > > faulted in until gup/pup time (via FOLL_TOUCH). This decision is > > controlled with the new -z command line option. > > > > Signed-off-by: Pavel Tatashin > > --- > > mm/gup_test.c | 6 ++++++ > > tools/testing/selftests/vm/gup_test.c | 23 +++++++++++++++++++---- > > 2 files changed, 25 insertions(+), 4 deletions(-) > > > > This also looks good. I do see the WARN_ON_ONCE firing in > internal_get_user_pages_fast(), when running with *only* the new -z > option. > > I'll poke around the rest of the patchset and see if that is expected > and normal, but either way the test code itself looks correct and seems > to be passing my set of "run a bunch of different gup_test options" here, > so feel free to add: > > Reviewed-by: John Hubbard Thank you! Pasha > > thanks, > -- > John Hubbard > NVIDIA > > > diff --git a/mm/gup_test.c b/mm/gup_test.c > > index a6ed1c877679..d974dec19e1c 100644 > > --- a/mm/gup_test.c > > +++ b/mm/gup_test.c > > @@ -52,6 +52,12 @@ static void verify_dma_pinned(unsigned int cmd, struct page **pages, > > > > dump_page(page, "gup_test failure"); > > break; > > + } else if (cmd == PIN_LONGTERM_BENCHMARK && > > + WARN(!is_pinnable_page(page), > > + "pages[%lu] is NOT pinnable but pinned\n", > > + i)) { > > + dump_page(page, "gup_test failure"); > > + break; > > } > > } > > break; > > diff --git a/tools/testing/selftests/vm/gup_test.c b/tools/testing/selftests/vm/gup_test.c > > index 943cc2608dc2..1e662d59c502 100644 > > --- a/tools/testing/selftests/vm/gup_test.c > > +++ b/tools/testing/selftests/vm/gup_test.c > > @@ -13,6 +13,7 @@ > > > > /* Just the flags we need, copied from mm.h: */ > > #define FOLL_WRITE 0x01 /* check pte is writable */ > > +#define FOLL_TOUCH 0x02 /* mark page accessed */ > > > > static char *cmd_to_str(unsigned long cmd) > > { > > @@ -39,11 +40,11 @@ int main(int argc, char **argv) > > unsigned long size = 128 * MB; > > int i, fd, filed, opt, nr_pages = 1, thp = -1, repeats = 1, write = 1; > > unsigned long cmd = GUP_FAST_BENCHMARK; > > - int flags = MAP_PRIVATE; > > + int flags = MAP_PRIVATE, touch = 0; > > char *file = "/dev/zero"; > > char *p; > > > > - while ((opt = getopt(argc, argv, "m:r:n:F:f:abctTLUuwWSHp")) != -1) { > > + while ((opt = getopt(argc, argv, "m:r:n:F:f:abctTLUuwWSHpz")) != -1) { > > switch (opt) { > > case 'a': > > cmd = PIN_FAST_BENCHMARK; > > @@ -110,6 +111,10 @@ int main(int argc, char **argv) > > case 'H': > > flags |= (MAP_HUGETLB | MAP_ANONYMOUS); > > break; > > + case 'z': > > + /* fault pages in gup, do not fault in userland */ > > + touch = 1; > > + break; > > default: > > return -1; > > } > > @@ -167,8 +172,18 @@ int main(int argc, char **argv) > > else if (thp == 0) > > madvise(p, size, MADV_NOHUGEPAGE); > > > > - for (; (unsigned long)p < gup.addr + size; p += PAGE_SIZE) > > - p[0] = 0; > > + /* > > + * FOLL_TOUCH, in gup_test, is used as an either/or case: either > > + * fault pages in from the kernel via FOLL_TOUCH, or fault them > > + * in here, from user space. This allows comparison of performance > > + * between those two cases. > > + */ > > + if (touch) { > > + gup.gup_flags |= FOLL_TOUCH; > > + } else { > > + for (; (unsigned long)p < gup.addr + size; p += PAGE_SIZE) > > + p[0] = 0; > > + } > > > > /* Only report timing information on the *_BENCHMARK commands: */ > > if ((cmd == PIN_FAST_BENCHMARK) || (cmd == GUP_FAST_BENCHMARK) || > > >