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 D3372C4345F for ; Thu, 25 Apr 2024 03:45:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 567726B0083; Wed, 24 Apr 2024 23:45:49 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 517536B0085; Wed, 24 Apr 2024 23:45:49 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 405266B0087; Wed, 24 Apr 2024 23:45:49 -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 2374E6B0083 for ; Wed, 24 Apr 2024 23:45:49 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 3FFE8803E0 for ; Thu, 25 Apr 2024 03:45:48 +0000 (UTC) X-FDA: 82046665176.18.1177A12 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) by imf07.hostedemail.com (Postfix) with ESMTP id 7C89E4000A for ; Thu, 25 Apr 2024 03:45:46 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=i1v3cNfb; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf07.hostedemail.com: domain of ioworker0@gmail.com designates 209.85.128.51 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=1714016746; 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=CYp/Zt/Vz1rh4t2A6hBeOpmR/pnEahF8TAkSRflBIyQ=; b=bQu9L/M2dPjCwVyJIn2YsL6mlMd8B6Fgz3/mGwmFlshhnw3CYOM0fpbIYIYKRUhiKi6oJN RGvCRifAh1XB/fFh1uXlEAIGgczF7NXEa/T7FNPuiKkyI/1u28xgIi1GiTJj5+GNsFELme Tph9l1If8Ii2cjUAg8gZ+NQG8WjAqAg= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=i1v3cNfb; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf07.hostedemail.com: domain of ioworker0@gmail.com designates 209.85.128.51 as permitted sender) smtp.mailfrom=ioworker0@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1714016746; a=rsa-sha256; cv=none; b=jAyZLZIzmHErQw+cNQn1DSFzRJgjpmdEjeNqdVNW49HlF1fV/KNpVB7Bb1zIxvImJhlbGS c7RlbAQuuLpVBiM010RAwEiYima5OHTjGf2k34de/jFBMoUQiw7L4kpMYsJggAfgtQLAZ/ 0L8yuCA1MrNiyXhogxH8Sgy7iXL3nl4= Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-41a1d88723bso4092815e9.0 for ; Wed, 24 Apr 2024 20:45:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1714016745; x=1714621545; 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=CYp/Zt/Vz1rh4t2A6hBeOpmR/pnEahF8TAkSRflBIyQ=; b=i1v3cNfbov3AurarAvSr+FLzlYB/U3381ApVadOe0BcDvi79fpQixramC2rntxahqN uN7gzLXCEEAQStMkOKkOYb2h+HqWKb/zzyvdLzA1saeNkJgFkoGxQI9VSKfZDARDGviS +mhUs9lkPQOxiR+px0XvyVxcjbClHH38W4/AC2N+I2JPICm/USFuYW7D4wCx7sJP3ki/ gXG51yUS72siif2YGIU0I9pCy/UCobzT1lk7IymDJl6/kspfVVaQIee1mDuLXJmtBNBx JVB0lwOcYLm+ZF9cEPBGmhFkBT3FzSDuFKYWmk1nGrSZ8KhpmGtAGrk78NIwq42+2inS 09Pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714016745; x=1714621545; 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=CYp/Zt/Vz1rh4t2A6hBeOpmR/pnEahF8TAkSRflBIyQ=; b=w2+H5pfmHWaT/UtuiyD71h/MIQSOtbtCWRDILx27+i7Av1jJ/8E9r4lCZyrcGGeeWu EglSMpL8dI0zDcie81Td04YIVYY5pHAfi9VE4i8wI7BKnd4HOTVF1u+GOk4SrvylACRw Qs2HTaZKeaYir9K+Ivg6sYSk28e2e/wvaAEOHF94uQbU6Xj8MoElch0Og2yvAtiC0J5d geZGd+OMDTM7NJJOPRC1tDM4WfNpb3GrL1OLfzdcR0rawMkr7R8qHC5XcKNtZ22tnAfT 1uZKSbjPlY2HRNEePkqzneTkOlEt02SuqE/JGRkiZYbID9ppA08dhEYXYO1BWh+9akuu Iqnw== X-Gm-Message-State: AOJu0Yzrh2IG1Gn2a5hWxCTUJUv4FSAXIeLvwp86AncqTql+XV7rqSdv x8Y2/3MS0lPD9o/06fbMg0DxtPNk9LLqiDSUswv8TXRvptNQaJhQuKqqIkt+xlp/mzpvsC12moO LXOps6UoL4FeA1TyApc20phlVxzE= X-Google-Smtp-Source: AGHT+IG4/hvvTUG/JmgKLeC71M/cbYszULFla++OUA5mdi903ctCNrHqkUTC6dUzgh5we974dDlPwgJmWJhiR9eEDiE= X-Received: by 2002:a05:600c:354d:b0:419:f088:249c with SMTP id i13-20020a05600c354d00b00419f088249cmr3133032wmq.12.1714016744574; Wed, 24 Apr 2024 20:45:44 -0700 (PDT) MIME-Version: 1.0 References: <20240424224614.477221-1-zi.yan@sent.com> In-Reply-To: <20240424224614.477221-1-zi.yan@sent.com> From: Lance Yang Date: Thu, 25 Apr 2024 11:45:33 +0800 Message-ID: Subject: Re: [PATCH v3] mm/rmap: do not add fully unmapped large folio to deferred split list To: Zi Yan Cc: linux-mm@kvack.org, Andrew Morton , "Matthew Wilcox (Oracle)" , Yang Shi , Ryan Roberts , Barry Song <21cnbao@gmail.com>, David Hildenbrand , 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: 7C89E4000A X-Stat-Signature: ecwbo76efykhbtnm4a8wqk4e4ga736n7 X-HE-Tag: 1714016746-960043 X-HE-Meta: U2FsdGVkX19SUBjSDjo+NXx2EKPGVVbggQFHtJWAabJEXWGY3MuPquy6+QIXZKu1H9VYMNE2K7VZ6Tn6SHZk/QUzrtUXrAMsRsiRp2E5SAVSBh1pCxUWzFmW8zw9ZQtwnWsgaoCy+l0ilOlDbEmWmdSuAR/D049SsxWqP78jg+7tflDH2nTvVESCT1DMGdkdHF0PE+rHNZ2GZxIBxB+oklDLBCxYHSOqIkXBOQOK8SUiNGG22E2jPgOd0FdZLCECOU3FMaslfQTPDmyL9jACQabqO0F+s5eMFpZ4leM2v3fmZq3DLb3seoYvYYnI1gTheFbGrNklFBMusADad/BTkS563SJhdnijlJF2xkBYH+X6ErLj8TEGUc2EzzdgkFILNqijja85hKcpKddlUGXxoQf92YjDKaSFRm9dmlg2Evz33m0hZ1NTr7zlXWDbUGanBobU9ZAcxZWexBgianKAlQRkP8AVAcoahRfKWVm98ikbdwYJCY9o7aWtDyqQaUNZZyNRZtVULoUBbq8QMERYl+dLqemMqXrs7MtjZSbcr0+wT5OJpjAxGwbutJqIstBnRiLDJP1t8iDKE51CmOUw4+5ESC4AeFStBCzOS0l/Ku3gDDkXHtX33NpPmG5FuCtwgOly8PEqfczW25GkY16j2evyaDpt1UeQKelha8gvvsNCUveZ8ewNGjDMfEz4iKko3NrAWR4mTVJLoAQY1xoJiiBGwW/PQMj7bgPDpDX655jFj8TQizzMFW3pNLshSWv3XdF1EbVnJ7jCLljBRenRI9JXUt/yk1Y2l6Iey5hsySFYjte4VTsoqdF4qkEfYb24SRD8EOhRMhAfw+RThj5dr3eP1EaNWw8ip29JA57y3joivIs0sV67tnWFjUIty4Olle7s9PjKwK+fnviRBuFeca2c6yMLnw9PSzBY97cs/QuI8z3T7tyGdoWoH5A7MCHzSDFpLCjLGVfB7Sb1bcz tRmc2BrQ S8IwpobenDezcMg/t3Sg4byeG1C4/6/dhHYfdp1r+MFBldfF3YPOIkuHLLpjwezI8BBDmRp4Wx+2OE/f7onmZHwPK5DbD7hegHEBUs5IawLrzIEcufZit49uLtS8lfLKNi97Ov2xCTii3lbWNHPZ4me3Z7Jeb5aFB2i5CCP39/GfYk8RF9IPt+wTlLpaEcPoWq5QtxoA8s6fQlqqUbh0RXGcYnMQaJRg57qVSSgmzK2gm1GUIY2Ud2D/rzOv6MXFlCcFSCmh57Pqy0jncRxsX8YX/BZ9zKlHGbmlc9djSTrk2gy99nf9ffaPXuhKZoLOjKiQKENqAPy3BIA3DAQ6WJYD6K5FztX6ELTU2UHkUhdxQXqWBuDDHO85TZU4QlSlSPCXneRsUudndOHcDP5BUVk7S8JX5j39gJRslJoGG6DPUMWrX4QWqTcYwLsg9dVwOOmDE5SxYhXp8uTo= 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: 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 list > 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_mapped > 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 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(). > 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-mapped > 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(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_large(folio) && folio_test_anon(folio) && > + ((level =3D=3D RMAP_LEVEL_PTE && atomic_read(mapped))= || > + (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. - if (folio_test_large(folio) && folio_test_anon(folio)) - if (level =3D=3D RMAP_LEVEL_PTE || nr < nr_pmdmappe= d) - deferred_split_folio(folio); + if (folio_test_large(folio) && folio_test_anon(folio) && + folio_mapcount(folio)) + deferred_split_folio(folio); Thanks, Lance > + deferred_split_folio(folio); > } > > /* > > base-commit: 2541ee5668b019c486dd3e815114130e35c1495d > -- > 2.43.0 >