From: Andrii Nakryiko <andrii@kernel.org>
To: linux-trace-kernel@vger.kernel.org, linux-mm@kvack.org,
akpm@linux-foundation.org, peterz@infradead.org
Cc: oleg@redhat.com, rostedt@goodmis.org, mhiramat@kernel.org,
bpf@vger.kernel.org, linux-kernel@vger.kernel.org,
jolsa@kernel.org, paulmck@kernel.org, willy@infradead.org,
surenb@google.com, mjguzik@gmail.com, brauner@kernel.org,
jannh@google.com, mhocko@kernel.org, vbabka@suse.cz,
shakeel.butt@linux.dev, hannes@cmpxchg.org,
Liam.Howlett@oracle.com, lorenzo.stoakes@oracle.com,
david@redhat.com, arnd@arndb.de, richard.weiyang@gmail.com,
zhangpeng.00@bytedance.com, linmiaohe@huawei.com,
viro@zeniv.linux.org.uk, hca@linux.ibm.com,
Andrii Nakryiko <andrii@kernel.org>
Subject: [PATCH v4 tip/perf/core 0/4] uprobes,mm: speculative lockless VMA-to-uprobe lookup
Date: Sun, 27 Oct 2024 18:08:14 -0700 [thread overview]
Message-ID: <20241028010818.2487581-1-andrii@kernel.org> (raw)
Implement speculative (lockless) resolution of VMA to inode to uprobe,
bypassing the need to take mmap_lock for reads, if possible. First two patches
by Suren adds mm_struct helpers that help detect whether mm_struct was
changed, which is used by uprobe logic to validate that speculative results
can be trusted after all the lookup logic results in a valid uprobe instance.
Patch #3 is a simplification to uprobe VMA flag checking, suggested by Oleg.
And, finally, patch #4 is the speculative VMA-to-uprobe resolution logic
itself, and is the focal point of this patch set. It makes entry uprobes in
common case scale very well with number of CPUs, as we avoid any locking or
cache line bouncing between CPUs. See corresponding patch for details and
benchmarking results.
Note, this patch set assumes that FMODE_BACKING files were switched to have
SLAB_TYPE_SAFE_BY_RCU semantics, which was recently done by Christian Brauner
in [0]. This change can be pulled into perf/core through stable
tags/vfs-6.13.for-bpf.file tag from [1].
[0] https://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git/commit/?h=vfs-6.13.for-bpf.file&id=8b1bc2590af61129b82a189e9dc7c2804c34400e
[1] git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git
v3->v4:
- rebased and dropped data_race(), given mm_struct uses real seqcount (Peter);
v2->v3:
- dropped kfree_rcu() patch (Christian);
- added data_race() annotations for fields of vma and vma->vm_file which could
be modified during speculative lookup (Oleg);
- fixed int->long problem in stubs for mmap_lock_speculation_{start,end}(),
caught by Kernel test robot;
v1->v2:
- adjusted vma_end_write_all() comment to point out it should never be called
manually now, but I wasn't sure how ACQUIRE/RELEASE comments should be
reworded (previously requested by Jann), so I'd appreciate some help there
(Jann);
- int -> long change for mm_lock_seq, as agreed at LPC2024 (Jann, Suren, Liam);
- kfree_rcu_mightsleep() for FMODE_BACKING (Suren, Christian);
- vm_flags simplification in find_active_uprobe_rcu() and
find_active_uprobe_speculative() (Oleg);
- guard(rcu)() simplified find_active_uprobe_speculative() implementation.
Andrii Nakryiko (2):
uprobes: simplify find_active_uprobe_rcu() VMA checks
uprobes: add speculative lockless VMA-to-inode-to-uprobe resolution
Suren Baghdasaryan (2):
mm: Convert mm_lock_seq to a proper seqcount
mm: Introduce mmap_lock_speculation_{begin|end}
include/linux/mm.h | 12 ++---
include/linux/mm_types.h | 7 ++-
include/linux/mmap_lock.h | 87 ++++++++++++++++++++++++--------
kernel/events/uprobes.c | 47 ++++++++++++++++-
kernel/fork.c | 5 +-
mm/init-mm.c | 2 +-
tools/testing/vma/vma.c | 4 +-
tools/testing/vma/vma_internal.h | 4 +-
8 files changed, 129 insertions(+), 39 deletions(-)
--
2.43.5
next reply other threads:[~2024-10-28 1:09 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-28 1:08 Andrii Nakryiko [this message]
2024-10-28 1:08 ` [PATCH v4 tip/perf/core 1/4] mm: Convert mm_lock_seq to a proper seqcount Andrii Nakryiko
2024-10-29 11:52 ` Vlastimil Babka
2024-11-21 12:40 ` Peter Zijlstra
2024-11-21 15:35 ` Suren Baghdasaryan
2024-10-28 1:08 ` [PATCH v4 tip/perf/core 2/4] mm: Introduce mmap_lock_speculation_{begin|end} Andrii Nakryiko
2024-10-29 16:48 ` Vlastimil Babka
2024-11-21 14:44 ` Peter Zijlstra
2024-11-21 15:22 ` Peter Zijlstra
2024-11-21 15:36 ` Suren Baghdasaryan
2024-11-21 16:32 ` Suren Baghdasaryan
2024-10-28 1:08 ` [PATCH v4 tip/perf/core 3/4] uprobes: simplify find_active_uprobe_rcu() VMA checks Andrii Nakryiko
2024-10-28 1:51 ` Masami Hiramatsu
2024-10-28 1:08 ` [PATCH v4 tip/perf/core 4/4] uprobes: add speculative lockless VMA-to-inode-to-uprobe resolution Andrii Nakryiko
2024-11-12 0:28 ` Masami Hiramatsu
2024-11-12 1:04 ` Suren Baghdasaryan
2024-11-12 18:09 ` Andrii Nakryiko
2024-11-12 23:53 ` Masami Hiramatsu
2024-11-06 2:01 ` [PATCH v4 tip/perf/core 0/4] uprobes,mm: speculative lockless VMA-to-uprobe lookup Andrii Nakryiko
2024-11-11 17:26 ` Andrii Nakryiko
2024-11-20 15:40 ` Andrii Nakryiko
2024-11-20 15:43 ` Peter Zijlstra
2024-11-20 16:03 ` Ingo Molnar
2024-11-20 17:23 ` Andrii Nakryiko
2024-11-21 9:33 ` Ingo Molnar
2024-11-21 14:43 ` Andrii Nakryiko
2024-11-20 17:23 ` Andrii Nakryiko
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=20241028010818.2487581-1-andrii@kernel.org \
--to=andrii@kernel.org \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=arnd@arndb.de \
--cc=bpf@vger.kernel.org \
--cc=brauner@kernel.org \
--cc=david@redhat.com \
--cc=hannes@cmpxchg.org \
--cc=hca@linux.ibm.com \
--cc=jannh@google.com \
--cc=jolsa@kernel.org \
--cc=linmiaohe@huawei.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=lorenzo.stoakes@oracle.com \
--cc=mhiramat@kernel.org \
--cc=mhocko@kernel.org \
--cc=mjguzik@gmail.com \
--cc=oleg@redhat.com \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=richard.weiyang@gmail.com \
--cc=rostedt@goodmis.org \
--cc=shakeel.butt@linux.dev \
--cc=surenb@google.com \
--cc=vbabka@suse.cz \
--cc=viro@zeniv.linux.org.uk \
--cc=willy@infradead.org \
--cc=zhangpeng.00@bytedance.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