Thread (63 messages) 63 messages, 7 authors, 2024-12-16

Re: [PATCH bpf-next 08/13] uprobes/x86: Add support to optimize uprobes

From: Oleg Nesterov <oleg@redhat.com>
Date: 2024-12-16 10:13:35
Also in: bpf, lkml

David,

let me say first that my understanding of this magic is very limited,
please correct me.

On 12/16, David Laight wrote:
It all depends on how hard __replace_page() tries to be atomic.
The page has to change from one backed by the executable to a private
one backed by swap - otherwise you can't write to it.
This is what uprobe_write_opcode() does,
But the problems arise when the instruction prefetch unit has read
part of the 5-byte instruction (it might even only read half a cache
line at a time).
I'm not sure how long the pipeline can sit in that state - but I
can do a memory read of a PCIe address that takes ~3000 clocks.
(And a misaligned AVX-512 read is probably eight 8-byte transfers.)

So I think you need to force an interrupt while the PTE is invalid.
And that need to be simultaneous on all cpu running that process.
__replace_page() does ptep_get_and_clear(old_pte) + flush_tlb_page().

That's not enough?
Stopping the process using ptrace would do it.
Not an option :/

Oleg.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help