From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.6 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0DFCAC43331 for ; Mon, 30 Mar 2020 18:30:29 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id C738E20714 for ; Mon, 30 Mar 2020 18:30:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="WJa5CITi" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C738E20714 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 6495E6B000C; Mon, 30 Mar 2020 14:30:28 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5F88C8E0001; Mon, 30 Mar 2020 14:30:28 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 50FB56B0037; Mon, 30 Mar 2020 14:30:28 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0109.hostedemail.com [216.40.44.109]) by kanga.kvack.org (Postfix) with ESMTP id 3AD996B000C for ; Mon, 30 Mar 2020 14:30:28 -0400 (EDT) Received: from smtpin24.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id CCC7C180AD81A for ; Mon, 30 Mar 2020 18:30:27 +0000 (UTC) X-FDA: 76652868894.24.paint13_401eb204783c X-HE-Tag: paint13_401eb204783c X-Filterd-Recvd-Size: 5244 Received: from mail-ed1-f68.google.com (mail-ed1-f68.google.com [209.85.208.68]) by imf02.hostedemail.com (Postfix) with ESMTP for ; Mon, 30 Mar 2020 18:30:27 +0000 (UTC) Received: by mail-ed1-f68.google.com with SMTP id e5so21980775edq.5 for ; Mon, 30 Mar 2020 11:30:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=zSbITaAyAzmhAT6gpCYOeXzgKkCsXrLUD6omquEuTqY=; b=WJa5CITi4iYXQT1Z7o4OzTgnLf9uIecH9M0QpLD3CUdOq7e664RYV+SuoFfPVnNH3o KiKmmmBeZNXR+i4pwta9kGEry09HnXz+ABQ6KJk0t/REVFppsHl27jPJSpg0sWDoRcW6 CXpQRfWPIGJuf3Y8VzLa8/MrBYSe/VkaONHzl3trkyhkyFxkzpbDEAHVB1PxcnGyf78Z GgjDy9diqWeW/QAOyksDi0LUSQ6Ksne7EhwnKhF/6hCmqNWg4v6aDnMOZXz4qCtjC2a1 4UCj+xFpG1F9Rk+QYsnBJgE672PIOTGV+WQSbnr1fYytOk2aEaPEnFjqi7l1W4HklniK I/kA== 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=zSbITaAyAzmhAT6gpCYOeXzgKkCsXrLUD6omquEuTqY=; b=JYyKlM3Lz/ri1M5jM+SItytvvHa6Kbo0Qs9HzMY7RfV3BMy+3xvdInX+p15Hkrd+XI UtI2y/d5Gfp5nKZt0/pQlbhRvRUcjRSSIDyDp/uoa7wS6oAZl6t2DCwcZEhtZpw/882R UKhfUqN/P3fw3B0G6pQLko/SdP0KcBZSFD6c87cMhHa0qfPVgRN53xy1tvhbl2p2iYcp XHU7TNLOFGZMAli0bgXUE5vK9H/oC/az1e421wjoUdDq/+u9ZZjyhAaP5JXV8l1L+ved KboGy/L5mSicM0cs9/FOJPrgr1olCG6ht8tQIgjYlzBBmwwo0PwRxjffqx60b/MLl1n/ Tbcw== X-Gm-Message-State: ANhLgQ351BaQWEXmZFdIUYZhceA2JTChEeDnbOgMDMNB0rswsIIU4FEr 4HfemSpanI7Y/1LX2PcX6NAvJoTRqMD7bkThlcY= X-Google-Smtp-Source: ADFU+vuhTUFdM1bVr6g91y2tJylCPswBKWptZak/mV7zcR39OOhbOtoX54vMXfqsQpfKbQ8kdyxTUj3UC0HiM6Tg5YM= X-Received: by 2002:a17:906:d7a6:: with SMTP id pk6mr6255024ejb.309.1585593026220; Mon, 30 Mar 2020 11:30:26 -0700 (PDT) MIME-Version: 1.0 References: <20200327170601.18563-1-kirill.shutemov@linux.intel.com> <20200327170601.18563-4-kirill.shutemov@linux.intel.com> <20200328121829.kzmcmcshbwynjmqc@box> In-Reply-To: <20200328121829.kzmcmcshbwynjmqc@box> From: Yang Shi Date: Mon, 30 Mar 2020 11:30:14 -0700 Message-ID: Subject: Re: [PATCH 3/7] khugepaged: Drain LRU add pagevec to get rid of extra pins To: "Kirill A. Shutemov" Cc: Andrew Morton , Andrea Arcangeli , Linux MM , Linux Kernel Mailing List , "Kirill A. Shutemov" Content-Type: text/plain; charset="UTF-8" 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: On Sat, Mar 28, 2020 at 5:18 AM Kirill A. Shutemov wrote: > > On Fri, Mar 27, 2020 at 11:10:40AM -0700, Yang Shi wrote: > > On Fri, Mar 27, 2020 at 10:06 AM Kirill A. Shutemov > > wrote: > > > > > > __collapse_huge_page_isolate() may fail due to extra pin in the LRU add > > > pagevec. It's petty common for swapin case: we swap in pages just to > > > fail due to the extra pin. > > > > > > Signed-off-by: Kirill A. Shutemov > > > --- > > > mm/khugepaged.c | 8 ++++++++ > > > 1 file changed, 8 insertions(+) > > > > > > diff --git a/mm/khugepaged.c b/mm/khugepaged.c > > > index 14d7afc90786..39e0994abeb8 100644 > > > --- a/mm/khugepaged.c > > > +++ b/mm/khugepaged.c > > > @@ -585,11 +585,19 @@ static int __collapse_huge_page_isolate(struct vm_area_struct *vma, > > > * The page must only be referenced by the scanned process > > > * and page swap cache. > > > */ > > > + if (page_count(page) != 1 + PageSwapCache(page)) { > > > + /* > > > + * Drain pagevec and retry just in case we can get rid > > > + * of the extra pin, like in swapin case. > > > + */ > > > + lru_add_drain(); > > > > This is definitely correct. > > > > I'm wondering if we need one more lru_add_drain() before PageLRU check > > in khugepaged_scan_pmd() or not? The page might be in lru cache then > > get skipped. This would improve the success rate. > > Could you elaborate on the scenario, I don't follow. I mean the below change: --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -1195,6 +1195,9 @@ static int khugepaged_scan_pmd(struct mm_struct *mm, goto out_unmap; } khugepaged_node_load[node]++; + if (!PageLRU(page)) + /* Flush the page out of lru cache */ + lru_add_drain(); if (!PageLRU(page)) { result = SCAN_PAGE_LRU; goto out_unmap; If the page is not on LRU we even can't reach collapse_huge_page(), right? > > > -- > Kirill A. Shutemov