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 471E6C4345F for ; Thu, 25 Apr 2024 07:27:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4FBCB6B00A1; Thu, 25 Apr 2024 03:27:45 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4AAF36B00A2; Thu, 25 Apr 2024 03:27:45 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 371F46B00A5; Thu, 25 Apr 2024 03:27:45 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 184316B00A1 for ; Thu, 25 Apr 2024 03:27:45 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id BA2B51211EA for ; Thu, 25 Apr 2024 07:27:44 +0000 (UTC) X-FDA: 82047224448.27.9469BBA Received: from mail-ed1-f44.google.com (mail-ed1-f44.google.com [209.85.208.44]) by imf28.hostedemail.com (Postfix) with ESMTP id E0AAFC0022 for ; Thu, 25 Apr 2024 07:27:42 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=csJGaRff; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf28.hostedemail.com: domain of ioworker0@gmail.com designates 209.85.208.44 as permitted sender) smtp.mailfrom=ioworker0@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1714030063; 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=zxuVfL2Zyw6cKo0nF1CV5taOl0JsDHqcVQE/hlTCDsk=; b=CqM4Wg3p1RkftTTWwjCXtX0N1ZMCM4jmtG2i31NIahI3lfMBhGjB3gfhbL5hGqg6LOnOC1 MdI4rUmfyQ7hj3yF6PFzJyulEr1b8tkemmELwgxLVv23KRZe4BY/Vcc3u0ngicKupBMwYQ d2ZyxTX6mNbP+9EKayxEUiPtU547f2g= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=csJGaRff; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf28.hostedemail.com: domain of ioworker0@gmail.com designates 209.85.208.44 as permitted sender) smtp.mailfrom=ioworker0@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1714030063; a=rsa-sha256; cv=none; b=FchammAUpubM6aqXTvSlMXuYb4A4Ouc7pljI58m5nN3DQvw/dRdVKz8IiWbcL+JvpIqZfG l/Pr/e6FC/bdzcok73arOovfijhpfOBQYHrdJMXGw1QPnNpfD5Vpelmxp5ULqvaQ/pmI1B uJ9I7N76nC/hx+K3OPcPKXEYlyOAhy0= Received: by mail-ed1-f44.google.com with SMTP id 4fb4d7f45d1cf-572229f196bso688700a12.0 for ; Thu, 25 Apr 2024 00:27:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1714030061; x=1714634861; 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=zxuVfL2Zyw6cKo0nF1CV5taOl0JsDHqcVQE/hlTCDsk=; b=csJGaRffXpW3sRvBvHpcoKO5eJBWtrSgA4+gpHLEbtJShMArEs+Dh5eHXZT/ohzGhZ LQg7+fu9K9QyMn2IZDEwVfDE/G6tVntvsl6/2z+7uxF/PK5DGyvbbO/+MRd5ujGtTUhh y2cLTNUoTHKjnPyL75JFX0cE2BZNVWCzQ8qVoIm8lKNtzW4VBmzexDXT7zEDo0QYv+c4 VOxW73sFW46KTR3DT4/picdHLDutYqtZouNA0AFLMQRQapJpk9W4K2VMhMhwFwcUlQUh Mm1YY/4d71ShjDqszfoEHIJQdmrTHkvta/pEB9xRQyZ4vu/D565MwsxUzYEEaXjgtNyN NTuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714030061; x=1714634861; 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=zxuVfL2Zyw6cKo0nF1CV5taOl0JsDHqcVQE/hlTCDsk=; b=O+Gak4NHtT/gyQUPK5pK+AfK8kp94q9HZu1M+T8acC6YwDHozLoiAxETRzVYAyLSJv QcP7OMz820VJLfnsjQqtPo2dMKwwkhbIQWWS59DDh3RrUFCT0u62tiQF1S2fPUQf8SUc MurCZFdIWXZAXby5wNGwy1u3qncIQKWu+rbdQ8TGRm52aY0CYoafBEB+CBWdnHfs6Y72 3m/f6N7uGtj7ODNmEyGkx4mrd+vkxKsUHx5I9fX4S5C9x87hFs+dpDn6d59xsMv9x6V+ EXwNkVIrrV1uzrTyfzNIpSEg6WBKU+oWUw21Xc4Fm8JzVnqfPamf2k+/cW7ggW67dFRO Ly3A== X-Forwarded-Encrypted: i=1; AJvYcCXi5yqxd4MPeoePARYCblyBmlLCM4D6KRnyaULT5BWa8v4gl7ICrP6Xty1pepAHrmTrL53rtJ0NcpX4h90cUCVDf4c= X-Gm-Message-State: AOJu0YxkA4OA1ylzXOFaq6i0Iyqvg1PNjWrbcZvXTzoDXW3sM04jywMW H91n3zI2QJluP/z7PT1HeO26rDmVTa4P1/YDyN/YkG/WPN0gJPuf7jHOZkoWG7yaur77ehoKrcQ 7TTjejGkkxQ3cdXEZ3bu+uYTTQvQ= X-Google-Smtp-Source: AGHT+IEHBaxooT3I1wuxcVgbc/J+Kw2QPTVmZoNt4veeoBKvhbc5Hi0jWh93/aRXtdHY7ajapV3A9nUEG28nHLV7y+o= X-Received: by 2002:a50:8752:0:b0:56b:ec47:a846 with SMTP id 18-20020a508752000000b0056bec47a846mr2800988edv.25.1714030061009; Thu, 25 Apr 2024 00:27:41 -0700 (PDT) MIME-Version: 1.0 References: <20240424224614.477221-1-zi.yan@sent.com> <5e6bf4c6-c4a5-4be3-b203-ecc77ba4e5d9@redhat.com> In-Reply-To: <5e6bf4c6-c4a5-4be3-b203-ecc77ba4e5d9@redhat.com> From: Lance Yang Date: Thu, 25 Apr 2024 15:27:29 +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-Rspam-User: X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: E0AAFC0022 X-Stat-Signature: 4y8m6j7qqitmg4s31gwwo7gm8s7itjc5 X-HE-Tag: 1714030062-868827 X-HE-Meta: U2FsdGVkX1+5/1RqYNYcEOgbxqewxzxh1b94Hqe9m5F4snSq6LrWMU5x63dYinjIbRx29SpBPjhGB1Gc5kEyHmUPV2FuePxFvi504ZtQSTLhfhLRtkALeCQl2y55kP9pZR4xWzdj6Y2HRWN3iOLPBUVbfQ4Bt2vRJqYOpiOYI6H933r+M6TU26KBpZWr2DpuW7eDBPbGsZF8EX8qmKalRXPtliZDTY69NbTp1MgXLi6h20Bh3owl5IFClLw8RkaitX406KbhnPeixg57+w39HwVOq2Sg407gFg91YM456kplTN0TBv6STdJieoO5z3UoAlZ+XfTXdpvCkk7x6Ok7fe6OsrX/pjwX5k/QTKHENgU88WBTi+nUCSEi8DurRv3JIuCVAY2EhHP/YNRpwwb4v4eNnru+GcxfJfpRDzrhZQWbG824DShgRu2kmeb6ESFi9m15jHi+N52q/DVYuxwpoDZHlWU35pQ6REQTWTZ0TUHa+07UbPHC17HDyUh9CsnoCA0zJat548bFrTSfNhceU5LRWhSJZGhhPjQFKbLOP3UUGUxX9bl5XAN9Kk8eYD1IQtg4UbUG7N8NIYjJUMKFQQxD3rRzfgyr72Skzas3uU9XM/HzI2KehncDeyZmaMn/ea/treWE+Paw4wE+9vMtWmHIha/0ujlviM0rOmHbIbRpUfpp6boJFY2CqsE5rzyFfCtgKvShUiffTTf2gVQcohpTENXK6Z/788zK0g0O+5BIz2jeWfdpB4SHWRTz9pkseFIUYl60USOxrxmtwAC7xJwMMbJ/ogZothY89+sGbUk0tBqxkSbQRKj1cEjhbcFjM1IzWX5WswNSq0TKtxFm5FWF0JNw8t+5uYdOH7v/JS4yxddoZx3rtsDJB1uj4EfovwlnZclM6IMyEPXfteOg8hwry0vOQ5vNQBQcsDrmb1CSwyYXW+xgSPU6Wk67TYBm2T3qAZMN+3gR+shJjkL fQBzAohi oQQ85Sz+lp54Sp72vczHWhRUWf+zUWGdnk22zeUTvKfUNLaxR/0u6s3hdaC/Kf0IF66KrBuFOfriHkhVPAEx4g+s/afQxEuohwDCJtw8jGdVsNM9PoscSiwpDZYnoA5jPXR6uClKKJM6xJgKWHeP3zpuJH1qNHq9WRKN+5C/qRv8K+huKS7tilM+On0NKYnlmiWZfnpEQT0cGRlH7JgXRMfX21iv8Equ5K6ipoY2AgIdI1PPn4gLFbu4A02Cp9PdEFURxLTpZSKaFvjFUWI3C1+zVGWiabsnJA0KL4Rvt/Ryoox3ua8Cy+97l/fDdeR/is/SJy9P5WNPcD/wG6jUTP2EwnN8Jy4dbDtcsM1YNdEwfGmXJfWSIFULddb1su8HNv4zpltDxWHGsmHA= 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: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 wrote: > >> > >> From: Zi Yan > >> > >> In __folio_remove_rmap(), a large folio is added to deferred split lis= t > >> 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_map= ped > >> before adding a folio to deferred split list. If the folio is already > >> on the deferred split list, it will be skipped. This issue applies to > >> both PTE-mapped THP and mTHP. > >> > >> 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 no= t > >> 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(). > >> However, this miscount was present even earlier due to implementation, > >> since PTEs are unmapped individually and first PTE unmapping adds the = THP > >> into the deferred split list. > >> > >> With commit b06dc281aa99 ("mm/rmap: introduce > >> folio_remove_rmap_[pte|ptes|pmd]()"), kernel is able to unmap PTE-mapp= ed > >> 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_rmap= (struct folio *folio, > >> * page of the folio is unmapped and at least one pag= e > >> * is still mapped. > >> */ > >> - if (folio_test_large(folio) && folio_test_anon(folio)) > >> - if (level =3D=3D RMAP_LEVEL_PTE || nr < nr_pmd= mapped) > >> - deferred_split_folio(folio); > >> + if (folio_test_large(folio) && folio_test_anon(folio) = && > >> + ((level =3D=3D RMAP_LEVEL_PTE && atomic_read(mappe= d)) || > >> + (level =3D=3D RMAP_LEVEL_PMD && nr < nr_pmdmapped= ))) > > > > 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. Thanks, Lance > > -- > Cheers, > > David / dhildenb >