URL
https://opencores.org/ocsvn/test_project/test_project/trunk
Subversion Repositories test_project
[/] [test_project/] [trunk/] [linux_sd_driver/] [Documentation/] [lockstat.txt] - Rev 62
Compare with Previous | Blame | View Log
LOCK STATISTICS- WHATAs the name suggests, it provides statistics on locks.- WHYBecause things like lock contention can severely impact performance.- HOWLockdep already has hooks in the lock functions and maps lock instances tolock classes. We build on that. The graph below shows the relation betweenthe lock functions and the various hooks therein.__acquire|lock _____| \| __contended| || <wait>| _______/|/|__acquired|.<hold>.|__release|unlocklock, unlock - the regular lock functions__* - the hooks<> - statesWith these hooks we provide the following statistics:con-bounces - number of lock contention that involved x-cpu datacontentions - number of lock acquisitions that had to waitwait time min - shortest (non-0) time we ever had to wait for a lockmax - longest time we ever had to wait for a locktotal - total time we spend waiting on this lockacq-bounces - number of lock acquisitions that involved x-cpu dataacquisitions - number of times we took the lockhold time min - shortest (non-0) time we ever held the lockmax - longest time we ever held the locktotal - total time this lock was heldFrom these number various other statistics can be derived, such as:hold time average = hold time total / acquisitionsThese numbers are gathered per lock class, per read/write state (whenapplicable).It also tracks 4 contention points per class. A contention point is a call sitethat had to wait on lock acquisition.- USAGELook at the current lock statistics:( line numbers not part of actual output, done for clarity in the explanationbelow )# less /proc/lock_stat01 lock_stat version 0.202 -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------03 class name con-bounces contentions waittime-min waittime-max waittime-total acq-bounces acquisitions holdtime-min holdtime-max holdtime-total04 -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------0506 &inode->i_data.tree_lock-W: 15 21657 0.18 1093295.30 11547131054.85 58 10415 0.16 87.51 6387.6007 &inode->i_data.tree_lock-R: 0 0 0.00 0.00 0.00 23302 231198 0.25 8.45 98023.3808 --------------------------09 &inode->i_data.tree_lock 0 [<ffffffff8027c08f>] add_to_page_cache+0x5f/0x1901011 ...............................................................................................................................................................................................1213 dcache_lock: 1037 1161 0.38 45.32 774.51 6611 243371 0.15 306.48 77387.2414 -----------15 dcache_lock 180 [<ffffffff802c0d7e>] sys_getcwd+0x11e/0x23016 dcache_lock 165 [<ffffffff802c002a>] d_alloc+0x15a/0x21017 dcache_lock 33 [<ffffffff8035818d>] _atomic_dec_and_lock+0x4d/0x7018 dcache_lock 1 [<ffffffff802beef8>] shrink_dcache_parent+0x18/0x130This excerpt shows the first two lock class statistics. Line 01 shows theoutput version - each time the format changes this will be updated. Line 02-04show the header with column descriptions. Lines 05-10 and 13-18 show the actualstatistics. These statistics come in two parts; the actual stats separated by ashort separator (line 08, 14) from the contention points.The first lock (05-10) is a read/write lock, and shows two lines above theshort separator. The contention points don't match the column descriptors,they have two: contentions and [<IP>] symbol.View the top contending locks:# grep : /proc/lock_stat | head&inode->i_data.tree_lock-W: 15 21657 0.18 1093295.30 11547131054.85 58 10415 0.16 87.51 6387.60&inode->i_data.tree_lock-R: 0 0 0.00 0.00 0.00 23302 231198 0.25 8.45 98023.38dcache_lock: 1037 1161 0.38 45.32 774.51 6611 243371 0.15 306.48 77387.24&inode->i_mutex: 161 286 18446744073709 62882.54 1244614.55 3653 20598 18446744073709 62318.60 1693822.74&zone->lru_lock: 94 94 0.53 7.33 92.10 4366 32690 0.29 59.81 16350.06&inode->i_data.i_mmap_lock: 79 79 0.40 3.77 53.03 11779 87755 0.28 116.93 29898.44&q->__queue_lock: 48 50 0.52 31.62 86.31 774 13131 0.17 113.08 12277.52&rq->rq_lock_key: 43 47 0.74 68.50 170.63 3706 33929 0.22 107.99 17460.62&rq->rq_lock_key#2: 39 46 0.75 6.68 49.03 2979 32292 0.17 125.17 17137.63tasklist_lock-W: 15 15 1.45 10.87 32.70 1201 7390 0.58 62.55 13648.47Clear the statistics:# echo 0 > /proc/lock_stat
