From: "David Hildenbrand (Arm)" <david@kernel.org>
To: Dev Jain <dev.jain@arm.com>,
akpm@linux-foundation.org, ljs@kernel.org, hughd@google.com,
chrisl@kernel.org, kasong@tencent.com
Cc: riel@surriel.com, liam@infradead.org, vbabka@kernel.org,
harry@kernel.org, jannh@google.com, lance.yang@linux.dev,
baolin.wang@linux.alibaba.com, shikemeng@huaweicloud.com,
nphamcs@gmail.com, baoquan.he@linux.dev, baohua@kernel.org,
youngjun.park@lge.com, linux-mm@kvack.org,
linux-kernel@vger.kernel.org, rppt@kernel.org, surenb@google.com,
mhocko@suse.com, pfalcato@suse.de, ryan.roberts@arm.com,
anshuman.khandual@arm.com
Subject: Re: [PATCH 0/8] Optimize anonymous swapbacked large folio unmapping
Date: Wed, 19 Aug 2026 09:44:55 +0200 [thread overview]
Message-ID: <1bc39fcf-6fb1-49a9-a30a-8289ed9a524d@kernel.org> (raw)
In-Reply-To: <80632d25-df40-475b-b7d0-912d657a977e@arm.com>
On 8/19/26 08:50, Dev Jain wrote:
>
>
> On 23/07/26 12:38 pm, Dev Jain wrote:
>> Speed up unmapping of anonymous swapbacked large folios by clearing
>> the ptes, and setting swap ptes, in one go.
>>
>> The following benchmark (stolen from Barry) is used to measure the
>> time taken to swapout 256M worth of memory backed by 64K large folios:
>>
>> #define _GNU_SOURCE
>> #include <stdio.h>
>> #include <stdlib.h>
>> #include <sys/mman.h>
>> #include <string.h>
>> #include <time.h>
>> #include <unistd.h>
>> #include <errno.h>
>>
>> #define SIZE_MB 256
>> #define SIZE_BYTES (SIZE_MB * 1024 * 1024)
>>
>> int main() {
>> void *addr = mmap(NULL, SIZE_BYTES, PROT_READ | PROT_WRITE,
>> MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
>> if (addr == MAP_FAILED) {
>> perror("mmap failed");
>> return 1;
>> }
>>
>> memset(addr, 0, SIZE_BYTES);
>>
>> struct timespec start, end;
>> clock_gettime(CLOCK_MONOTONIC, &start);
>>
>> if (madvise(addr, SIZE_BYTES, MADV_PAGEOUT) != 0) {
>> perror("madvise(MADV_PAGEOUT) failed");
>> munmap(addr, SIZE_BYTES);
>> return 1;
>> }
>>
>> clock_gettime(CLOCK_MONOTONIC, &end);
>>
>> long duration_ns = (end.tv_sec - start.tv_sec) * 1e9 +
>> (end.tv_nsec - start.tv_nsec);
>> printf("madvise(MADV_PAGEOUT) took %ld ns (%.3f ms)\n",
>> duration_ns, duration_ns / 1e6);
>>
>> munmap(addr, SIZE_BYTES);
>> return 0;
>> }
>>
>> Performance as measured on a Linux VM on Apple M3 (arm64):
>>
>> Vanilla - Mean: 37401913 ns, std dev: 12%
>> Patched - Mean: 17420282 ns, std dev: 11%
>>
>> resulting in more than 2x speedup.
>>
>> No regression observed on 4K folios.
>>
>> Performance as measured on bare metal x86:
>>
>> Vanilla - mean: 54986286 ns, std dev: 1.5%
>> Patched - mean: 51930795 ns, std dev: 3%
>>
>> I tried magnifying the difference on x86 by using 1M large folios, but
>> can't spot an obvious improvement (looks like my system is too fast to
>> benefit from batched atomic operations!), hinting that the benefit lies
>> mainly in the reduction of ptep_get() calls and the reduction of TLB
>> flushes during contpte-unfolding, on arm64.
>>
>> No regression is observed on 4K folios on x86 too.
>>
>> ---
>
>
> Hi Andrew,
>
> I am not sure what is the current process in mm regarding sending patches during
> merge window - would you prefer seeing v2 after merge window or shall I respin?
>
>
Let's wait for more review first. Most of the patches have not been reviewed and
there is no time to rush at this point.
--
Cheers,
David
prev parent reply other threads:[~2026-08-19 7:45 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-23 7:08 [PATCH 0/8] Optimize anonymous swapbacked large folio unmapping Dev Jain
2026-07-23 7:08 ` [PATCH 1/8] mm/swapfile: add batched version of folio_dup_swap Dev Jain
2026-07-25 4:35 ` Barry Song
2026-07-23 7:08 ` [PATCH 2/8] mm/swapfile: add batched version of folio_put_swap Dev Jain
2026-07-25 4:53 ` Barry Song
2026-07-25 9:40 ` Dev Jain
2026-07-23 7:08 ` [PATCH 3/8] mm/rmap: mm/rmap: Add batched version of folio_try_share_anon_rmap_pte Dev Jain
2026-07-23 7:09 ` [PATCH 4/8] mm/internal: rename swap offset helpers to softleaf offset Dev Jain
2026-07-23 7:09 ` [PATCH 5/8] mm/internal: add set_softleaf_ptes Dev Jain
2026-07-23 7:09 ` [PATCH 6/8] mm/memory: use set_softleaf_ptes for uffd-wp markers Dev Jain
2026-07-23 7:09 ` [PATCH 7/8] mm: move anon-exclusive batch helper to internal.h Dev Jain
2026-07-23 7:09 ` [PATCH 8/8] mm/rmap: batch unmap anonymous swap-backed large folios Dev Jain
2026-07-26 9:10 ` [PATCH 0/8] Optimize anonymous swapbacked large folio unmapping Dev Jain
2026-08-19 6:50 ` Dev Jain
2026-08-19 7:44 ` David Hildenbrand (Arm) [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1bc39fcf-6fb1-49a9-a30a-8289ed9a524d@kernel.org \
--to=david@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=anshuman.khandual@arm.com \
--cc=baohua@kernel.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=baoquan.he@linux.dev \
--cc=chrisl@kernel.org \
--cc=dev.jain@arm.com \
--cc=harry@kernel.org \
--cc=hughd@google.com \
--cc=jannh@google.com \
--cc=kasong@tencent.com \
--cc=lance.yang@linux.dev \
--cc=liam@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=mhocko@suse.com \
--cc=nphamcs@gmail.com \
--cc=pfalcato@suse.de \
--cc=riel@surriel.com \
--cc=rppt@kernel.org \
--cc=ryan.roberts@arm.com \
--cc=shikemeng@huaweicloud.com \
--cc=surenb@google.com \
--cc=vbabka@kernel.org \
--cc=youngjun.park@lge.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.