Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp4288458ybv; Mon, 10 Feb 2020 16:21:59 -0800 (PST) X-Google-Smtp-Source: APXvYqz1+2/I1Im1/l44Me6mNiLDyf9lcWSV8kNDAJxWJbO1OvwJJgG8Lh97FlBmD6lIUjnGIPFi X-Received: by 2002:a05:6830:1e30:: with SMTP id t16mr3200855otr.220.1581380518988; Mon, 10 Feb 2020 16:21:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1581380518; cv=none; d=google.com; s=arc-20160816; b=W4DuqX/ppbWUjfykfbWoP4+ai2X9oauUN4nzLC5h8Vm5Mg/Lc2oNkl2OwUOzXNUgn+ qhhlIUDAiKr5Vnk4MgC4jSM9x/etjHSf2cVCLBiu1o2GskDwDRl7TEj2ha6kyidxiAWG KFbPBCFYNuCGqccCY7mne+lbiRLIknXLWILLJMcZxWq8ai5/ipCuI5cLbRuSwU9vZ4gf slTVb4Dm7mvAUM08U5f4hXVqsSaI0oV00aq0uLz2CHfzvXe/A+GuPmv/y8mrIFAluO4r 5nsJ6uvMiJs4VAtyZLpYM1DzPcl085LYNVEKmuZkcsdUr4DonJI69lZCyKnBOEIGg9nF WjVA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=3OTREQOKy0gnIvXKXGDvE24tk+qLBMpu/Of2xHZqo/4=; b=filSl28h0bHyK1EjxDD1SwE1G4+0uIuUL32/EsCBBaH+e6xdxvYm3jvp7hCacWZJpa X8skRE4c1GzZ0aUZFrHaZuJN+o8Mgrj9RCJ73yf4ctCAtf1VgvPza/dlc6gzNqC29gKt PczqLzLSP6lb45Yu+9SxgzLQYOVlaUe7cgaY0ngQ2bXoPwkyjmekudkp+BUMFdI+JfNY +B9Uo/jbI0gfO12UThLY9ooelqnCqVzbI7RauXWh2x6xJuQMbDudlr4X9wN7WfiaoVOK xIageQAGj4molXVipYC6YMPYI3Lbi1TUftnbfaxAMlkLYFanYbXpqQkneHuEPkG4FTa8 Z/lw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b="hA6VDB/o"; 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=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l4si878585oib.170.2020.02.10.16.21.45; Mon, 10 Feb 2020 16:21:58 -0800 (PST) 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; dkim=fail header.i=@gmail.com header.s=20161025 header.b="hA6VDB/o"; 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=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727549AbgBKAUG (ORCPT + 99 others); Mon, 10 Feb 2020 19:20:06 -0500 Received: from mail-pl1-f195.google.com ([209.85.214.195]:41142 "EHLO mail-pl1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727508AbgBKAUG (ORCPT ); Mon, 10 Feb 2020 19:20:06 -0500 Received: by mail-pl1-f195.google.com with SMTP id t14so3491325plr.8 for ; Mon, 10 Feb 2020 16:20:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=3OTREQOKy0gnIvXKXGDvE24tk+qLBMpu/Of2xHZqo/4=; b=hA6VDB/o9xlXGxz9a3Jeb+DNW1qd5ufupvTSSjGfmKl1n4YanuCFru5Maw8WqpTWce j4mqh4Darcqmj85XbyBJ9DuxBAgAyn03iQZuG88hqQEV2rOhxb2m4EyqzMNjt2PXHyg7 NUzcPEyyOU8dB0zDP1zV0B+ei6+d//2Mw7xfGgL/H/oT+pZNZySvjnlPZOUuBfXoZxbc n5T/lj5bQ34VSC9MRZy0P/KMoWdJ562jRPrASKJ765OhI6YKnlKUPOe9kdLxpEGGqCxR 9wioDqCp+pHDcytTT5Lgnuq7TfeXC04Z7dUNOKfvIZMnO3FH8JnhPhG7/2NLNVbFNjQP 04HA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :mime-version:content-transfer-encoding; bh=3OTREQOKy0gnIvXKXGDvE24tk+qLBMpu/Of2xHZqo/4=; b=en2JxHmOgHQ6rmemFy3graeogYv8T0IOxUyuDiXMmp/BXAs19BP9G1FrxjcyRmFhcS Xc/DM6Wu9oF1eWsyRfPzE5xsgskstyq0EMuApo7wrv0bCaZxHJ3SGhceV5tA5j8+3DZn /sN8YPgOpOTRlvPlLq2qdlVYvdYG5eCaE+wyGIiYCgSFGQeh/QQ2pHIHpRW1kbuCoYoq 5yU8q0kVkVxXVcdGcGhCPGOdNoGjtHXdduBDV6fyfLhhSuJ+F5I1JZfAFHV1Pa5c596r zPZAxrULfPTnnIVPZn/M7e7xqtjKM27Ual8BrXby5G5FTKTq1lGDcww/OfnhOfx8Ww4F B3Jw== X-Gm-Message-State: APjAAAX8JQlkXv2GJh+wLjbjN0y3Oh1pgUVV/DPHHJqQlyM0XaUY5B6f ywddB+5LzJKG0oGcV7vx6+ntTAOB X-Received: by 2002:a17:90a:fb41:: with SMTP id iq1mr502054pjb.89.1581380404487; Mon, 10 Feb 2020 16:20:04 -0800 (PST) Received: from bbox-1.mtv.corp.google.com ([2620:15c:211:1:3e01:2939:5992:52da]) by smtp.gmail.com with ESMTPSA id c15sm1503020pfo.137.2020.02.10.16.20.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2020 16:20:03 -0800 (PST) From: Minchan Kim To: Andrew Morton Cc: linux-mm , Josef Bacik , Johannes Weiner , Jan Kara , LKML , Minchan Kim Subject: [PATCH] mm: fix long time stall from mm_populate Date: Mon, 10 Feb 2020 16:19:58 -0800 Message-Id: <20200211001958.170261-1-minchan@kernel.org> X-Mailer: git-send-email 2.25.0.225.g125e21ebc7-goog MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Basically, fault handler releases mmap_sem before requesting readahead and then it is supposed to retry lookup the page from page cache with FAULT_FLAG_TRIED so that it avoids the live lock of infinite retry. However, what happens if the fault handler find a page from page cache and the page has readahead marker but are waiting under writeback? Plus one more condition, it happens under mm_populate which repeats faulting unless it encounters error. So let's assemble conditions below. __mm_populate for (...) get_user_pages(faluty_address) handle_mm_fault filemap_fault find a page form page(PG_uptodate|PG_readahead|PG_writeback) it will return VM_FAULT_RETRY continue with faulty_address IOW, it will repeat fault retry logic until the page will be written back in the long run. It makes big spike latency of several seconds. This patch solves the issue by turning off fault retry logic in second trial. Signed-off-by: Minchan Kim --- It was orignated from code review once I have seen several user reports but didn't confirm yet it's the root cause. mm/gup.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/mm/gup.c b/mm/gup.c index 1b521e0ac1de..b3f825092abf 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -1196,6 +1196,7 @@ int __mm_populate(unsigned long start, unsigned long len, int ignore_errors) struct vm_area_struct *vma = NULL; int locked = 0; long ret = 0; + bool tried = false; end = start + len; @@ -1226,14 +1227,18 @@ int __mm_populate(unsigned long start, unsigned long len, int ignore_errors) * double checks the vma flags, so that it won't mlock pages * if the vma was already munlocked. */ - ret = populate_vma_page_range(vma, nstart, nend, &locked); + ret = populate_vma_page_range(vma, nstart, nend, + tried ? NULL : &locked); if (ret < 0) { if (ignore_errors) { ret = 0; continue; /* continue at next VMA */ } break; - } + } else if (ret == 0) + tried = true; + else + tried = false; nend = nstart + ret * PAGE_SIZE; ret = 0; } -- 2.25.0.225.g125e21ebc7-goog