From: Andrii Nakryiko <andrii.nakryiko@gmail.com>
To: Andrii Nakryiko <andrii@kernel.org>
Cc: linux-trace-kernel@vger.kernel.org, linux-mm@kvack.org,
peterz@infradead.org, 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,
akpm@linux-foundation.org, 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
Subject: Re: [PATCH v3 tip/perf/core 0/4] uprobes,mm: speculative lockless VMA-to-uprobe lookup
Date: Wed, 23 Oct 2024 10:54:34 -0700 [thread overview]
Message-ID: <CAEf4BzbJRUjcT9J7tFOMmyLsiTwoCMgZDp08EkVrF1vxO66DAA@mail.gmail.com> (raw)
In-Reply-To: <20241010205644.3831427-1-andrii@kernel.org>
On Thu, Oct 10, 2024 at 1:56 PM Andrii Nakryiko <andrii@kernel.org> wrote:
>
> Implement speculative (lockless) resolution of VMA to inode to uprobe,
> bypassing the need to take mmap_lock for reads, if possible. Patch #1 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 #2
> follows to make mm_lock_seq into 64-bit counter (on 64-bit architectures), as
> requested by Jann Horn.
>
> 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
>
> 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 (3):
> mm: switch to 64-bit mm_lock_seq/vm_lock_seq on 64-bit architectures
> uprobes: simplify find_active_uprobe_rcu() VMA checks
> uprobes: add speculative lockless VMA-to-inode-to-uprobe resolution
>
> Suren Baghdasaryan (1):
> mm: introduce mmap_lock_speculation_{start|end}
>
> include/linux/mm.h | 6 ++--
> include/linux/mm_types.h | 7 ++--
> include/linux/mmap_lock.h | 72 ++++++++++++++++++++++++++++++++-------
> kernel/events/uprobes.c | 52 +++++++++++++++++++++++++++-
> kernel/fork.c | 3 --
> 5 files changed, 119 insertions(+), 21 deletions(-)
>
> --
> 2.43.5
>
This applies cleanly to tip/perf/core with or without Jiri's patches
([0]). No need to rebase and resend, this is ready to go in.
[0] https://lore.kernel.org/all/20241018202252.693462-1-jolsa@kernel.org/
prev parent reply other threads:[~2024-10-23 17:54 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-10 20:56 Andrii Nakryiko
2024-10-10 20:56 ` [PATCH v3 tip/perf/core 1/4] mm: introduce mmap_lock_speculation_{start|end} Andrii Nakryiko
2024-10-13 7:56 ` Shakeel Butt
2024-10-14 20:27 ` Andrii Nakryiko
2024-10-14 20:48 ` Suren Baghdasaryan
2024-10-23 20:10 ` Peter Zijlstra
2024-10-23 22:17 ` Suren Baghdasaryan
2024-10-24 9:56 ` Peter Zijlstra
2024-10-24 16:28 ` Suren Baghdasaryan
2024-10-24 21:04 ` Suren Baghdasaryan
2024-10-24 23:20 ` Andrii Nakryiko
2024-10-24 23:33 ` Suren Baghdasaryan
2024-10-25 5:12 ` Andrii Nakryiko
2024-10-10 20:56 ` [PATCH v3 tip/perf/core 2/4] mm: switch to 64-bit mm_lock_seq/vm_lock_seq on 64-bit architectures Andrii Nakryiko
2024-10-13 7:56 ` Shakeel Butt
2024-10-17 2:01 ` Suren Baghdasaryan
2024-10-17 18:55 ` Andrii Nakryiko
2024-10-17 19:42 ` Suren Baghdasaryan
2024-10-17 20:12 ` Andrii Nakryiko
2024-10-23 19:02 ` Peter Zijlstra
2024-10-23 19:12 ` Andrii Nakryiko
2024-10-23 19:31 ` Peter Zijlstra
2024-10-10 20:56 ` [PATCH v3 tip/perf/core 3/4] uprobes: simplify find_active_uprobe_rcu() VMA checks Andrii Nakryiko
2024-10-10 20:56 ` [PATCH v3 tip/perf/core 4/4] uprobes: add speculative lockless VMA-to-inode-to-uprobe resolution Andrii Nakryiko
2024-10-11 5:01 ` Oleg Nesterov
2024-10-23 19:22 ` Peter Zijlstra
2024-10-23 20:02 ` Andrii Nakryiko
2024-10-23 20:19 ` Peter Zijlstra
2024-10-23 17:54 ` Andrii Nakryiko [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=CAEf4BzbJRUjcT9J7tFOMmyLsiTwoCMgZDp08EkVrF1vxO66DAA@mail.gmail.com \
--to=andrii.nakryiko@gmail.com \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=andrii@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=brauner@kernel.org \
--cc=hannes@cmpxchg.org \
--cc=jannh@google.com \
--cc=jolsa@kernel.org \
--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=rostedt@goodmis.org \
--cc=shakeel.butt@linux.dev \
--cc=surenb@google.com \
--cc=vbabka@suse.cz \
--cc=willy@infradead.org \
/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