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 87A0AC4345F for ; Fri, 26 Apr 2024 20:43:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0EAE86B008A; Fri, 26 Apr 2024 16:43:10 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 074886B008C; Fri, 26 Apr 2024 16:43:10 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E2FF56B0092; Fri, 26 Apr 2024 16:43:09 -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 C29196B008A for ; Fri, 26 Apr 2024 16:43:09 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 6FF7E12021A for ; Fri, 26 Apr 2024 20:43:09 +0000 (UTC) X-FDA: 82052857698.07.1E07ED3 Received: from mail-ed1-f43.google.com (mail-ed1-f43.google.com [209.85.208.43]) by imf15.hostedemail.com (Postfix) with ESMTP id 050C9A0025 for ; Fri, 26 Apr 2024 20:43:06 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=eqCDQvBZ; spf=pass (imf15.hostedemail.com: domain of shy828301@gmail.com designates 209.85.208.43 as permitted sender) smtp.mailfrom=shy828301@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1714164187; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ueA8BocmTSJNHsyrYj2TNISaWPcMWAXxPevjbN2I4Kk=; b=vtBYN7cG1nhdbPzQM0apN0zeMs30eOX6zFFqUcovf0HXPi/6wpmvGKj/AZzqygs5C9+hPH jQIrAgV9pB6/VOih0npmPmom7AOPOq2Pgx7TemUReo6pF6Ghi82Joz3R6PNerIkEX/6dUQ jh6SAh/casoJQCPSNsTSZnnXUgU++L0= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=eqCDQvBZ; spf=pass (imf15.hostedemail.com: domain of shy828301@gmail.com designates 209.85.208.43 as permitted sender) smtp.mailfrom=shy828301@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1714164187; a=rsa-sha256; cv=none; b=W2jkrG3Wl9HvvyOAbBwtikybQ5hlJssuntdjWqZeF3xFnzya0aPBkyuGkxlRA9YV0FfZz0 jzTZ6GFmgcSaPwXElr1eIWISqU/YaUukYIP6JC9B+YxWHOaGqPZ4TW4SJIofy09LDJDALg 0Yw6Vv149TMTkniVfMB6fC4tO5w1k8s= Received: by mail-ed1-f43.google.com with SMTP id 4fb4d7f45d1cf-57225322312so3708235a12.1 for ; Fri, 26 Apr 2024 13:43:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1714164185; x=1714768985; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=ueA8BocmTSJNHsyrYj2TNISaWPcMWAXxPevjbN2I4Kk=; b=eqCDQvBZqqlbFCoj6b9tZTY+yAwfIUBfV7wNHZP2jIIEpnGh2Vs0BthUR8G/dfIYrR dI8ICubV50yZw3ZYwvB5Usi5thbP24cjru/dC9bfuESCiL9hNJeRwHIiTKvPuUYEozC8 o9DU7gMoBRdjkXKpTDHVuIl8+7rvZfN6EiQKdLbQ2UlpY7e2wCm8qQCW5YhMSoAuSslW P5WXXYhqjv2gjZ/QvnxCVwicU/KPe6WmPFxwPuLEtlYuwXiCKKMYREihQyU2ml6DMXrS r1p0HmNXX8Lp0zWbQrvQMdwQjrYVDwWdCHfeZLA9StIMt8fECIfBQS90Da27qMoBZS70 L+pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714164185; x=1714768985; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ueA8BocmTSJNHsyrYj2TNISaWPcMWAXxPevjbN2I4Kk=; b=cpdG1RPUgRgFXEs/E4Kxofe1xjwNdL/gAT8ww/9IgukOR+awksNEu/acuEh2BDFh8i +97aqxhGPR4emfb0mM2ITb0z754RzX0Q7SpH4DpLM6u+VqYSjPG/MYqLhhCjwAbW1rZQ 8y3Ye4VaqxkFjgnOh2mjdVMWnfIcvq9BaQlgCD3g6ILDKA3Vd6pR5Kbj8DiIVY4vxuSZ HFla/uScqlitAnCnHdP1rCbOcA//q6uKzxUTXyOQWWgQ6d8nHpyFMFxQ21rIUt+DAZD8 EfqFBvcr3PXiBq/cM2kmrPEpPm11iKaknOJ3KeR5ERKfqAKlhbBvQrlGuit8u1N2902p d93Q== X-Forwarded-Encrypted: i=1; AJvYcCUvi9v7/+oX4ONh4zQQrFA17dmt8wyQf83RUFcJXOXbGE1CZeXC54kh5JfPELYL2+FTu1wN5c4eE9cDmI5dzCL414g= X-Gm-Message-State: AOJu0Ywc1t97XG1/SepROwdWewzJuRyM6J5jgHFLlDUtEG1F0TP8fmDJ MJMc54ZjnwZgSPmVFRIQv2iHp678M11IpaK0G0EZgmq91BKi91iA7juOrM2tvDppnBY5EFo7rLz bJWpuSTbTs0I0v0QB2E4PZseYFug= X-Google-Smtp-Source: AGHT+IHtHDw+SuBuLCHF9dQ3rXR8SAurLqm91cNlAtwclmb1U5hypuDEGRG0X0bZJKfBAiNEWJtfqCEAmUnDwh4c7RI= X-Received: by 2002:a50:d651:0:b0:572:47be:be36 with SMTP id c17-20020a50d651000000b0057247bebe36mr2476472edj.0.1714164185112; Fri, 26 Apr 2024 13:43:05 -0700 (PDT) MIME-Version: 1.0 References: <20240426190253.541419-1-zi.yan@sent.com> In-Reply-To: <20240426190253.541419-1-zi.yan@sent.com> From: Yang Shi Date: Fri, 26 Apr 2024 13:42:53 -0700 Message-ID: Subject: Re: [PATCH v5] mm/rmap: do not add fully unmapped large folio to deferred split list To: Zi Yan Cc: Andrew Morton , linux-mm@kvack.org, "Matthew Wilcox (Oracle)" , Ryan Roberts , Barry Song <21cnbao@gmail.com>, David Hildenbrand , Lance Yang , linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Stat-Signature: nr43yqn8um6wywtgxjmgjqwawfjdc7ft X-Rspam-User: X-Rspamd-Queue-Id: 050C9A0025 X-Rspamd-Server: rspam05 X-HE-Tag: 1714164186-311595 X-HE-Meta: U2FsdGVkX19bRCyg8KeQEzzSk8kbDUZUylmm900o1eX70FE75D92qcIOm7CiqBXkFTXsat9YDA9brW1UTuu4K1f4eJUietP3roRp6I/V8UkurYznWbkO9kKzdiVRKJXdx1eMJybU80jejShlVEuIomd2p3UJg9wGTgGK1WAnzLz1UOJ8bYXtE/CWgYl2OCswFdB9K/Hr10mVfZvGnba3IH0X2LrzmIaDR8NKX26LGqDQPuGboDPxk9AZgJqGGBhWmAqLkkI8u5+fHDRmYAO0TWEVkRai1tA3/MgwzwsIH92MCqfQOkkqUPVrIpVvRQQ0C87SNoN2zKLs/BzSaJJ5l+FV24LNOfuKrMPP+Bp2lPehimCeruTweWI4vDsUNHo3rLIbNo8smTsANfop4MexhyUNVHSS3gcCbOjGnWNd7GWbAJ4x56upLeneIxCHbbts3/hNNpSJkdhywVJS/hk+uFJZB5FPYFXS+V9TvdZowWcRRrnpsCrkPwenQT3IGwKaDVUxJzsH2zgx2hzPbkgwxE2QgVvDutRYmnUNTdQsY/JHlRPdn8CNuwjCq0EcdDet5Wr+YAAu2D1tSeMfeKDgIClVR/tKCxyXst9C2A67EEoPZvcp0RhScVeS+LVXYOCaNdc9u6bOV6VNe4giCOs3a5Y8f40Ah+uJ9fxGDufFbMpJ/k0MYD1bHwUnV6M+Qj2xEdJPVSmZt7Cyt9SHcQdZA9TL6ppizTzSN4WGsLmmDZYaiBLAlEH/IqYL6GyZ0j9aDrjc36ZNLKbNSGtS9Z0p+pZKexR2DNnUc6I7BpgwV73RvGN/NUcp2YMdww+jZp/b4eE8oskkL1PEKRfmNSy7Y9WTfpGMV25fQJVEGqQrXbMEGjXXCLVBjoahmf9OUQPrIU2wG6WkgI/T2Etx1t4eW/LIWGGBkbeS1LIwDzhZzj++lnGYRivdrXmH/BpHRyG/k8qx9L+My1hKEpSMPUs 7g146+lM oyOr61tUsxBbhz6oOT1/YCOX03AQ9Cb031fFBn0PjMrlqRabBCfTOs9Jw2TqWAEn9chLA/tgr/fsBGe6VxjeixQb7lSbHSs1giymMi3ykOYFVtH+Pt45+roEX61mIRrrK+jNL9j459h3NTtKKWerdPVn+bDse844X7eoPbPiPeH7z7Sq5CePsMCljgCt8wPRrDkWGvFvGIvoJBiryK/qhTpOHjaorTzQ86LwwHuvnbWPWRfCEbYfaWb5V7QBEaVGpwb8GpED+ETbR078gS1g9NdjZijzC8cKY4bhcd63GszZrSaJb7xTcu6GnmPCFj2n6gUN5zCdGZdkkRt9u9UjiguMzM0Vkkvzwqw8yFGpJeFApjx1q/S98LefHyBSwD9v7T0JLMO6P0duvlFwLVVjQncjZklS0pnMo4fqQwBPkFSY+zqQGIAGMp+2/oy8s+A5EKEQrFj0ogbe19fSHFIoPIBXBTub5eGqOGj3A 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: List-Subscribe: List-Unsubscribe: On Fri, Apr 26, 2024 at 12:02=E2=80=AFPM Zi Yan wrote: > > From: Zi Yan > > In __folio_remove_rmap(), a large folio is added to deferred split list > if any page in a folio loses its final mapping. But it is possible that > the folio is fully unmapped and adding it to deferred split list is > unnecessary. > > For PMD-mapped THPs, that was not really an issue, because removing the > last PMD mapping in the absence of PTE mappings would not have added the > folio to the deferred split queue. > > However, for PTE-mapped THPs, which are now more prominent due to mTHP, > they are always added to the deferred split queue. One side effect > is that the THP_DEFERRED_SPLIT_PAGE stat for a PTE-mapped folio can be > unintentionally increased, making it look like there are many partially > mapped folios -- although the whole folio is fully unmapped stepwise. > > Core-mm now tries batch-unmapping consecutive PTEs of PTE-mapped THPs > where possible starting from commit b06dc281aa99 ("mm/rmap: introduce > folio_remove_rmap_[pte|ptes|pmd]()"). When it happens, a whole PTE-mapped > folio is unmapped in one go and can avoid being added to deferred split > list, reducing the THP_DEFERRED_SPLIT_PAGE noise. But there will still be > noise when we cannot batch-unmap a complete PTE-mapped folio in one go > -- or where this type of batching is not implemented yet, e.g., migration= . > > To avoid the unnecessary addition, folio->_nr_pages_mapped is checked > to tell if the whole folio is unmapped. If the folio is already on > deferred split list, it will be skipped, too. > > Note: commit 98046944a159 ("mm: huge_memory: add the missing > folio_test_pmd_mappable() for THP split statistics") tried to exclude > mTHP deferred split stats from THP_DEFERRED_SPLIT_PAGE, but it does not > fix the above issue. A fully unmapped PTE-mapped order-9 THP was still > added to deferred split list and counted as THP_DEFERRED_SPLIT_PAGE, > since nr is 512 (non zero), level is RMAP_LEVEL_PTE, and inside > deferred_split_folio() the order-9 folio is folio_test_pmd_mappable(). > > Suggested-by: David Hildenbrand > Signed-off-by: Zi Yan Reviewed-by: Yang Shi > --- > mm/rmap.c | 12 +++++++++--- > 1 file changed, 9 insertions(+), 3 deletions(-) > > diff --git a/mm/rmap.c b/mm/rmap.c > index 2608c40dffad..a9bd64ebdd9a 100644 > --- a/mm/rmap.c > +++ b/mm/rmap.c > @@ -1495,6 +1495,7 @@ static __always_inline void __folio_remove_rmap(str= uct folio *folio, > { > atomic_t *mapped =3D &folio->_nr_pages_mapped; > int last, nr =3D 0, nr_pmdmapped =3D 0; > + bool partially_mapped =3D false; > enum node_stat_item idx; > > __folio_rmap_sanity_checks(folio, page, nr_pages, level); > @@ -1515,6 +1516,8 @@ static __always_inline void __folio_remove_rmap(str= uct folio *folio, > nr++; > } > } while (page++, --nr_pages > 0); > + > + partially_mapped =3D !!nr && !!atomic_read(mapped); > break; > case RMAP_LEVEL_PMD: > atomic_dec(&folio->_large_mapcount); > @@ -1532,6 +1535,8 @@ static __always_inline void __folio_remove_rmap(str= uct folio *folio, > nr =3D 0; > } > } > + > + partially_mapped =3D nr < nr_pmdmapped; > break; > } > > @@ -1553,9 +1558,10 @@ static __always_inline void __folio_remove_rmap(st= ruct folio *folio, > * page of the folio is unmapped and at least one page > * is still mapped. > */ > - if (folio_test_large(folio) && folio_test_anon(folio)) > - if (level =3D=3D RMAP_LEVEL_PTE || nr < nr_pmdmap= ped) > - deferred_split_folio(folio); > + if (folio_test_anon(folio) && > + list_empty(&folio->_deferred_list) && > + partially_mapped) > + deferred_split_folio(folio); > } > > /* > > base-commit: 3dba658670af22074cc6f26dc92efe0013ac3359 > -- > 2.43.0 >