From: "David Hildenbrand (Arm)" <david@kernel.org>
To: "Barry Song (Xiaomi)" <baohua@kernel.org>,
akpm@linux-foundation.org, linux-mm@kvack.org, ljs@kernel.org
Cc: baolin.wang@linux.alibaba.com, dev.jain@arm.com,
lance.yang@linux.dev, liam@infradead.org,
linux-kernel@vger.kernel.org, npache@redhat.com,
ryan.roberts@arm.com, ziy@nvidia.com, vbabka@kernel.org,
rppt@kernel.org, surenb@google.com, mhocko@suse.com
Subject: Re: [RFC PATCH v2 1/2] mm: allow smaller large folios to use lru_cache
Date: Wed, 29 Jul 2026 14:13:07 +0200 [thread overview]
Message-ID: <229c3079-8fde-41b4-9d6c-f0e34f780555@kernel.org> (raw)
In-Reply-To: <20260709081536.82768-2-baohua@kernel.org>
On 7/9/26 10:15, Barry Song (Xiaomi) wrote:
> For a system which primarily uses smaller orders for large folios,
> it could be beneficial to enable lru_cache to avoid lock contention.
>
> For large folios with higher orders, the number of folios involved
> would be small, so the contention is less significant.
>
> The following small program runs on a system with 16 KiB
> mTHP enabled.
>
> #include <pthread.h>
> #include <sys/mman.h>
> #include <string.h>
>
> #define NUM_THREADS 20
> #define MEM_SIZE (16 * 1024 * 1024)
> #define LOOP_COUNT 1000
>
> void* thread_worker(void* arg) {
> void *addr = mmap(NULL, MEM_SIZE, PROT_READ | PROT_WRITE,
> MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
>
> for (int i = 0; i < LOOP_COUNT; i++) {
> memset(addr, 0x55, MEM_SIZE);
> madvise(addr, MEM_SIZE, MADV_DONTNEED);
> }
>
> munmap(addr, MEM_SIZE);
> pthread_exit(NULL);
> }
>
> int main() {
> pthread_t threads[NUM_THREADS];
>
> for (long t = 0; t < NUM_THREADS; t++) {
> pthread_create(&threads[t], NULL, thread_worker, (void*)t);
> }
>
> for (int t = 0; t < NUM_THREADS; t++) {
> pthread_join(threads[t], NULL);
> }
>
> return 0;
> }
>
> Before patch:
> root@barry-desktop:/home/barry# time ./a.out
>
> real 0m20.233s
> user 0m21.739s
> sys 6m21.143s
>
> Perf lock report:
> Name acquired contended avg wait total wait max wait min wait
>
> 21158662 21158662 29.20 us 10.30 m 67.83 us 884 ns
> 13547 13547 14.68 us 198.93 ms 135.39 us 982 ns
> rcu_state 41 41 1.83 us 75.21 us 3.46 us 1.27 us
> rcu_state 34 34 1.83 us 62.09 us 2.60 us 1.16 us
> 5 5 21.31 us 106.57 us 25.77 us 18.17 us
> 5 5 3.01 us 15.07 us 5.19 us 1.53 us
> 3 3 6.42 us 19.26 us 9.63 us 4.22 us
> 3 3 4.20 us 12.61 us 7.45 us 2.10 us
> 2 2 5.03 us 10.06 us 7.88 us 2.18 us
> 2 2 2.79 us 5.59 us 3.34 us 2.25 us
> 1 1 4.70 us 4.70 us 4.70 us 4.70 us
> 1 1 9.77 us 9.77 us 9.77 us 9.77 us
>
> After patch:
> root@barry-desktop:/home/barry# time ./a.out
>
> real 0m17.796s
> user 0m24.962s
> sys 5m28.774s
>
> Perf lock report:
> Name acquired contended avg wait total wait max wait min wait
>
> 1407013 1407013 25.44 us 35.80 s 127.83 us 972 ns
> 845113 845113 47.96 us 40.54 s 152.86 us 1.21 us
> rcu_state 1920 1920 5.87 us 11.27 ms 25.02 us 1.76 us
> rcu_state 1889 1889 5.80 us 10.96 ms 30.35 us 1.61 us
> 140 140 3.97 us 555.52 us 12.51 us 1.20 us
> 10 10 61.34 us 613.42 us 96.90 us 44.48 us
> 8 8 24.03 us 192.26 us 37.64 us 6.95 us
> 8 8 12.32 us 98.56 us 25.55 us 4.16 us
>
> Both system time and lock contention are noticeably reduced.
>
> Signed-off-by: Barry Song (Xiaomi) <baohua@kernel.org>
> ---
> include/linux/swap.h | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/include/linux/swap.h b/include/linux/swap.h
> index 8d19be675baf..9c5f7a11c7b0 100644
> --- a/include/linux/swap.h
> +++ b/include/linux/swap.h
> @@ -316,9 +316,9 @@ static inline bool folio_may_be_lru_cached(struct folio *folio)
> /*
> * Holding PMD-sized folios in per-CPU LRU cache unbalances accounting.
> * Holding small numbers of low-order mTHP folios in per-CPU LRU cache
> - * will be sensible, but nobody has implemented and tested that yet.
> + * will be sensible.
> */
> - return !folio_test_large(folio);
> + return folio_order(folio) < PAGE_ALLOC_COSTLY_ORDER;
> }
>
> extern atomic_t lru_disable_count;
Sashiko rightfully raises that split_folio() can now fail more easily.
So we might want to proactively drain (earlier?) on some more of the split paths.
--
Cheers,
David
next prev parent reply other threads:[~2026-07-29 12:13 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-09 8:15 [RFC PATCH v2 0/2] mm: enable lru cache for smaller large folios Barry Song (Xiaomi)
2026-07-09 8:15 ` [RFC PATCH v2 1/2] mm: allow smaller large folios to use lru_cache Barry Song (Xiaomi)
2026-07-29 12:13 ` David Hildenbrand (Arm) [this message]
2026-07-29 22:26 ` Barry Song (Xiaomi)
2026-07-30 9:28 ` David Hildenbrand (Arm)
2026-07-30 11:28 ` Zi Yan
2026-07-09 8:15 ` [RFC PATCH v2 2/2] mm: improve large folio reuse for LRU-cached folios Barry Song (Xiaomi)
2026-07-29 12:11 ` David Hildenbrand (Arm)
2026-08-03 7:24 ` Barry Song
2026-08-03 8:03 ` David Hildenbrand (Arm)
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=229c3079-8fde-41b4-9d6c-f0e34f780555@kernel.org \
--to=david@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=baohua@kernel.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=dev.jain@arm.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=npache@redhat.com \
--cc=rppt@kernel.org \
--cc=ryan.roberts@arm.com \
--cc=surenb@google.com \
--cc=vbabka@kernel.org \
--cc=ziy@nvidia.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®