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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7F447C433EF for ; Wed, 9 Mar 2022 23:40:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D6F2B8D0002; Wed, 9 Mar 2022 18:40:53 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id D1DA38D0001; Wed, 9 Mar 2022 18:40:53 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BE5DF8D0002; Wed, 9 Mar 2022 18:40:53 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (relay.hostedemail.com [64.99.140.27]) by kanga.kvack.org (Postfix) with ESMTP id AFC468D0001 for ; Wed, 9 Mar 2022 18:40:53 -0500 (EST) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 748C720708 for ; Wed, 9 Mar 2022 23:40:53 +0000 (UTC) X-FDA: 79226470386.13.21BEDE7 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) by imf29.hostedemail.com (Postfix) with ESMTP id 0373E120014 for ; Wed, 9 Mar 2022 23:40:52 +0000 (UTC) Received: by mail-pl1-f179.google.com with SMTP id h5so1970443plf.7 for ; Wed, 09 Mar 2022 15:40:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=0xh5rx/mjBqngucGjOcDkMuvJLDURDG9M7T2TTDFbBs=; b=C37+knij8krC46nwl9TXnwfwXP9GBKxYXhifDM7BX4ycJ5S9AdcTmAvLkEUEiRGoSZ ISdeZ13GtOhuAcZ95Xy3zbHIhPyvjCJ22fg5lTfkWQVV4aep4qHEXGBoiTaFJO35tWqR MijOLgbaOvlJAUmcGZmo/ggslL2vq2tkAS5sEKrCleZYp74ZXKZVpnO+qg/RLtRSdZl/ dyhw5g+knCEgsyp9vPwzDhMACZ+w1buo70PphXHPcQL3cPtwXFiyJaME4KKJKbn9FxIs QIFa09vcmju+E5MhO7PipUpSmE7qGqLiRLerdx88IdtOyOBcp5EKsRlJaR2uL5VnM4Vp KH3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=0xh5rx/mjBqngucGjOcDkMuvJLDURDG9M7T2TTDFbBs=; b=NCn9KyTMsvaljVSkF/3fA2t5F3gBf/nZvlqNyesDV+3WqTAh8MLlDSmzTw9mbuyV35 XcFjgrj9qTwjkiEwD7JkD5mxNiaYKYNwtqbye7Bl+JOES6+oWELQJgU9Yl6PtYkaL5SR nqJ1+HqmbcbyYfTw/G0Ly3vVeogaHIkhFx1CuPixThnzF9IHcg9Bzbwy8x22xxwJE1fV NNV2u8NKgIIW+Cob2fbv1gFiFyqXDGxkLlfVT1epXNvuFqjY5miWW35JLnxhMfXtveXW 8lpDnXxW/lOREjt+aOP8mj47aYUgXwG2uIB/24q/RtsCJTkWocwr1SdDNNyA/P/L5/Ua uWHA== X-Gm-Message-State: AOAM533DiMuQVbqQy++mKidZhHiINTYUaN6CDkVziMNg1Tn3Zm3w2dcc FuGsUf3lI0nOovjmThRBvi5s+2gexgAkiun/Dxs= X-Google-Smtp-Source: ABdhPJyCSOlGNfQSv2CzYZNN5DgJAVM++xlrRdQmzkTb+Ulpbh1AtsdWkRMI286MtLIj3wJNrWVlGrKW/vpBBn3Kkug= X-Received: by 2002:a17:90a:3906:b0:1bf:a0a6:d208 with SMTP id y6-20020a17090a390600b001bfa0a6d208mr8468089pjb.21.1646869251973; Wed, 09 Mar 2022 15:40:51 -0800 (PST) MIME-Version: 1.0 References: <20220308213417.1407042-1-zokeefe@google.com> <20220308213417.1407042-10-zokeefe@google.com> In-Reply-To: <20220308213417.1407042-10-zokeefe@google.com> From: Yang Shi Date: Wed, 9 Mar 2022 15:40:40 -0800 Message-ID: Subject: Re: [RFC PATCH 09/14] mm/khugepaged: record SCAN_PAGE_COMPOUND when scan_pmd() finds THP To: "Zach O'Keefe" Cc: Alex Shi , David Hildenbrand , David Rientjes , Michal Hocko , Pasha Tatashin , SeongJae Park , Song Liu , Vlastimil Babka , Zi Yan , Linux MM , Andrea Arcangeli , Andrew Morton , Arnd Bergmann , Axel Rasmussen , Chris Kennelly , Chris Zankel , Helge Deller , Hugh Dickins , Ivan Kokshaysky , "James E.J. Bottomley" , Jens Axboe , "Kirill A. Shutemov" , Matthew Wilcox , Matt Turner , Max Filippov , Miaohe Lin , Minchan Kim , Patrick Xia , Pavel Begunkov , Peter Xu , Richard Henderson , Thomas Bogendoerfer Content-Type: text/plain; charset="UTF-8" X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: 0373E120014 X-Rspam-User: Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=C37+knij; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf29.hostedemail.com: domain of shy828301@gmail.com designates 209.85.214.179 as permitted sender) smtp.mailfrom=shy828301@gmail.com X-Stat-Signature: u59mocoiefeccj8zmt1g5q7hobmotk6o X-HE-Tag: 1646869252-763901 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 Tue, Mar 8, 2022 at 1:35 PM Zach O'Keefe wrote: > > When scanning an anon pmd to see if it's eligible for collapse, return > SCAN_PAGE_COMPOUND if the pmd already maps a thp. This is consistent > with handling when scanning file-backed memory. I'm not quite keen that we have to keep anon consistent with file for this case. SCAN_PAGE_COMPOUND typically means the page is compound page, but PTE mapped. And even SCAN_PMD_NULL is not returned every time when mm_find_pmd() returns NULL. In addition, SCAN_PMD_NULL seems ambiguous to me. The khugepaged actually sees non-present (migration) entry or trans huge entry, so may rename it to SCAN_PMD_NOT_SUITABLE? > > Signed-off-by: Zach O'Keefe > --- > mm/khugepaged.c | 41 +++++++++++++++++++++++++++++++++++------ > 1 file changed, 35 insertions(+), 6 deletions(-) > > diff --git a/mm/khugepaged.c b/mm/khugepaged.c > index ecbd3fc41c80..403578161a3b 100644 > --- a/mm/khugepaged.c > +++ b/mm/khugepaged.c > @@ -1011,6 +1011,38 @@ static int hugepage_vma_revalidate(struct mm_struct *mm, unsigned long address, > vm_flags_ignore, vmap); > } > > +/* > + * If returning NULL (meaning the pmd isn't mapped, isn't present, or thp), > + * write the reason to *result. > + */ > +static pmd_t *find_pmd_or_thp_or_none(struct mm_struct *mm, > + unsigned long address, > + int *result) > +{ > + pmd_t *pmd = mm_find_pmd_raw(mm, address); > + pmd_t pmde; > + > + if (!pmd) { > + *result = SCAN_PMD_NULL; > + return NULL; > + } > + > + pmde = pmd_read_atomic(pmd); > + > +#ifdef CONFIG_TRANSPARENT_HUGEPAGE > + /* See comments in pmd_none_or_trans_huge_or_clear_bad() */ > + barrier(); > +#endif > + if (!pmd_present(pmde) || !pmd_none(pmde)) { > + *result = SCAN_PMD_NULL; > + return NULL; > + } else if (pmd_trans_huge(pmde)) { > + *result = SCAN_PAGE_COMPOUND; > + return NULL; > + } > + return pmd; > +} > + > /* > * Bring missing pages in from swap, to complete THP collapse. > * Only done if khugepaged_scan_pmd believes it is worthwhile. > @@ -1212,9 +1244,8 @@ static void collapse_huge_page(struct mm_struct *mm, > goto out_nolock; > } > > - pmd = mm_find_pmd(mm, address); > + pmd = find_pmd_or_thp_or_none(mm, address, &result); > if (!pmd) { > - result = SCAN_PMD_NULL; > mmap_read_unlock(mm); > goto out_nolock; > } > @@ -1287,11 +1318,9 @@ static void scan_pmd(struct mm_struct *mm, > mmap_assert_locked(mm); > VM_BUG_ON(address & ~HPAGE_PMD_MASK); > > - pmd = mm_find_pmd(mm, address); > - if (!pmd) { > - scan_result->result = SCAN_PMD_NULL; > + pmd = find_pmd_or_thp_or_none(mm, address, &scan_result->result); > + if (!pmd) > goto out; > - } > > memset(cc->node_load, 0, sizeof(cc->node_load)); > pte = pte_offset_map_lock(mm, pmd, address, &ptl); > -- > 2.35.1.616.g0bdcbb4464-goog >