lkml.org 
[lkml]   [2020]   [Nov]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: Process-wide watchpoints
    On Thu, Nov 12, 2020 at 08:46:23AM +0100, Dmitry Vyukov wrote:

    > for sampling race detection),
    > number of threads in the process can be up to, say, ~~10K and the
    > watchpoint is intended to be set for a very brief period of time
    > (~~few ms).

    Performance is a consideration here, doing lots of IPIs in such a short
    window, on potentially large machines is a DoS risk.

    > This can be done today with both perf_event_open and ptrace.
    > However, the problem is that both APIs work on a single thread level
    > (? perf_event_open can be inherited by children, but not for existing
    > siblings). So doing this would require iterating over, say, 10K

    One way would be to create the event before the process starts spawning
    threads and keeping it disabled. Then every thread will inherit it, but
    it'll be inactive.

    > I see at least one potential problem: what do we do if some sibling
    > thread already has all 4 watchpoints consumed?

    That would be immediately avoided by this, since it will have the
    watchpoint reserved per inheriting the event.

    Then you can do ioctl(PERF_EVENT_IOC_{MODIFY_ATTRIBUTES,ENABLE,DISABLE})
    to update the watch location and enable/disable it. This _will_ indeed
    result in a shitload of IPIs if the threads are active, but it should
    work.

    \
     
     \ /
      Last update: 2020-11-12 11:32    [W:3.176 / U:0.460 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site