From patchwork Thu Sep 22 22:40:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zach O'Keefe X-Patchwork-Id: 12985912 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 3A9C9ECAAD8 for ; Thu, 22 Sep 2022 22:41:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C96FD940011; Thu, 22 Sep 2022 18:41:05 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id BA7C0940007; Thu, 22 Sep 2022 18:41:05 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A48B7940011; Thu, 22 Sep 2022 18:41:05 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 95133940007 for ; Thu, 22 Sep 2022 18:41:05 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 67788C0B49 for ; Thu, 22 Sep 2022 22:41:05 +0000 (UTC) X-FDA: 79941193290.17.BE3EAFE Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) by imf14.hostedemail.com (Postfix) with ESMTP id 2941A100014 for ; Thu, 22 Sep 2022 22:41:05 +0000 (UTC) Received: by mail-pj1-f73.google.com with SMTP id n11-20020a17090ade8b00b00200ab47f82fso5580226pjv.4 for ; Thu, 22 Sep 2022 15:41:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date; bh=yfmQyCpPKoozqzWfXY5DtmVT4vjPpKAbwFoVy0wbyyY=; b=jgxIKy0YnIHXFu7DxVvRJF6oQBx1pTOqEYXftlCJey9nT6iUS3R6jcjq/aEUZAp8jj kobCKngbcpA8+rJaJfm3kD6GMY1LeQJBxQL/4wwCXYAq+2O1P/sQSSi3pZCl+ikexaSE fP9W1AVrmYow9I0eu5zMFEk3eioPkgwaI5AIOdzr+/Ocmc6LQK1eapuu2RE+/aa+kuzM 325FrgT+Ci4Hm9rqbt+QWDaOwOuQJ6FkIbDWW+mKjVqONLtmwWkjvjd3hdSb5sBlYR9T MUygV+LTmuwWsKA30a4i11osCLlc8sXzy6v5fgbxdPR00x4r+c5xfVuMScs2oyfp68cb BCVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date; bh=yfmQyCpPKoozqzWfXY5DtmVT4vjPpKAbwFoVy0wbyyY=; b=R1Cl7Bw6FXPkEcS07uqVaOTQrIvyZsbxGVykMRyRhqL/ZwnSK3cMHVMhTjHWURpG7C B+N9mq9ShZmNqUl7d9U1DNtVX9C5M3PE44XK6atjR11pRsD9ZdDxuioOeqxHam+rT1jr pD7DPxRxxBtAl86rahTIidVvecbnQw2DU1yRJAB3Sho6W0bpifGLFayukf3KxvPdbBw0 K9PbdbPnkIKJVimA6sX+no3W8myI2KF9PgcxsZo8Ck1wZ3mjleq11hPJ3uAmOQ5H0vne aN9pI8H+qIMJ3JF1YSMxWYnNn9o/UIulNkbp8DlUy1dcP/1pjr+M4fmtiJIAygvkn40a rPWg== X-Gm-Message-State: ACrzQf2uOhBg0o3V724EuaxwDK1xft6Ff5bSAGtMiUulMaMXngvspt/X a5r9ocPqEyszrKr8SGuzSdtnvMEwZzo9 X-Google-Smtp-Source: AMsMyM5rA5SRcjBMelsf8wDZWEADHxT93l2AGD6ACCrsVyFwSGH2llPq6lqi9pl/KA6T+2jXlVBAt37kyyW/ X-Received: from zokeefe3.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:1b6]) (user=zokeefe job=sendgmr) by 2002:a62:1e83:0:b0:545:6896:188 with SMTP id e125-20020a621e83000000b0054568960188mr5680742pfe.51.1663886464257; Thu, 22 Sep 2022 15:41:04 -0700 (PDT) Date: Thu, 22 Sep 2022 15:40:45 -0700 In-Reply-To: <20220922224046.1143204-1-zokeefe@google.com> Mime-Version: 1.0 References: <20220922224046.1143204-1-zokeefe@google.com> X-Mailer: git-send-email 2.37.3.998.g577e59143f-goog Message-ID: <20220922224046.1143204-10-zokeefe@google.com> Subject: [PATCH mm-unstable v4 09/10] selftests/vm: add file/shmem MADV_COLLAPSE selftest for cleared pmd From: "Zach O'Keefe" To: Andrew Morton Cc: linux-mm@kvack.org, linux-api@vger.kernel.org, Axel Rasmussen , James Houghton , Hugh Dickins , Yang Shi , Miaohe Lin , David Hildenbrand , David Rientjes , Matthew Wilcox , Pasha Tatashin , Peter Xu , Rongwei Wang , SeongJae Park , Song Liu , Vlastimil Babka , Chris Kennelly , "Kirill A. Shutemov" , Minchan Kim , Patrick Xia ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1663886465; a=rsa-sha256; cv=none; b=B7HMhqE7K6tvfETdKoyumzNjrfWBti4iJDBbmQThMiY+wAazg35fjpMD0kIY8pK602HwaS FT2Z+VihaBOhgfsiKn7vjPmlvB76A7Xc2xI7kI9m9wsR2/f/n6UMCvWmcNAPSkHelK8Bo0 8MQPutN9VTK0BqB0HTJXxDkXwhHH2nA= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=jgxIKy0Y; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf14.hostedemail.com: domain of 3gOQsYwcKCB0SHD77879HH9E7.5HFEBGNQ-FFDO35D.HK9@flex--zokeefe.bounces.google.com designates 209.85.216.73 as permitted sender) smtp.mailfrom=3gOQsYwcKCB0SHD77879HH9E7.5HFEBGNQ-FFDO35D.HK9@flex--zokeefe.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1663886465; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=yfmQyCpPKoozqzWfXY5DtmVT4vjPpKAbwFoVy0wbyyY=; b=4OHW7ezCr0X2g9me0gHGXzMRAekMvJQDcOMCX5Reeu98/v1fKU9ilebrJzEaxt4+kSNFNj RiGR0fZ28nFsVfZgQUD4sMxbNGRKTX86cxCKNShsbhZpBsV2DXpwUk3xpOGGPI6GujNQ62 DXZCJzQn24kCp0364pVrNIVVPz9H8r4= X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 2941A100014 X-Rspam-User: Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=jgxIKy0Y; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf14.hostedemail.com: domain of 3gOQsYwcKCB0SHD77879HH9E7.5HFEBGNQ-FFDO35D.HK9@flex--zokeefe.bounces.google.com designates 209.85.216.73 as permitted sender) smtp.mailfrom=3gOQsYwcKCB0SHD77879HH9E7.5HFEBGNQ-FFDO35D.HK9@flex--zokeefe.bounces.google.com X-Stat-Signature: tnwinthe8if73obqu3a4t6wyhn4zny4j X-HE-Tag: 1663886464-791987 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: This test tests that MADV_COLLAPSE acting on file/shmem memory for which (1) the file extent mapping by the memory is already a huge page in the page cache, and (2) the pmd mapping this memory in the target process is none. In practice, (1)+(2) is the state left over after khugepaged has successfully collapsed file/shmem memory for a target VMA, but the memory has not yet been refaulted. So, this test in-effect tests MADV_COLLAPSE racing with khugepaged to collapse the memory first. Link: https://lkml.kernel.org/r/20220907144521.3115321-10-zokeefe@google.com Signed-off-by: Zach O'Keefe Cc: Axel Rasmussen Cc: Chris Kennelly Cc: David Hildenbrand Cc: David Rientjes Cc: Hugh Dickins Cc: James Houghton Cc: "Kirill A. Shutemov" Cc: Matthew Wilcox Cc: Miaohe Lin Cc: Minchan Kim Cc: Pasha Tatashin Cc: Peter Xu Cc: Rongwei Wang Cc: SeongJae Park Cc: Song Liu Cc: Vlastimil Babka Cc: Yang Shi --- tools/testing/selftests/vm/khugepaged.c | 30 +++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tools/testing/selftests/vm/khugepaged.c b/tools/testing/selftests/vm/khugepaged.c index eabbd2710096..64126c8cd561 100644 --- a/tools/testing/selftests/vm/khugepaged.c +++ b/tools/testing/selftests/vm/khugepaged.c @@ -1353,6 +1353,33 @@ static void madvise_collapse_existing_thps(struct collapse_context *c, ops->cleanup_area(p, hpage_pmd_size); } +/* + * Test race with khugepaged where page tables have been retracted and + * pmd cleared. + */ +static void madvise_retracted_page_tables(struct collapse_context *c, + struct mem_ops *ops) +{ + void *p; + int nr_hpages = 1; + unsigned long size = nr_hpages * hpage_pmd_size; + + p = ops->setup_area(nr_hpages); + ops->fault(p, 0, size); + + /* Let khugepaged collapse and leave pmd cleared */ + if (wait_for_scan("Collapse and leave PMD cleared", p, nr_hpages, + ops)) { + fail("Timeout"); + return; + } + success("OK"); + c->collapse("Install huge PMD from page cache", p, nr_hpages, ops, + true); + validate_memory(p, 0, size); + ops->cleanup_area(p, size); +} + static void usage(void) { fprintf(stderr, "\nUsage: ./khugepaged [dir]\n\n"); @@ -1524,5 +1551,8 @@ int main(int argc, const char **argv) TEST(madvise_collapse_existing_thps, madvise_context, file_ops); TEST(madvise_collapse_existing_thps, madvise_context, shmem_ops); + TEST(madvise_retracted_page_tables, madvise_context, file_ops); + TEST(madvise_retracted_page_tables, madvise_context, shmem_ops); + restore_settings(0); }