From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id E43EE1CF7D5 for ; Wed, 24 Dec 2025 14:11:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766585490; cv=none; b=idhWl+UF10WZcZMm3FaHA4eydWGMPdAT1ovA6+TVrZPRiGlanZGbBIdORAPBxDtAqePWEW6zPR2fEMrnG4Cugzj51srksfT6XRjBAA2/9285BcrJxbMoBGDKZLPts7ha0PRiUPanUgZwua5VH2LEs/hXCEzzu22LsYcturylX3Q= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766585490; c=relaxed/simple; bh=7Du0fd4wq3/myngDpGUFIy7b2W4d00C/1n9pzoBfbZ8=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=g3wwQxHVmIJHTnPK3sNsUVObr+kbrRHZ6rYq7+63+NTmB9T3ITjufVwtTJWdLkYGXmXZQlmmuY8TxsoV37ehhzK4Qk5+UneT2m02bv5aeQ7ZUTPd7hp/BR1S/S8GrauUfrTkKYgoTTF/VtN+yM8NU4uTyFqDSMMjULTM8hZCpqk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 0109C1424; Wed, 24 Dec 2025 06:11:21 -0800 (PST) Received: from [10.57.93.190] (unknown [10.57.93.190]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 763F53F5A1; Wed, 24 Dec 2025 06:11:25 -0800 (PST) Message-ID: <20821c02-e16b-4e5f-95b0-b3e8b9192117@arm.com> Date: Wed, 24 Dec 2025 14:11:24 +0000 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 5/5] mm: rmap: support batched unmapping for file large folios Content-Language: en-GB To: Baolin Wang , akpm@linux-foundation.org, david@kernel.org, catalin.marinas@arm.com, will@kernel.org Cc: lorenzo.stoakes@oracle.com, Liam.Howlett@oracle.com, vbabka@suse.cz, rppt@kernel.org, surenb@google.com, mhocko@suse.com, riel@surriel.com, harry.yoo@oracle.com, jannh@google.com, willy@infradead.org, baohua@kernel.org, dev.jain@arm.com, linux-mm@kvack.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org References: From: Ryan Roberts In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 23/12/2025 05:48, Baolin Wang wrote: > Similar to folio_referenced_one(), we can apply batched unmapping for file > large folios to optimize the performance of file folios reclamation. > > Barry previously implemented batched unmapping for lazyfree anonymous large > folios[1] and did not further optimize anonymous large folios or file-backed > large folios at that stage. As for file-backed large folios, the batched > unmapping support is relatively straightforward, as we only need to clear > the consecutive (present) PTE entries for file-backed large folios. > > Performance testing: > Allocate 10G clean file-backed folios by mmap() in a memory cgroup, and try to > reclaim 8G file-backed folios via the memory.reclaim interface. I can observe > 75% performance improvement on my Arm64 32-core server (and 50%+ improvement > on my X86 machine) with this patch. > > W/o patch: > real 0m1.018s > user 0m0.000s > sys 0m1.018s > > W/ patch: > real 0m0.249s > user 0m0.000s > sys 0m0.249s > > [1] https://lore.kernel.org/all/20250214093015.51024-4-21cnbao@gmail.com/T/#u > Acked-by: Barry Song > Signed-off-by: Baolin Wang Reviewed-by: Ryan Roberts > --- > mm/rmap.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/mm/rmap.c b/mm/rmap.c > index a0fc05f5966f..7482121d4e92 100644 > --- a/mm/rmap.c > +++ b/mm/rmap.c > @@ -1862,9 +1862,10 @@ static inline unsigned int folio_unmap_pte_batch(struct folio *folio, > end_addr = pmd_addr_end(addr, vma->vm_end); > max_nr = (end_addr - addr) >> PAGE_SHIFT; > > - /* We only support lazyfree batching for now ... */ > - if (!folio_test_anon(folio) || folio_test_swapbacked(folio)) > + /* We only support lazyfree or file folios batching for now ... */ > + if (folio_test_anon(folio) && folio_test_swapbacked(folio)) > return 1; > + > if (pte_unused(pte)) > return 1; > > @@ -2230,7 +2231,7 @@ static bool try_to_unmap_one(struct folio *folio, struct vm_area_struct *vma, > * > * See Documentation/mm/mmu_notifier.rst > */ > - dec_mm_counter(mm, mm_counter_file(folio)); > + add_mm_counter(mm, mm_counter_file(folio), -nr_pages); > } > discard: > if (unlikely(folio_test_hugetlb(folio))) {