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 F2AB9C4345F for ; Thu, 25 Apr 2024 07:35:26 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 74D526B00A2; Thu, 25 Apr 2024 03:35:26 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6FCB26B00A6; Thu, 25 Apr 2024 03:35:26 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 59D326B00A7; Thu, 25 Apr 2024 03:35:26 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 364006B00A2 for ; Thu, 25 Apr 2024 03:35:26 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id E369EA11E8 for ; Thu, 25 Apr 2024 07:35:25 +0000 (UTC) X-FDA: 82047243810.25.55DAE29 Received: from mail-ed1-f49.google.com (mail-ed1-f49.google.com [209.85.208.49]) by imf28.hostedemail.com (Postfix) with ESMTP id 3F235C0015 for ; Thu, 25 Apr 2024 07:35:23 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=IpBhrzvo; spf=pass (imf28.hostedemail.com: domain of ioworker0@gmail.com designates 209.85.208.49 as permitted sender) smtp.mailfrom=ioworker0@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1714030524; a=rsa-sha256; cv=none; b=bVsmxfdRleTGCLz62OTypwf+M4tLy/yL70M2VGbZn+HKx6gxezO1f15wHE3mupt+SUzNIG 8IQGA2OmExgXTjqxpd5iyKJAkvJGMmrPpH86MiSkqff9EZKx1mm1wqH7gsEnigZj7S/FVA sTqrss4dFXZFkg8uKCB4FnX343quTXo= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=IpBhrzvo; spf=pass (imf28.hostedemail.com: domain of ioworker0@gmail.com designates 209.85.208.49 as permitted sender) smtp.mailfrom=ioworker0@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=1714030524; 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=oaaKX6CGPvrMO2CPjOuBz/J76IMH7mCKipJ4c4CyOgY=; b=XxjFoMoygM5wZ3HKoh8ExM1Iwd3SCoJOz4iQlMzM+uYt+AHd/XNn5O4TiYiRuJwIuA5Hib fXPzRzH6t7CiqpUKkgAJ7DCWe8SIhpmjf9jklatp8mmJuYdhPbgSOt9JhaPSiyNJuNRmgb uwuhlygPYuXxML30dUG+16cS64A/HtI= Received: by mail-ed1-f49.google.com with SMTP id 4fb4d7f45d1cf-56e6a1edecfso900421a12.1 for ; Thu, 25 Apr 2024 00:35:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1714030523; x=1714635323; 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=oaaKX6CGPvrMO2CPjOuBz/J76IMH7mCKipJ4c4CyOgY=; b=IpBhrzvoakbQGiCPqZkoNiKMVrc2I399i4YENulklnYJOUvysEiQDuwEnGNoJqGtJ4 ZUR7Y8c13gjaIGpVjocZw/D1QUyIFtyfvzx4zR1VPKKPbiSg/RCTpOoCSc0pxbMakbzR tWGb5jAoEn0m/vgaWIvv9ma51tY5ZmfwpPEMgpRU004Eyco0yBnUEKVrr3okmoYJ8djC bGsoFzi0P/g8pfEBFwCJtp+dfseMPiNBiePC4g0TF7E9CAEXqIQQESDSWHSduPfbmmDE gcglDQHDJahxwrOjRvFxqPTUQkp31iCueXBWYSFyXG16nMGIzphVkiNj1GSPgLOoMcO+ XMFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714030523; x=1714635323; 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=oaaKX6CGPvrMO2CPjOuBz/J76IMH7mCKipJ4c4CyOgY=; b=tb1e+3WQUwy/b12UAESjCL9vzXs7WE/XNqpzQ1tGkmpL6uYaXktJJekJYOUpS0F30x FTm/ffy8fj6L6Zw3hTPvoyCS3TuaUhEcVrKjodNSCe9k5QQo/+MjD+D7ceMB3qdQPx/k 72ljsmSsjsfiE0PiVweaColvu0bLTDwLWYQDzChYuRllnpDY3TUogMUvLs221lXfJQCm vbvKGY7r+RExm7967yWxrL3bfV8yxhpAyB1aNoR0VQa+zSwV7+awSnVVsnisu1/YZvtO BgI11uoPBW/VgL+OjFzKmn+k/XKiWhuo5y9XxqFV94WYQs9W7i5lE9HfKnlHDPPuxAip 4adA== X-Forwarded-Encrypted: i=1; AJvYcCVKV+CSkYO71w4KQ6CkN6Ll7Aegcj09dtv9uA1v+dblbe6dpncmiRAOxE196v4oBTNfJU0pRevdNCNTMoyTF4kWnNI= X-Gm-Message-State: AOJu0YzKYn/UwexnhV/J7jVgKOxBAXnhqPPqBPDgvdzJj3FOutPLzxiS PVZCup1Hbc7PGPBbeUPXm4T/K9dF4FhWkXU9Mc8e9I6CEAAykbg8TxSWit6cbhX14NuIthHcrCM KOP8hOlG1ZvS6JR067fKaFxMnx0k= X-Google-Smtp-Source: AGHT+IHJMHfgqmCZ5/YjYU7g0gUNhkA4W67823fF4Ofsrv/7vaR8b8FFWSWF8GzRHdUBBPZ4OZs83vEKr6j0mb3AwCI= X-Received: by 2002:a50:9b5b:0:b0:56e:2e17:a3d1 with SMTP id a27-20020a509b5b000000b0056e2e17a3d1mr3501504edj.25.1714030522476; Thu, 25 Apr 2024 00:35:22 -0700 (PDT) MIME-Version: 1.0 References: <20240424224614.477221-1-zi.yan@sent.com> <5e6bf4c6-c4a5-4be3-b203-ecc77ba4e5d9@redhat.com> <38205f34-88ee-4a67-bffb-ec16e9edf7ca@redhat.com> In-Reply-To: <38205f34-88ee-4a67-bffb-ec16e9edf7ca@redhat.com> From: Lance Yang Date: Thu, 25 Apr 2024 15:35:10 +0800 Message-ID: Subject: Re: [PATCH v3] mm/rmap: do not add fully unmapped large folio to deferred split list To: David Hildenbrand Cc: Zi Yan , linux-mm@kvack.org, Andrew Morton , "Matthew Wilcox (Oracle)" , Yang Shi , Ryan Roberts , Barry Song <21cnbao@gmail.com>, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 3F235C0015 X-Stat-Signature: eaic9g98bgq3axmf7mzcuexu5kjy4q7m X-Rspam-User: X-HE-Tag: 1714030523-399109 X-HE-Meta: U2FsdGVkX19bpX/N4U+yIyhdpFNEfWRgtkBvu+0loLYj/t+1EzTbIpTPEw6Z8IlVDLmch5j5InftJUlbs7GK6ydqb8X+Tx06z6V5ECN7IWav0Yaekf1wISa4fdwNbZU6LY2HX1f3YTsutFU3ugGU1Y/h0WgGvBJD80LxNCPUzFRTcbZQnccOzMHv4kffx4sYjDka78/YHab+1zM4JRBKPglTHmZSLRadcxkt82G9V37NpowJJ3GPNUEc6CyKKNaakdin644B2gSAK9fA9dcVgop7zNQPSjrRqRAVZPqyfdxelKu4Ujpu385ToWvErw+5gRqLMP5W37EkhemgqSH1N81SQqT8fB4gGRdb3yexhFSn0P+EtnPD1WQDd+dpBARqJn/Y1EBV6pcVjoDj21G8F1eWy/rrabG771BDZZBn/+GUtk+4daf1k/uCij6aG/QWvfws6Dxq5fdDP0YYdGv3TsOTJtzROzW7uNQ1DnZ/QezF/ljU7SKYOc9PsLe52qBPatrt7KDCYBmY4WXvdPnef/+FU9RDZ+SIfz3uD/CW4mbj7g/On7hHQMlwZNF12i6N+ifiI3qoFQQgS4BfeFfcgl+ucfA+H/47SGzvDv3fkgTXceVXR6UOnN3KMjuX6kPrdPAkobBtZEV299Ygd3Q7yByzI+Ao1vpttYtCo7Z6NkNTPZdThoJgGz7xvL2Oth4QGW6pOF4zAt0E8dnkpGHLpYfF9GT9lMOV/Vcg10BJJP1ip7i/qazYQjcte+R5lfbrn6JU23P6/o7wmdxumigmslBUGdLMpWFhM8tegSsYDLgj4EcEtY7m3u7M04plQcuySVOcblrB4sYqyCvX2awrRavG9jF16Zd9fYhWlwHJidA8Uof73p693bsvn5qgqfI2TGNmCkuEIL68oJrKfLn2Xcn1XdOOcxEkVDUfvw6x/v2ojeZqnpX1qC+ebjabmt7KRM34Q7Y5qO8K0vC/n2i 1PI62H9e NJ6LN7Sp3lEZwe/XjxQiIyV9T9Aaz4XdxawVW 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 Thu, Apr 25, 2024 at 3:29=E2=80=AFPM David Hildenbrand wrote: > > On 25.04.24 09:27, Lance Yang wrote: > > On Thu, Apr 25, 2024 at 3:21=E2=80=AFPM David Hildenbrand wrote: > >> > >> On 25.04.24 05:45, Lance Yang wrote: > >>> Hey Zi, > >>> > >>> On Thu, Apr 25, 2024 at 6:46=E2=80=AFAM Zi Yan wrot= e: > >>>> > >>>> From: Zi Yan > >>>> > >>>> In __folio_remove_rmap(), a large folio is added to deferred split l= ist > >>>> if any page in a folio loses its final mapping. It is possible that > >>>> the folio is unmapped fully, but it is unnecessary to add the folio > >>> > >>> Agreed. If a folio is fully unmapped, then that's unnecessary to add > >>> to the deferred split list. > >>> > >>>> to deferred split list at all. Fix it by checking folio->_nr_pages_m= apped > >>>> before adding a folio to deferred split list. If the folio is alread= y > >>>> on the deferred split list, it will be skipped. This issue applies t= o > >>>> both PTE-mapped THP and mTHP. > >>>> > >>>> Commit 98046944a159 ("mm: huge_memory: add the missing > >>>> folio_test_pmd_mappable() for THP split statistics") tried to exclud= e > >>>> 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 sti= ll > >>>> 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(= ). > >>>> However, this miscount was present even earlier due to implementatio= n, > >>>> since PTEs are unmapped individually and first PTE unmapping adds th= e THP > >>>> into the deferred split list. > >>>> > >>>> With commit b06dc281aa99 ("mm/rmap: introduce > >>>> folio_remove_rmap_[pte|ptes|pmd]()"), kernel is able to unmap PTE-ma= pped > >>>> folios in one shot without causing the miscount, hence this patch. > >>>> > >>>> Signed-off-by: Zi Yan > >>>> Reviewed-by: Yang Shi > >>>> --- > >>>> mm/rmap.c | 7 ++++--- > >>>> 1 file changed, 4 insertions(+), 3 deletions(-) > >>>> > >>>> diff --git a/mm/rmap.c b/mm/rmap.c > >>>> index a7913a454028..2809348add7b 100644 > >>>> --- a/mm/rmap.c > >>>> +++ b/mm/rmap.c > >>>> @@ -1553,9 +1553,10 @@ static __always_inline void __folio_remove_rm= ap(struct 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_p= mdmapped) > >>>> - deferred_split_folio(folio); > >>>> + if (folio_test_large(folio) && folio_test_anon(folio= ) && > >>>> + ((level =3D=3D RMAP_LEVEL_PTE && atomic_read(map= ped)) || > >>>> + (level =3D=3D RMAP_LEVEL_PMD && nr < nr_pmdmapp= ed))) > >>> > >>> Perhaps we only need to check the mapcount? > >>> > >>> IIUC, if a large folio that was PMD/PTE mapped is fully unmapped here= , > >>> then folio_mapcount() will return 0. > >> > >> See discussion on v1. folio_large_mapcount() would achieve the same > >> without another folio_test_large() check, but in the context of this > >> patch it doesn't really matter. > > > > Got it. Thanks for pointing that out! > > I'll take a closer look at the discussion in v1. > > Forgot to add: as long as the large mapcount patches are not upstream, > folio_large_mapcount() would be expensive. So this patch can be added > independent of the other stuff. Thanks for clarifying! Lance > > -- > Cheers, > > David / dhildenb >