lkml.org 
[lkml]   [2010]   [Aug]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    Subject[RFC] BTS based perf user callchains
    Hi,

    As you may know there is an issue with user stacktraces: it requires
    userspace apps to be built with frame pointers.

    So there is something we can try: dump a piece of the top user stack page
    each time we have an event hit and let the tools deal with that later using
    the dwarf informations.

    But before trying that, which might require heavy copies, I would like to
    try something based on BTS. The idea is to look at the branch buffer and
    only pick addresses of branches that originated from "call" instructions.

    So we want BTS activated, only in user ring, without the need of interrupts
    once we reach the limit of the buffer, we can just run in a kind of live
    mode and read on need. This could be a secondary perf event that has no mmap
    buffer. Something only used by the kernel internally by others true perf events
    in a given context. Primary perf events can then read on this BTS buffer when
    they want.

    Now there are two ways:

    - record the whole branch buffer each time we overflow on another perf event
    and let post processing userspace deal with "call" instruction filtering to
    build the stacktrace on top of the branch trace.

    - do the "call" filtering on record time. That requires to inspect each
    recorded branches and look at the instruction content from the fast path.

    I don't know which solution could be the faster one.


    I'm not even sure that will work. Also, while looking at the BTS implementation
    in perf, I see we have one BTS buffer per cpu. But that doesn't look right as
    the code flow is not linear per cpu but per task. Hence I suspect we need
    one BTS buffer per task. But may be someone tried that and encountered a
    problem?


    Tell me your feelings.

    Thanks.



    \
     
     \ /
      Last update: 2010-08-02 20:37    [W:0.022 / U:32.296 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site