Skip to contentSkip to conversation

lock_stat &rq->lock/1 class name meaning

DISCUSSION Juri Lelli 3 participants 5 messages May 11, 2011 – May 12, 2011

lore
Share & tools
lore

Juri Lelli

author
#0 lore raw

Hi,
I'm trying to collect contention statistics through /proc/lock_stat about scheduler data structures.

What I obtain if a do "cat /proc/lock_stat" is something like:
...
&rq->lock: 13128 13128 0.43 190.53
103881.26 97454 3453404 0.00
401.11 13224683.11
---------

&rq->lock            645          [<ffffffff8103bfc4>] task_rq_lock+0x43/0x75
&rq->lock            297          [<ffffffff8104ba65>] try_to_wake_up+0x127/0x25a
&rq->lock            360          [<ffffffff8103c4c5>] select_task_rq_fair+0x1f0/0x74a
&rq->lock            428          [<ffffffff81045f98>] scheduler_tick+0x46/0x1fb
---------
&rq->lock             77          [<ffffffff8103bfc4>] task_rq_lock+0x43/0x75
&rq->lock            174          [<ffffffff8104ba65>] try_to_wake_up+0x127/0x25a
&rq->lock           4715          [<ffffffff8103ed4b>] double_rq_lock+0x42/0x54
&rq->lock            893          [<ffffffff81340524>] schedule+0x157/0x7b8

.
.
.
...
&rq->lock/1: 11526 11488 0.33 388.73

     136294.31          21461          38404           0.00 

37.93 109388.53
-----------
&rq->lock/1 11526 [<ffffffff8103ed58>] double_rq_lock+0x4f/0x54
-----------

&rq->lock/1           5645          [<ffffffff8103ed4b>] double_rq_lock+0x42/0x54
&rq->lock/1           1224          [<ffffffff81340524>] schedule+0x157/0x7b8
&rq->lock/1           4336          [<ffffffff8103ed58>] double_rq_lock+0x4f/0x54
&rq->lock/1            181          [<ffffffff8104ba65>] try_to_wake_up+0x127/0x25a

I guess the first one is about the per-rq (per-CPU) spinlock, but what about the second? What the "/1" stands for? Since every rq has a different spinlock, does &rq->lock group numbers from all the runqueues?

Thanks a lot,
Juri

#1 lore raw
Quoted 46 lines · Juri Lelli

Hi,
I'm trying to collect contention statistics through /proc/lock_stat about scheduler data structures.

What I obtain if a do "cat /proc/lock_stat" is something like:
...
&rq->lock: 13128 13128 0.43
190.53 103881.26 97454 3453404 0.00
401.11 13224683.11
---------
&rq->lock 645 [<ffffffff8103bfc4>]
task_rq_lock+0x43/0x75
&rq->lock 297 [<ffffffff8104ba65>]
try_to_wake_up+0x127/0x25a
&rq->lock 360 [<ffffffff8103c4c5>]
select_task_rq_fair+0x1f0/0x74a
&rq->lock 428 [<ffffffff81045f98>]
scheduler_tick+0x46/0x1fb
---------
&rq->lock 77 [<ffffffff8103bfc4>]
task_rq_lock+0x43/0x75
&rq->lock 174 [<ffffffff8104ba65>]
try_to_wake_up+0x127/0x25a
&rq->lock 4715 [<ffffffff8103ed4b>]

double_rq_lock+0x42/0x54
&rq->lock            893          [<ffffffff81340524>] schedule+0x157/0x7b8

.
.
.
...
&rq->lock/1: 11526 11488 0.33
388.73 136294.31 21461 38404 0.00
37.93 109388.53
-----------
&rq->lock/1 11526 [<ffffffff8103ed58>]

double_rq_lock+0x4f/0x54
-----------

&rq->lock/1 5645 [<ffffffff8103ed4b>]
double_rq_lock+0x42/0x54
&rq->lock/1 1224 [<ffffffff81340524>]
schedule+0x157/0x7b8
&rq->lock/1 4336 [<ffffffff8103ed58>]
double_rq_lock+0x4f/0x54
&rq->lock/1 181 [<ffffffff8104ba65>]
try_to_wake_up+0x127/0x25a

Quoted 2 lines

I guess the first one is about the per-rq (per-CPU) spinlock, but what about the second? What the "/1" stands for?

It is also rq but it's subclass is 1.

Take a look at raw_spin_lock_nested(&this_rq->lock, SINGLE_DEPTH_NESTING); in _double_lock_balance()

Quoted 2 lines

Since every rq has a different spinlock, does &rq->lock group numbers from all the runqueues?

Yup.

Thanks,
Yong

Quoted 8 lines

Thanks a lot,
Juri
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

author
#2 lore raw

Thanks!

Quoted 10 lines · Yong Zhang
Quoted 9 lines · Juri Lelli

Hi,
I'm trying to collect contention statistics through /proc/lock_stat about scheduler data structures.

What I obtain if a do "cat /proc/lock_stat" is something like:
...
&rq->lock: 13128 13128 0.43
[...]

Quoted 7 lines
Quoted 2 lines

I guess the first one is about the per-rq (per-CPU) spinlock, but what about the second? What the "/1" stands for?

It is also rq but it's subclass is 1.

Take a look at raw_spin_lock_nested(&this_rq->lock, SINGLE_DEPTH_NESTING); in _double_lock_balance()

Ok, I've put more light on this also looking at lockdep.h comments and lockdep-design documentation.

Since I'm probably not the only one having troubles undestanding lock_stat output, maybe could be useful to add something on this inside lockstat documentation (I can try to do this). What you think?

Juri

#3 lore raw
Quoted 21 lines · Juri Lelli

Thanks!

Quoted 10 lines · Yong Zhang
Quoted 9 lines · Juri Lelli

Hi,
I'm trying to collect contention statistics through /proc/lock_stat about scheduler data structures.

What I obtain if a do "cat /proc/lock_stat" is something like:
...
&rq->lock: 13128 13128 0.43
[...]

Quoted 7 lines
Quoted 2 lines

I guess the first one is about the per-rq (per-CPU) spinlock, but what about the second? What the "/1" stands for?

It is also rq but it's subclass is 1.

Take a look at raw_spin_lock_nested(&this_rq->lock, SINGLE_DEPTH_NESTING); in _double_lock_balance()

Quoted 7 lines

Ok, I've put more light on this also looking at lockdep.h comments and lockdep-design documentation.

Since I'm probably not the only one having troubles undestanding lock_stat output, maybe could be useful to add something on this inside lockstat documentation (I can try to do this). What you think?

Any improvement will be good :)

Cc'ing PeterZ and Ingo.

Thanks,
Yong

#4 lore raw
Quoted 25 lines · Yong Zhang
Quoted 24 lines · Juri Lelli

Thanks!

Quoted 10 lines · Yong Zhang
Quoted 9 lines · Juri Lelli

Hi,
I'm trying to collect contention statistics through /proc/lock_stat about scheduler data structures.

What I obtain if a do "cat /proc/lock_stat" is something like:
...
&rq->lock:         13128          13128           0.43 [...]

Quoted 7 lines
Quoted 2 lines

I guess the first one is about the per-rq (per-CPU) spinlock, but what about the second? What the "/1" stands for?

It is also rq but it's subclass is 1.

Take a look at raw_spin_lock_nested(&this_rq->lock, SINGLE_DEPTH_NESTING); in _double_lock_balance()

Ok, I've put more light on this also looking at lockdep.h comments and lockdep-design documentation.

Quoted 6 lines
Quoted 4 lines

Since I'm probably not the only one having troubles undestanding lock_stat output, maybe could be useful to add something on this inside lockstat documentation (I can try to do this). What you think?

Any improvement will be good :)

I think Documentation/lockstat.txt is out of date, the last change of this file can be back to Thu Nov 19 13:54:05 2009.