• H
    perf lock: Fix state machine to recognize lock sequence · e4cef1f6
    Hitoshi Mitake 提交于
    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: NHitoshi 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: NFrederic Weisbecker <fweisbec@gmail.com>
    e4cef1f6
builtin-lock.c 25.1 KB