Enabled simple lock details
The Lock Activity sections of the report measure the intervals of time (in milliseconds) that each thread spends in each of the states for this lock. The columns report the number of times that a thread entered the given state, followed by the maximum, minimum, and average time that a thread spent in the state once entered, followed by the total time that all threads spent in that state.
These sections of the report distinguish whether interrupts were enabled or disabled at the time that the thread was in the given state.
The following example is an enabled simple lock detail report:
[AIX SIMPLE Lock] CLASS: PROC_INT_CLASS.00000004
ADDRESS: 000000000200786C
======================================================================================
| | | Percent Held ( 26.235284s )
Type | Miss Spin Wait Busy | Secs Held | Real Real Comb Real
Enabled | Rate Count Count Count |CPU Elapsed | CPU Elapsed Spin Wait
| 0.438 57 2658 12 |0.022852 0.032960 | 0.04 0.13 0.00 0.00
--------------------------------------------------------------------------------------
Total Acquisitions: 2498 |SpinQ Min Max Avg | WaitQ Min Max Avg
|Depth 0 1 0 | Depth 0 0 0
--------------------------------------------------------------------------------------
Lock Activity (mSecs) - Interrupts Enabled
SIMPLE Count Minimum Maximum Average Total
+++++++ ++++++ ++++++++++++++ ++++++++++++++ ++++++++++++++ ++++++++++++++
LOCK 8027 0.000597 0.022486 0.002847 22.852000
SPIN 45 0.001376 0.008960 0.004738 0.213212
UNDISP 0 0.000000 0.000000 0.000000 0.000000
WAIT 0 0.000000 0.000000 0.000000 0.000000
PREEMPT 4918 0.000811 0.009728 0.001955 9.615807
Acqui- Miss Spin Wait Busy Percent Held of Total Time
Function Name sitions Rate Count Count Count CPU Elapse Spin Wait Return Address Start Address Offset
^^^^^^^^^^^^ ^^^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^
.dispatch 3177 0.63 20 0 0 0.00 0.02 0.00 0.00 0000000000039CF4 0000000000000000 00039CF4
.dispatch 6053 0.31 19 0 0 0.03 0.07 0.00 0.00 00000000000398E4 0000000000000000 000398E4
.setrq 3160 0.19 6 0 0 0.01 0.02 0.00 0.00 0000000000038E60 0000000000000000 00038E60
.steal_threads 1 0.00 0 0 0 0.00 0.00 0.00 0.00 0000000000066A68 0000000000000000 00066A68
.steal_threads 6 0.00 0 0 0 0.00 0.00 0.00 0.00 0000000000066CE0 0000000000000000 00066CE0
.dispatch 535 2.19 12 0 12 0.01 0.02 0.00 0.00 0000000000039D88 0000000000000000 00039D88
.dispatch 2 0.00 0 0 0 0.00 0.00 0.00 0.00 0000000000039D14 0000000000000000 00039D14
.prio_requeue 7 0.00 0 0 0 0.00 0.00 0.00 0.00 000000000003B2A4 0000000000000000 0003B2A4
.setnewrq 4 0.00 0 0 0 0.00 0.00 0.00 0.00 0000000000038980 0000000000000000 00038980
Acqui- Miss Spin Wait Busy Percent Held of Total Time Process
ThreadID sitions Rate Count Count Count CPU Elapse Spin Wait ProcessID Name
~~~~~~~~ ~~~~~~~~ ~~~~~~ ~~~~~~ ~~~~~~ ~~~~~~ ~~~~~~ ~~~~~~ ~~~~~~ ~~~~~~ ~~~~~~~~~ ~~~~~~~~~~~~~
775 11548 0.34 39 0 0 0.06 0.10 0.00 0.00 774 wait
35619 3 25.00 1 0 0 0.00 0.00 0.00 0.00 18392 sleep
31339 21 4.55 1 0 0 0.00 0.00 0.00 0.00 7364 java
35621 2 0.00 0 0 0 0.00 0.00 0.00 0.00 18394 locktrace
(... lines omitted ...)
Item | Descriptor |
---|---|
Type | If the simple lock was used with interrupts, this field is enabled. Otherwise, this field is disabled. |
Total Acquisitions | The number of times that the lock was acquired in the analysis interval. This includes successful simple_lock_try calls. |
Miss Rate | The percentage of attempts that failed to acquire the lock. |
Spin Count | The number of unsuccessful attempts to acquire the lock. |
Wait Count | The number of times that a thread was forced into a suspended wait state, waiting for the lock to come available. |
Busy Count | The number of simple_lock_try calls that returned busy. |
Seconds Held | This field contains the
following sub-fields:
|
Percent Held | This field contains the
following sub-fields:
|
SpinQ | The minimum, maximum, and average number of threads spinning on the lock, whether executing or suspended, across the analysis interval. |
WaitQ | The minimum, maximum, and average number of threads waiting on the lock, across the analysis interval. |
Item | Descriptor |
---|---|
(no lock reference) | The thread is running, does not hold this lock, and is not attempting to acquire this lock. |
LOCK | The thread has successfully acquired the lock and is currently executing. |
SPIN | The thread is executing and unsuccessfully attempting to acquire the lock. |
UNDISP | The thread has become undispatched while unsuccessfully attempting to acquire the lock. |
WAIT | The thread has been suspended until the lock comes available. It does not necessarily acquire the lock at that time, but instead returns to a SPIN state. |
PREEMPT | The thread is holding this lock and has become undispatched. |
A thread can acquire a lock prior to the beginning of the analysis interval and release the lock during the analysis interval. When the splat command observes the lock being released, it recognizes that the lock had been held during the analysis interval up to that point and counts the time as part of the state-machine statistics. For this reason, the state-machine statistics can report that the number of times that the lock state was entered might actually be larger than the number of acquisitions of the lock that were observed in the analysis interval.
RunQ locks are used to protect resources in the thread management logic. These locks are acquired a large number of times and are only held briefly each time. A thread need not be executing to acquire or release a RunQ lock. Further, a thread might spin on a RunQ lock, but it will not go into an UNDISP or WAIT state on the lock. You will see a dramatic difference between the statistics for RunQ versus other simple locks.