Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f62508f6 authored by Juri Lelli's avatar Juri Lelli Committed by Ingo Molnar
Browse files

Documentation: Add statistics about nested locks



Explain what the trailing "/1" on some lock class names of
lock_stat output means.

Reviewed-by: default avatarYong Zhang <yong.zhang0@gmail.com>
Signed-off-by: default avatarJuri Lelli <juri.lelli@gmail.com>
Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/4DD4F6C1.5090701@gmail.com


Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent dc7acbb2
Loading
Loading
Loading
Loading
+34 −2
Original line number Diff line number Diff line
@@ -12,8 +12,9 @@ Because things like lock contention can severely impact performance.
- HOW

Lockdep already has hooks in the lock functions and maps lock instances to
lock classes. We build on that. The graph below shows the relation between
the lock functions and the various hooks therein.
lock classes. We build on that (see Documentation/lockdep-design.txt).
The graph below shows the relation between the lock functions and the various
hooks therein.

        __acquire
            |
@@ -128,6 +129,37 @@ points are the points we're contending with.

The integer part of the time values is in us.

Dealing with nested locks, subclasses may appear:

32...............................................................................................................................................................................................
33
34                               &rq->lock:         13128          13128           0.43         190.53      103881.26          97454        3453404           0.00         401.11    13224683.11
35                               ---------
36                               &rq->lock            645          [<ffffffff8103bfc4>] task_rq_lock+0x43/0x75
37                               &rq->lock            297          [<ffffffff8104ba65>] try_to_wake_up+0x127/0x25a
38                               &rq->lock            360          [<ffffffff8103c4c5>] select_task_rq_fair+0x1f0/0x74a
39                               &rq->lock            428          [<ffffffff81045f98>] scheduler_tick+0x46/0x1fb
40                               ---------
41                               &rq->lock             77          [<ffffffff8103bfc4>] task_rq_lock+0x43/0x75
42                               &rq->lock            174          [<ffffffff8104ba65>] try_to_wake_up+0x127/0x25a
43                               &rq->lock           4715          [<ffffffff8103ed4b>] double_rq_lock+0x42/0x54
44                               &rq->lock            893          [<ffffffff81340524>] schedule+0x157/0x7b8
45
46...............................................................................................................................................................................................
47
48                             &rq->lock/1:         11526          11488           0.33         388.73      136294.31          21461          38404           0.00          37.93      109388.53
49                             -----------
50                             &rq->lock/1          11526          [<ffffffff8103ed58>] double_rq_lock+0x4f/0x54
51                             -----------
52                             &rq->lock/1           5645          [<ffffffff8103ed4b>] double_rq_lock+0x42/0x54
53                             &rq->lock/1           1224          [<ffffffff81340524>] schedule+0x157/0x7b8
54                             &rq->lock/1           4336          [<ffffffff8103ed58>] double_rq_lock+0x4f/0x54
55                             &rq->lock/1            181          [<ffffffff8104ba65>] try_to_wake_up+0x127/0x25a

Line 48 shows statistics for the second subclass (/1) of &rq->lock class
(subclass starts from 0), since in this case, as line 50 suggests,
double_rq_lock actually acquires a nested lock of two spinlocks.

View the top contending locks:

# grep : /proc/lock_stat | head