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 ...)
The SIMPLE lock report fields are as follows:
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:
CPU
The total number of processor seconds that the lock was held by an executing thread.
Elapsed
The total number of elapsed seconds that the lock was held by any thread, whether running or suspended.
Percent Held This field contains the following sub-fields:
Real CPU
The percentage of the cumulative processor time that the lock was held by an executing thread.
Real Elapsed
The percentage of the elapsed real time that the lock was held by any thread at all, either running or suspended.
Comb(ined) Spin
The percentage of the cumulative processor time that running threads spent spinning while trying to acquire this lock.
Real Wait
The percentage of elapsed real time that any thread was waiting to acquire this lock. If two or more threads are waiting simultaneously, this wait time will only be charged once. To determine how many threads were waiting simultaneously, look at the WaitQ Depth statistics.
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.
The Lock Activity with Interrupts Enabled (milliseconds) and Lock Activity with Interrupts Disabled (milliseconds) sections contain information on the time that each lock state is used by the locks.
The states that a thread can be in (with respect to a given simple or complex lock) are as follows:
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.