Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp1203152imm; Wed, 19 Sep 2018 14:02:51 -0700 (PDT) X-Google-Smtp-Source: ANB0VdbPA5+pAmDpS9OWjbYxn5YvQwzytAqoixQMw/EQLhXtGu2pSF+/s97iUmMerytF1mBs8rVe X-Received: by 2002:a17:902:bc41:: with SMTP id t1-v6mr36424197plz.52.1537390971910; Wed, 19 Sep 2018 14:02:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1537390971; cv=none; d=google.com; s=arc-20160816; b=J5uyfNLRqUbhhVXBMNw3ygO0RDXcwmjkKWkgQHeI62h2ZZHy7gapj8NEwrfhYffgTV XtitywDJREhtlTpL2jqRSPfjyLLrZj671TVds08y7lct3aiPNqbLC53wJCUC7YG9Katw 35FRZ4HfkuKKogoAtlsZ9A8K+0DCfaIDvyed11YCj40sr+cb2nPivYCODpc7BUceJcEs kf4aa5PFxlPcaAhhinmZuGwRmyBSrzf7lb3JxBTNkxy9F2PHgEBOj0y1T56neVzk4QTZ TS7U2DEDYoF4EV5h+KULuZa3x5PIN5iO69Ko6DAUr698Q34CRJLrhK4rAwi+Rlp1yCOh OqpA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=DpgovmJtPf18e2k2Wv7qoB41Fu1L4MevUAL6TIs9Zvo=; b=cvcYOkugQY3Gmxj9OxbUWpZDo8mJ/Cz4MGdEtIEF3zT9dBGIV+wolGlVW7aRUAEaW6 la1ncpIQ+bj7gtxbhOLTwd3p/+i6daJ26SlSoGSwd/MYqohx12a+Y9CnTWoY3GiTv0H4 T4n+QzUfI2eBOPmB5y01C6pebgBjDnl+TbPpzpXwjFYoDutc4IjWV3rIA1Wjff+6eYmL 65HpGZH+nsrifQu5bboPyMbSdvW+t3+4yBlWfHe04H4iXRyowaz5TPu0jp4YbYNz4tu1 Ka2m6osy7dg5d0XCvdPpL/XofAXRTeU9hzfvlauLie0wRluQ6V35j0McCt8gI+MDAViE bKJw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m3-v6si22634332plb.68.2018.09.19.14.02.36; Wed, 19 Sep 2018 14:02:51 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732439AbeITCko (ORCPT + 99 others); Wed, 19 Sep 2018 22:40:44 -0400 Received: from mga05.intel.com ([192.55.52.43]:60272 "EHLO mga05.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727781AbeITCko (ORCPT ); Wed, 19 Sep 2018 22:40:44 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Sep 2018 14:01:02 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,395,1531810800"; d="scan'208";a="71344738" Received: from unknown (HELO localhost.lm.intel.com) ([10.232.112.44]) by fmsmga007.fm.intel.com with ESMTP; 19 Sep 2018 14:01:02 -0700 From: Keith Busch To: linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: Kirill Shutemov , Dave Hansen , Dan Williams , Keith Busch Subject: [PATCH 2/7] mm/gup_benchmark: Add additional pinning methods Date: Wed, 19 Sep 2018 15:02:45 -0600 Message-Id: <20180919210250.28858-3-keith.busch@intel.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20180919210250.28858-1-keith.busch@intel.com> References: <20180919210250.28858-1-keith.busch@intel.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch provides new gup benchmark ioctl commands to run different user page pinning methods, get_user_pages_longterm and get_user_pages, in addition to the existing get_user_pages_fast. Cc: Kirill Shutemov Cc: Dave Hansen Cc: Dan Williams Signed-off-by: Keith Busch --- mm/gup_benchmark.c | 28 ++++++++++++++++++++++++++-- tools/testing/selftests/vm/gup_benchmark.c | 13 +++++++++++-- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/mm/gup_benchmark.c b/mm/gup_benchmark.c index 76cd35e477af..e6d9ce001ffa 100644 --- a/mm/gup_benchmark.c +++ b/mm/gup_benchmark.c @@ -6,6 +6,8 @@ #include #define GUP_FAST_BENCHMARK _IOWR('g', 1, struct gup_benchmark) +#define GUP_LONGTERM_BENCHMARK _IOWR('g', 2, struct gup_benchmark) +#define GUP_BENCHMARK _IOWR('g', 3, struct gup_benchmark) struct gup_benchmark { __u64 get_delta_usec; @@ -41,7 +43,23 @@ static int __gup_benchmark_ioctl(unsigned int cmd, nr = (next - addr) / PAGE_SIZE; } - nr = get_user_pages_fast(addr, nr, gup->flags & 1, pages + i); + switch (cmd) { + case GUP_FAST_BENCHMARK: + nr = get_user_pages_fast(addr, nr, gup->flags & 1, + pages + i); + break; + case GUP_LONGTERM_BENCHMARK: + nr = get_user_pages_longterm(addr, nr, gup->flags & 1, + pages + i, NULL); + break; + case GUP_BENCHMARK: + nr = get_user_pages(addr, nr, gup->flags & 1, pages + i, + NULL); + break; + default: + return -1; + } + if (nr <= 0) break; i += nr; @@ -70,8 +88,14 @@ static long gup_benchmark_ioctl(struct file *filep, unsigned int cmd, struct gup_benchmark gup; int ret; - if (cmd != GUP_FAST_BENCHMARK) + switch (cmd) { + case GUP_FAST_BENCHMARK: + case GUP_LONGTERM_BENCHMARK: + case GUP_BENCHMARK: + break; + default: return -EINVAL; + } if (copy_from_user(&gup, (void __user *)arg, sizeof(gup))) return -EFAULT; diff --git a/tools/testing/selftests/vm/gup_benchmark.c b/tools/testing/selftests/vm/gup_benchmark.c index bdcb97acd0ac..c2f785ded9b9 100644 --- a/tools/testing/selftests/vm/gup_benchmark.c +++ b/tools/testing/selftests/vm/gup_benchmark.c @@ -15,6 +15,8 @@ #define PAGE_SIZE sysconf(_SC_PAGESIZE) #define GUP_FAST_BENCHMARK _IOWR('g', 1, struct gup_benchmark) +#define GUP_LONGTERM_BENCHMARK _IOWR('g', 2, struct gup_benchmark) +#define GUP_BENCHMARK _IOWR('g', 3, struct gup_benchmark) struct gup_benchmark { __u64 get_delta_usec; @@ -30,9 +32,10 @@ int main(int argc, char **argv) struct gup_benchmark gup; unsigned long size = 128 * MB; int i, fd, opt, nr_pages = 1, thp = -1, repeats = 1, write = 0; + int cmd = GUP_FAST_BENCHMARK; char *p; - while ((opt = getopt(argc, argv, "m:r:n:tT")) != -1) { + while ((opt = getopt(argc, argv, "m:r:n:tTLU")) != -1) { switch (opt) { case 'm': size = atoi(optarg) * MB; @@ -49,6 +52,12 @@ int main(int argc, char **argv) case 'T': thp = 0; break; + case 'L': + cmd = GUP_LONGTERM_BENCHMARK; + break; + case 'U': + cmd = GUP_BENCHMARK; + break; case 'w': write = 1; default: @@ -79,7 +88,7 @@ int main(int argc, char **argv) for (i = 0; i < repeats; i++) { gup.size = size; - if (ioctl(fd, GUP_FAST_BENCHMARK, &gup)) + if (ioctl(fd, cmd, &gup)) perror("ioctl"), exit(1); printf("Time: get:%lld put:%lld us", gup.get_delta_usec, -- 2.14.4