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 BFF82CFA450 for ; Wed, 23 Oct 2024 16:57:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3D6586B00A0; Wed, 23 Oct 2024 12:57:24 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 386C96B00A2; Wed, 23 Oct 2024 12:57:24 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 24E016B00A3; Wed, 23 Oct 2024 12:57:24 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 00DB16B00A0 for ; Wed, 23 Oct 2024 12:57:23 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id D9045140DBD for ; Wed, 23 Oct 2024 16:57:04 +0000 (UTC) X-FDA: 82705472430.18.F12F64E Received: from mail-vs1-f50.google.com (mail-vs1-f50.google.com [209.85.217.50]) by imf19.hostedemail.com (Postfix) with ESMTP id D5CD91A0017 for ; Wed, 23 Oct 2024 16:56:59 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=M+zptBJi; spf=pass (imf19.hostedemail.com: domain of yuzhao@google.com designates 209.85.217.50 as permitted sender) smtp.mailfrom=yuzhao@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1729702490; 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=f/rVx4xhU3buqF3s0gjUuJjCcbEqwnGQ1z7b5w2uvVo=; b=P5lQIx0EjSFX8jVpUBiOWqp3MkbZEu3Yh8uD87GFsl4gbGN/MCZGcT+LjZbRKxLjkl6bGF pRWZkQ9v7+WSh4jUUjFZK4wdsbz+OsssGb3m2+hmNokzuI+inSuvVwwroi255nq9S+zte/ Aiu9mpveAzL4xLr9av1/UKeXayoj84E= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1729702490; a=rsa-sha256; cv=none; b=ENIILun6K5DtkWAXD+pwUgGMLs4Iyz2qrLh1eUWPGkJDqvA50qaaX2aHHYVQmbKS2kVKYv RylHOma2Eu/AElynWUM7YcvHH8C4Wn7Ocdzgbpedu5zxNdxBRfDe0pWRh1CcTJWkbEPp78 WnIsX7lL9Ym1i3he7SXjajFovPPsXLo= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=M+zptBJi; spf=pass (imf19.hostedemail.com: domain of yuzhao@google.com designates 209.85.217.50 as permitted sender) smtp.mailfrom=yuzhao@google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-vs1-f50.google.com with SMTP id ada2fe7eead31-4a47ec4ef2cso1822799137.1 for ; Wed, 23 Oct 2024 09:57:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1729702640; x=1730307440; 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=f/rVx4xhU3buqF3s0gjUuJjCcbEqwnGQ1z7b5w2uvVo=; b=M+zptBJihJim6QddPbCBYru+5KW6el1VAKquDgw7frsOObkwLo9pjeBlfjuTxKwblA 1iw2wEq9rk1qp2pGbEC46Qu/RghC2WZRHIJpNcO3J3rfrGYoCa5nf4LwtEDAgLg2VTS8 ZGnxepG6q8mZbbyOXQhfhk/T2X4geKRQ8+UPGXBwvNOo049nuGG61ZsSTmhC2U7A3/Ri Z4e4n0sGt5Nq+tpF9cKLYUbj6+bv2HCfp8rjprrjxFNWEbZ4TJnkbYvLwFACqA65rgAz Jdk9s4hupN4Or/480fEH6G0AYDjMJcw692LA/jhCHPKa3s1Wg4ru1YpBWVaz/cGYH72T I4jA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1729702640; x=1730307440; 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=f/rVx4xhU3buqF3s0gjUuJjCcbEqwnGQ1z7b5w2uvVo=; b=cJ1jQRRMMaZ6P8NK/6HYqp+k4AngZoEtP+dDtOJxy9vQJbBUOsBBPqEq0tSDrkV0Fz QrkeJ32nc0hXHYP8bc6oSfqoKCvHW059xYaiJ8Xmdosy72MMAX2wNFI26GJzo3JwJ0en azLsn7aTBa3OtC5nluk1mVddqm/XDy/B6xPMBoAgcsvvQ22BJtGIahJMiL/iGRvDQ3ah CWWif2Jnrplie/jF0DDpX8JUaTICZUGs17iIi4iHQ+9/2s/JmkKFzIq0Uzc9ob3fR6i1 7zLINfEKxhae/Qc5usUtQdyOHWyQVybz+wYvnR2EoQD1lEi4cjBwHTwnCJ4eDiNQzBAN rx/g== X-Forwarded-Encrypted: i=1; AJvYcCWk2ZW4bdk2Be1sI/wRcmyPezitae6+v5G6M5CQgefFpfppS20/eCVitBrjskunWoiTRuy6G8/4Vw==@kvack.org X-Gm-Message-State: AOJu0YyMNbNYEFvK7TmzjtlTyhY+zpzZb8FPSBhtFdFsCfUUaFBEyuwd z2rxWt4glkc+NwVl165UfvWtdcciqsOjJbGeywQBPN4jpLdeZUKziT+ltLJxZsfrqP/XB+Ta1+E M8rhsq2Ezc+POmvqNBgXNx+YWxrO9/RoHefKR X-Google-Smtp-Source: AGHT+IGSJeWtcRaA8iYuESb6rplWy4Of3qzkk0PG4kshEpuHBGh03Nt3K4ZeA5mV5+18EYLdAnexB7Ty55xQ1ZXT/Bc= X-Received: by 2002:a05:6102:3709:b0:492:a93d:7cab with SMTP id ada2fe7eead31-4a751a7ee61mr3970593137.1.1729702640436; Wed, 23 Oct 2024 09:57:20 -0700 (PDT) MIME-Version: 1.0 References: <20240830100438.3623486-1-usamaarif642@gmail.com> <20240830100438.3623486-3-usamaarif642@gmail.com> <4B7449C4-D2B8-4285-973C-97178C09CE7E@nvidia.com> <27d04537-ebda-4462-b008-878390d4b211@gmail.com> In-Reply-To: <27d04537-ebda-4462-b008-878390d4b211@gmail.com> From: Yu Zhao Date: Wed, 23 Oct 2024 10:56:43 -0600 Message-ID: Subject: Re: [PATCH v5 2/6] mm: remap unused subpages to shared zeropage when splitting isolated thp To: Usama Arif Cc: Zi Yan , akpm@linux-foundation.org, linux-mm@kvack.org, hannes@cmpxchg.org, riel@surriel.com, shakeel.butt@linux.dev, roman.gushchin@linux.dev, david@redhat.com, npache@redhat.com, baohua@kernel.org, ryan.roberts@arm.com, rppt@kernel.org, willy@infradead.org, cerasuolodomenico@gmail.com, ryncsn@gmail.com, corbet@lwn.net, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kernel-team@meta.com, Shuang Zhai Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: D5CD91A0017 X-Stat-Signature: j5kskjxgzdo8ryj4oyx1xkwbw7auxrwq X-Rspamd-Server: rspam09 X-Rspam-User: X-HE-Tag: 1729702619-992976 X-HE-Meta: U2FsdGVkX1/NSZ4epu1qZVLPbpWsg7487NpJWTtMWJRm+W5fwhPtFtB5vC7DtWvxCNSpnBJbyCdrGYtkhDR79ptQ6yvCBOVmZfu6btM1O/gdH/nz9knvWopnXpapDupUXIvvis7EdlZaIF7ldNw6n5dbuVMVL/Tgw3yUuoiooMuE4OFG2zVOzRFRxtldoQV/k6PtlawE7d1zWCVoSmxJ21R8z76bsOswBrgm+R89955PDsnewFqJJoq9NUMyv/hVwKed55zjzi5cBEggs5jx0hcKp6/+9r+Wo5WwgaPTw+gseb/n9imyA36o1yF3g3e2EnUSVkb/msqvEZ9y24hKF+4SB818Ku6EvhclExasia7VSJC44WWmCTqVaL5DSBXsQ60gQSTiCGA/k1r41TpR0x1xu036sZKNXTcV6lnD45HsJYHFQSeIsMzmc/2nZgoAuiwHWwjmiob9XwDFgwGuz7LdNHLiLQQBlwoXO1vRMJ4LjP6+N71DQxoAspCsVg9Y4XANCkD1Nb3+qBpSR0nOLpp5WsAJW+4tkwXmVyVY9+vFV0Wg8lgSOvQ07P5/dPyDKdPGicLOrfwSEHaDvory7qkX5OMRVtdntQTzU1hD83QUGpskyjp3Xyr694f1lnnu5ab8ApGUpkIqCJ957ASPYeXHHHZWtszEoQKb8q5R8Yf5U8TvwTbvbFslbW8m7+GBdzJ62XAn3ic199DLc0W82rJf4vZJsTXn2Rb1OuLUTdfG+eVIH9rPj1Gpoy3RCiCEQ2FgL08PlvuAqmWd9GuPGCjhPuccWI9GF55dbB4z/30A+o78b4YcmbhtzB4PAd0Mxja5+E5URBDkmUmCjB8rsB6CpRxagFCELmW+iUWzEqlQ9qTwbsDETwfLlqjy9Yn0jh4/VFwrvWzZAFfn6ASGE9uW+VWlkNE2/OocBYAQioKKcE3nISxdjr9C0D+j1yqVgco1NbmatRSpWwi4CJJ JGN5MSvV 72g2wGPeIDrR+MvD+EwpEIjs9LvKeY7tgjrY2horvBsMHPCwzvUTbv3fJZXEkK+PnTT8yI+cCP559eKZEUSosc5t2px1npj9CnD13I4BM2JXd7JJ3m2XX8N+k1XWW835gz5RX//6GYbDTLOQPleMYaezZ86azfYNyWj+qGW9XyOZB08ruJhaNMugp2VEzmvp/EGSB368OwhxVDEhxc57wG+EtE6uaJaUYKh09DnlYb1nykNd2wi2UvDJcUQ== 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 Wed, Oct 23, 2024 at 10:51=E2=80=AFAM Usama Arif wrote: > > On 23/10/2024 17:21, Zi Yan wrote: > > On 30 Aug 2024, at 6:03, Usama Arif wrote: > > > >> From: Yu Zhao > >> > >> Here being unused means containing only zeros and inaccessible to > >> userspace. When splitting an isolated thp under reclaim or migration, > >> the unused subpages can be mapped to the shared zeropage, hence saving > >> memory. This is particularly helpful when the internal > >> fragmentation of a thp is high, i.e. it has many untouched subpages. > >> > >> This is also a prerequisite for THP low utilization shrinker which wil= l > >> be introduced in later patches, where underutilized THPs are split, an= d > >> the zero-filled pages are freed saving memory. > >> > >> Signed-off-by: Yu Zhao > >> Tested-by: Shuang Zhai > >> Signed-off-by: Usama Arif > >> --- > >> include/linux/rmap.h | 7 ++++- > >> mm/huge_memory.c | 8 ++--- > >> mm/migrate.c | 72 ++++++++++++++++++++++++++++++++++++++-----= - > >> mm/migrate_device.c | 4 +-- > >> 4 files changed, 75 insertions(+), 16 deletions(-) > >> > >> diff --git a/include/linux/rmap.h b/include/linux/rmap.h > >> index 91b5935e8485..d5e93e44322e 100644 > >> --- a/include/linux/rmap.h > >> +++ b/include/linux/rmap.h > >> @@ -745,7 +745,12 @@ int folio_mkclean(struct folio *); > >> int pfn_mkclean_range(unsigned long pfn, unsigned long nr_pages, pgof= f_t pgoff, > >> struct vm_area_struct *vma); > >> > >> -void remove_migration_ptes(struct folio *src, struct folio *dst, bool= locked); > >> +enum rmp_flags { > >> + RMP_LOCKED =3D 1 << 0, > >> + RMP_USE_SHARED_ZEROPAGE =3D 1 << 1, > >> +}; > >> + > >> +void remove_migration_ptes(struct folio *src, struct folio *dst, int = flags); > >> > >> /* > >> * rmap_walk_control: To control rmap traversing for specific needs > >> diff --git a/mm/huge_memory.c b/mm/huge_memory.c > >> index 0c48806ccb9a..af60684e7c70 100644 > >> --- a/mm/huge_memory.c > >> +++ b/mm/huge_memory.c > >> @@ -3020,7 +3020,7 @@ bool unmap_huge_pmd_locked(struct vm_area_struct= *vma, unsigned long addr, > >> return false; > >> } > >> > >> -static void remap_page(struct folio *folio, unsigned long nr) > >> +static void remap_page(struct folio *folio, unsigned long nr, int fla= gs) > >> { > >> int i =3D 0; > >> > >> @@ -3028,7 +3028,7 @@ static void remap_page(struct folio *folio, unsi= gned long nr) > >> if (!folio_test_anon(folio)) > >> return; > >> for (;;) { > >> - remove_migration_ptes(folio, folio, true); > >> + remove_migration_ptes(folio, folio, RMP_LOCKED | flags); > >> i +=3D folio_nr_pages(folio); > >> if (i >=3D nr) > >> break; > >> @@ -3240,7 +3240,7 @@ static void __split_huge_page(struct page *page,= struct list_head *list, > >> > >> if (nr_dropped) > >> shmem_uncharge(folio->mapping->host, nr_dropped); > >> - remap_page(folio, nr); > >> + remap_page(folio, nr, PageAnon(head) ? RMP_USE_SHARED_ZEROPAGE : = 0); > >> > >> /* > >> * set page to its compound_head when split to non order-0 pages,= so > >> @@ -3542,7 +3542,7 @@ int split_huge_page_to_list_to_order(struct page= *page, struct list_head *list, > >> if (mapping) > >> xas_unlock(&xas); > >> local_irq_enable(); > >> - remap_page(folio, folio_nr_pages(folio)); > >> + remap_page(folio, folio_nr_pages(folio), 0); > >> ret =3D -EAGAIN; > >> } > >> > >> diff --git a/mm/migrate.c b/mm/migrate.c > >> index 6f9c62c746be..d039863e014b 100644 > >> --- a/mm/migrate.c > >> +++ b/mm/migrate.c > >> @@ -204,13 +204,57 @@ bool isolate_folio_to_list(struct folio *folio, = struct list_head *list) > >> return true; > >> } > >> > >> +static bool try_to_map_unused_to_zeropage(struct page_vma_mapped_walk= *pvmw, > >> + struct folio *folio, > >> + unsigned long idx) > >> +{ > >> + struct page *page =3D folio_page(folio, idx); > >> + bool contains_data; > >> + pte_t newpte; > >> + void *addr; > >> + > >> + VM_BUG_ON_PAGE(PageCompound(page), page); > > > > This should be: > > > > diff --git a/mm/migrate.c b/mm/migrate.c > > index e950fd62607f..7ffdbe078aa7 100644 > > --- a/mm/migrate.c > > +++ b/mm/migrate.c > > @@ -206,7 +206,8 @@ static bool try_to_map_unused_to_zeropage(struct pa= ge_vma_mapped_walk *pvmw, > > pte_t newpte; > > void *addr; > > > > - VM_BUG_ON_PAGE(PageCompound(page), page); > > + if (PageCompound(page)) > > + return false; > > VM_BUG_ON_PAGE(!PageAnon(page), page); > > VM_BUG_ON_PAGE(!PageLocked(page), page); > > VM_BUG_ON_PAGE(pte_present(*pvmw->pte), page); > > > > Otherwise, splitting anonymous large folios to non order-0 ones just > > triggers this BUG_ON. > > > > That makes sense, would you like to send the fix? > > Adding Yu Zhao to "To" incase he has any objections. LGTM. Thanks!