From patchwork Thu Nov 29 16:29:30 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Stancek X-Patchwork-Id: 1005529 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=lists.linux.it (client-ip=213.254.12.146; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Received: from picard.linux.it (picard.linux.it [213.254.12.146]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 435NK93kfYz9s55 for ; Fri, 30 Nov 2018 03:29:49 +1100 (AEDT) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id EC04E3E768C for ; Thu, 29 Nov 2018 17:29:46 +0100 (CET) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-6.smtp.seeweb.it (in-6.smtp.seeweb.it [IPv6:2001:4b78:1:20::6]) by picard.linux.it (Postfix) with ESMTP id 9B4F63E7638 for ; Thu, 29 Nov 2018 17:29:45 +0100 (CET) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by in-6.smtp.seeweb.it (Postfix) with ESMTPS id 31146140199F for ; Thu, 29 Nov 2018 17:29:43 +0100 (CET) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7D7B231256A6 for ; Thu, 29 Nov 2018 16:29:41 +0000 (UTC) Received: from dustball.brq.redhat.com (unknown [10.34.247.147]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9BFB360165; Thu, 29 Nov 2018 16:29:40 +0000 (UTC) From: Jan Stancek To: ltp@lists.linux.it Date: Thu, 29 Nov 2018 17:29:30 +0100 Message-Id: <12d3ccf40055c225b97a4a94ed1c6a46d4fd2048.1543508512.git.jstancek@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.46]); Thu, 29 Nov 2018 16:29:41 +0000 (UTC) X-Virus-Scanned: clamav-milter 0.99.2 at in-6.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=-0.0 required=7.0 tests=SPF_HELO_PASS,SPF_PASS autolearn=disabled version=3.4.0 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on in-6.smtp.seeweb.it Cc: liwan@redhat.com Subject: [LTP] [PATCH] syscalls/migrate_pages03: skip migratition of shared pages X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.18 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" Fixes: #431 Migrating shared pages (as root) includes also executable pages (glibc, etc.) Kernel might need to invalidate icache, which can be an expensive operation on some architectures (arm64). This test is repeating migration thousands of times, and because migration (and icache flush) runs for each page, it all stacks up and test is hitting a timeout. It's enough for this reproducer to migrate pages it allocates and merges (via KSM), so do the migration as unprivileged user and we can avoid the overhead of migrating everything. Such scenario is already covered by migrate_pages02. Signed-off-by: Jan Stancek Reviewed-by: Li Wang --- testcases/kernel/syscalls/migrate_pages/migrate_pages03.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/testcases/kernel/syscalls/migrate_pages/migrate_pages03.c b/testcases/kernel/syscalls/migrate_pages/migrate_pages03.c index ecfc55288691..7317b11283d8 100644 --- a/testcases/kernel/syscalls/migrate_pages/migrate_pages03.c +++ b/testcases/kernel/syscalls/migrate_pages/migrate_pages03.c @@ -33,6 +33,7 @@ #include #include #include +#include #include "tst_test.h" #include "lapi/syscalls.h" @@ -52,6 +53,8 @@ static void *test_pages[N_PAGES]; static int num_nodes, max_node; static int *nodes; static unsigned long *new_nodes[2]; +static const char nobody_uid[] = "nobody"; +static struct passwd *ltpuser; static void setup(void) { @@ -69,6 +72,8 @@ static void setup(void) TEST_NODES); } + ltpuser = SAFE_GETPWNAM(nobody_uid); + max_node = LTP_ALIGN(get_max_node(), sizeof(unsigned long) * 8); nodemask_size = max_node / 8; new_nodes[0] = SAFE_MALLOC(nodemask_size); @@ -125,6 +130,7 @@ static void migrate_test(void) { int loop, i, ret; + SAFE_SETEUID(ltpuser->pw_uid); for (loop = 0; loop < N_LOOPS; loop++) { i = loop % 2; ret = tst_syscall(__NR_migrate_pages, 0, max_node, @@ -134,6 +140,7 @@ static void migrate_test(void) return; } } + SAFE_SETEUID(0); tst_res(TPASS, "migrate_pages() passed"); }