• F
    perf: Generalize perf lock's sample event reordering to the session layer · c61e52ee
    Frederic Weisbecker 提交于
    The sample events recorded by perf record are not time ordered
    because we have one buffer per cpu for each event (even demultiplexed
    per task/per cpu for task bound events). But when we read trace events
    we want them to be ordered by time because many state machines are
    involved.
    
    There are currently two ways perf tools deal with that:
    
    - use -M to multiplex every buffers (perf sched, perf kmem)
      But this creates a lot of contention in SMP machines on
      record time.
    
    - use a post-processing time reordering (perf timechart, perf lock)
      The reordering used by timechart is simple but doesn't scale well
      with huge flow of events, in terms of performance and memory use
      (unusable with perf lock for example).
      Perf lock has its own samples reordering that flushes its memory
      use in a regular basis and that uses a sorting based on the
      previous event queued (a new event to be queued is close to the
      previous one most of the time).
    
    This patch proposes to export perf lock's samples reordering facility
    to the session layer that reads the events. So if a tool wants to
    get ordered sample events, it needs to set its
    struct perf_event_ops::ordered_samples to true and that's it.
    
    This prepares tracing based perf tools to get rid of the need to
    use buffers multiplexing (-M) or to implement their own
    reordering.
    
    Also lower the flush period to 2 as it's sufficient already.
    Signed-off-by: NFrederic Weisbecker <fweisbec@gmail.com>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Hitoshi Mitake <mitake@dcl.info.waseda.ac.jp>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Masami Hiramatsu <mhiramat@redhat.com>
    Cc: Tom Zanussi <tzanussi@gmail.com>
    c61e52ee
builtin-lock.c 21.3 KB