From: Bo Zhang <zhangbo0325@gmail.com>
To: aliceryhl@google.com, gregkh@linuxfoundation.org, cmllamas@google.com
Cc: arve@android.com, tkjos@android.com, christian@brauner.io,
surenb@google.com, baohua@kernel.org, zhanghongru06@gmail.com,
linux-kernel@vger.kernel.org, Bo Zhang <zhangbo56@xiaomi.com>
Subject: [RFC PATCH v3 0/2] binder: split alloc->mutex to improve performance
Date: Fri, 4 Sep 2026 19:04:46 +0800 [thread overview]
Message-ID: <20260904110448.23086-1-zhangbo0325@gmail.com> (raw)
From: Bo Zhang <zhangbo56@xiaomi.com>
Hi,
This is v3 of the binder alloc lock optimization. Thanks to the Sashiko
automated review for the feedback on v2, and to Alice Ryhl for the
review on v1.
The series splits the binder allocator lock into two:
- spinlock: protects buffer metadata (rb-trees, free_async_space,
LRU operations) on the hot path (every binder transaction).
- install_mutex: serializes page installation and shrinker zap on
the cold path (only when pages are installed or reclaimed).
Performance (binderThroughputTest, Qualcomm SM8850, 2 workers, 10 runs)
under concurrent drop_caches:
mutex (baseline) spinlock + install_mutex
throughput: 27k-59k iter/s 85k-89k iter/s
average: 0.031-0.068ms 0.021-0.022ms
P99: 0.088-0.148ms 0.046-0.056ms
Changes since v2:
- Fix an ABBA deadlock between install_mutex and mmap_lock: the install
side now uses mmap_read_trylock() and retries on contention without
holding install_mutex, so it never blocks on mmap_lock under
install_mutex (Sashiko).
- Fix a potential infinite retry loop on -EBUSY: an unexpected
already-populated PTE under install_mutex is now treated as an error
instead of being retried (Sashiko).
- Fix a use-after-free of the preallocated buffer on the -EAGAIN retry
path: the split is now rolled back and the preallocated buffer is
reallocated on each attempt (Sashiko).
Changes since v1:
- Dropped the simple spinlock-only approach that had a race between
page installation and shrinker zap (Alice).
- Added install_mutex to serialize page install and shrinker zap.
- Removed binder_page_lookup() (GUP) since install_mutex serializes
concurrent installers.
v2: https://lore.kernel.org/all/20260831123545.3655557-1-zhangbo56@xiaomi.com/
v1: https://lore.kernel.org/all/20260805152752.1924434-1-zhangbo56@xiaomi.com/
Bo Zhang (2):
binder: switch alloc->mutex to spinlock for buffer metadata
binder: add install_mutex to serialize page install and shrinker zap
drivers/android/binder_alloc.c | 144 ++++++++++++++++++++++++---------
drivers/android/binder_alloc.h | 11 ++-
2 files changed, 112 insertions(+), 43 deletions(-)
--
2.34.1
next reply other threads:[~2026-09-04 11:05 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-04 11:04 Bo Zhang [this message]
2026-09-04 11:04 ` [RFC PATCH v3 1/2] binder: switch alloc->mutex to spinlock for buffer metadata Bo Zhang
2026-09-04 11:04 ` [RFC PATCH v3 2/2] binder: add install_mutex to serialize page install and shrinker zap Bo Zhang
2026-09-04 16:19 ` Bo Zhang
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=20260904110448.23086-1-zhangbo0325@gmail.com \
--to=zhangbo0325@gmail.com \
--cc=aliceryhl@google.com \
--cc=arve@android.com \
--cc=baohua@kernel.org \
--cc=christian@brauner.io \
--cc=cmllamas@google.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=surenb@google.com \
--cc=tkjos@android.com \
--cc=zhangbo56@xiaomi.com \
--cc=zhanghongru06@gmail.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®