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 8D821C433F5 for ; Thu, 10 Mar 2022 02:06:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 112A08D0002; Wed, 9 Mar 2022 21:06:08 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 0C3568D0001; Wed, 9 Mar 2022 21:06:08 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EF3668D0002; Wed, 9 Mar 2022 21:06:07 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (relay.hostedemail.com [64.99.140.26]) by kanga.kvack.org (Postfix) with ESMTP id E10B58D0001 for ; Wed, 9 Mar 2022 21:06:07 -0500 (EST) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id A16DB606A9 for ; Thu, 10 Mar 2022 02:06:07 +0000 (UTC) X-FDA: 79226836374.04.27C5477 Received: from mail-pf1-f182.google.com (mail-pf1-f182.google.com [209.85.210.182]) by imf03.hostedemail.com (Postfix) with ESMTP id 324DB2000C for ; Thu, 10 Mar 2022 02:06:07 +0000 (UTC) Received: by mail-pf1-f182.google.com with SMTP id s11so3815100pfu.13 for ; Wed, 09 Mar 2022 18:06:06 -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=6cb5VwzpZS2FJaolDfS5K4VNw8/1fNzTw2r8qLa25Gs=; b=YvlsWzWZga23gYKaYW9pfsUDw/WcHPPiWZt2UzN+yFhN/A9E1gtP6pjcdUYGdcbUy8 An4zqqM3CH5m+2oUB7Mm0cWXuaXMAHaU5XujCOr8SBKjecQARfJk9/pUZtJl/EvlWBJ7 L+sxDL7939Y4rCYrbqGUVCQsunWkbFn4bPA5u9dBq8ZQ6UD/BtORb6Pgt1uNfM1z21HD FdWTVXr82eNRtVFaVxx5lFN0+xxn0Lk8sXMMVQHx12rigf37HHwPtXDo/cY69HrcPVCk I+40g9CJy/TXI9Td9lqfvkgGO36OZnIvIsSh/BztEGGJvqfeZNoKMG4ZG7CtF5RMkPbe FANg== 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=6cb5VwzpZS2FJaolDfS5K4VNw8/1fNzTw2r8qLa25Gs=; b=NrX5izxrsKIB2QVeOUFP3NF2UFlQd3HBDp3GwjOcQzb9JZLz/v8Pj6NKx78IjrzOkv B5WzwAMX2bVZQO+GN+DqxXbInKYNzH0PlN9pEE+a1nd4QDGDV9c9P3wWPeQXUBWHrKRi v3MHzog7E4IkmYjE2h8Na0adovGJLoygU6a1l8roCJR0efEkMCKC2OPx2RmWB1ApgNfR V94JJGqWUa00h6ReuGUBHw107M5Sv6pWH7EJhCA64gRoGMa02apbbUn/khU41VkrXHZt wqb/G37aTTzuRpbcTzTXaEju7j968cuQLeW49soLNHlkVoLTgyp+b4p3y/kS7I3WjL0l klXw== X-Gm-Message-State: AOAM533Mbi5r0RxnQTGemG8stuchFQHhqewPQEpQJMtpn2hKXOurQB8r YrJkGskdMgZu3rPEHSxBjTSOpFbVa4WbrC7Ahro= X-Google-Smtp-Source: ABdhPJxrDUPCZhJLNf+3aI32Rq1hB50Q76nOwpHnRYD0HwMoXpcOR5DDGxUVqSYf+nnvCcZwwJcmKlRbmGyd0egNczc= X-Received: by 2002:a63:920f:0:b0:378:9ef8:7978 with SMTP id o15-20020a63920f000000b003789ef87978mr2066585pgd.587.1646877965995; Wed, 09 Mar 2022 18:06:05 -0800 (PST) MIME-Version: 1.0 References: <20220308213417.1407042-1-zokeefe@google.com> <20220308213417.1407042-10-zokeefe@google.com> In-Reply-To: From: Yang Shi Date: Wed, 9 Mar 2022 18:05:54 -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-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 324DB2000C X-Stat-Signature: x43rzczmd73nw1tbyp4qrankkjpuug83 Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=YvlsWzWZ; spf=pass (imf03.hostedemail.com: domain of shy828301@gmail.com designates 209.85.210.182 as permitted sender) smtp.mailfrom=shy828301@gmail.com; dmarc=pass (policy=none) header.from=gmail.com X-HE-Tag: 1646877967-107814 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 Wed, Mar 9, 2022 at 4:46 PM Zach O'Keefe wrote: > > On Wed, Mar 9, 2022 at 3:40 PM Yang Shi wrote: > > > > 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. > > > > Good point. > > > 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? > > > > Sorry, I'm not sure I understand the suggestion here. What this patch > would like to do, is to identify what pmds map thps. This will be > important later, since if a user requests a collapse of an > already-collapsed region, we want to return successfully (even if no > work to be done). Makes sense. > > Maybe there should be a SCAN_PMD_MAPPED used here instead? Just to not > overload SCAN_PAGE_COMPOUND? I see. SCAN_PMD_MAPPED sounds more self-explained and suitable IMHO. > > Though, note that when MADV_COLLAPSE supports file-backed memory, a > similar check for pmd-mapping will need to be made on the file-side of > things. > > > > > > > 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 > > >