1. 24 Apr, 2010 3 commits
    • Frederic Weisbecker's avatar
      perf: Generalize perf lock's sample event reordering to the session layer · c61e52ee
      Frederic Weisbecker authored
      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: default avatarFrederic 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
    • Stephane Eranian's avatar
      perf: Fix initialization bug in parse_single_tracepoint_event() · 5710fcad
      Stephane Eranian authored
      The parse_single_tracepoint_event() was setting some attributes
      before it validated the event was indeed a tracepoint event. This
      caused problems with other initialization routines like in the
      builtin-top.c module whereby sample_period is not set if not 0.
      Signed-off-by: default avatarStephane Eranian <eranian@google.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Ingo Molnar <mingo@elte.hu>
      LKML-Reference: <4bcf232b.698fd80a.6fbe.ffffb737@mx.google.com>
      Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
      5710fcad
    • Hitoshi Mitake's avatar
      perf lock: Fix state machine to recognize lock sequence · e4cef1f6
      Hitoshi Mitake authored
      Previous state machine of perf lock was really broken.
      This patch improves it a little.
      
      This patch prepares the list of state machine that represents
      lock sequences for each threads.
      
      These state machines can be one of these sequences:
      
            1) acquire -> acquired -> release
            2) acquire -> contended -> acquired -> release
            3) acquire (w/ try) -> release
            4) acquire (w/ read) -> release
      
      The case of 4) is a little special.
      Double acquire of read lock is allowed, so the state machine
      counts read lock number, and permits double acquire and release.
      
      But, things are not so simple. Something in my model is still wrong.
      I counted the number of lock instances with bad sequence,
      and ratio is like this (case of tracing whoami): bad:233, total:2279
      
      version 2:
       * threads are now identified with tid, not pid
       * prepared SEQ_STATE_READ_ACQUIRED for read lock.
       * bunch of struct lock_seq_stat is now linked list
       * debug information enhanced (this have to be removed someday)
         e.g.
           | === output for debug===
           |
           | bad:233, total:2279
           | bad rate:0.000000
           | histogram of events caused bad sequence
           |     acquire: 165
           |    acquired: 0
           |   contended: 0
           |     release: 68
      Signed-off-by: default avatarHitoshi Mitake <mitake@dcl.info.waseda.ac.jp>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Jens Axboe <jens.axboe@oracle.com>
      Cc: Jason Baron <jbaron@redhat.com>
      Cc: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      LKML-Reference: <1271852634-9351-1-git-send-email-mitake@dcl.info.waseda.ac.jp>
      [rename SEQ_STATE_UNINITED to SEQ_STATE_UNINITIALIZED]
      Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
      e4cef1f6
  2. 23 Apr, 2010 11 commits
  3. 22 Apr, 2010 26 commits