Disabled simple and RunQ lock details

In an AIX® SIMPLE Lock report, the first line starts with either [AIX SIMPLE Lock] or [AIX RunQ lock].

If the gennames or gensyms output file permits, the ADDRESS is also converted into a lock NAME and CLASS, and the containing kernel extension (KEX) is identified as well. The CLASS is printed with an eight hex-digit extension indicating how many locks of this class were allocated prior to it.

[AIX SIMPLE Lock]                 ADDRESS: 0000000020000D60          KEX: unknown
======================================================================================
         |              Trans-         |                  | Percent Held ( 35.568534s )
Type:    |  Miss  Spin   form   Busy   |    Secs Held     |  Real  Real    Comb   Real
Disabled |  Rate  Count  Count  Count  |CPU      Elapsed  |  CPU  Elapsed  Spin   Wait
         |100.000 1      2658      0   |0.000000 0.000000 |  0.00   0.00   0.00  29.62
--------------------------------------------------------------------------------------
Total Acquisitions:   12945 |SpinQ   Min   Max   Avg  | Krlocks SpinQ Min   Max   Avg
Acq. holding krlock:   2498 |Depth   0     1     0    | Depth         0     1     0    
--------------------------------------------------------------------------------------
PROD    |                         CONFER                        | HANDOFF
0       | SELF:     0     TARGET:     0              ALL:     0 | 0
        |          w/ preemption:     0    w/ preemption:     0 |
--------------------------------------------------------------------------------------


                     Lock Activity (mSecs) - Interrupts Disabled

  SIMPLE      Count         Minimum        Maximum        Average          Total
  +++++++     ++++++  ++++++++++++++ ++++++++++++++ ++++++++++++++ ++++++++++++++
  LOCK             0        0.000000       0.000000       0.000000       0.000000
   w/ KRLOCK       0        0.000000       0.000000       0.000000       0.000000
  SPIN             0        0.000000       0.000000       0.000000       0.000000
  KRLOCK LOCK      0        0.000000       0.000000       0.000000       0.000000
  KRLOCK SPIN      0        0.000000       0.000000       0.000000       0.000000
  TRANSFORM        0        0.000000       0.000000       0.000000       0.000000


                Acqui-  Miss  Spin  Transf. Busy    Percent Held of Total Time 
Function Name  sitions  Rate  Count  Count  Count    CPU   Elapse  Spin  Transf. 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  Transf. Busy    Percent Held of Total Time             Process 
 ThreadID  sitions   Rate   Count  Count  Count    CPU   Elapse  Spin Transf. 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.
Miss Rate The percentage of attempts that failed to acquire the lock.
Spin Count The number of unsuccessful attempts to acquire the lock.
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.
Total Acquisitions The number of times that the lock was acquired in the analysis interval. This includes successful simple_lock_try calls.
Acq. holding krlock The number of acquisitions made by threads holding a Krlock.
Transform count The number of Krlocks that have been used (allocated and freed) by the simple lock.
SpinQ The minimum, maximum, and average number of threads spinning on the lock, whether executing or suspended, across the analysis interval.
Krlocks SpinQ The minimum, maximum, and average number of threads spinning on a Krlock allocated by the simple lock, across the analysis interval.
PROD The associated Krlocks prod calls count.
CONFER SELF The confer to self calls count for the simple lock and the associated Krlocks.
CONFER TARGET The confer to target calls count for the simple lock and the associated Krlocks
CONFER ALL The confer to all calls count for the simple lock and the associated Krlocks.
HANDOFF The associated Krlocks handoff calls count.
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.
LOCK with KRLOCK The thread has successfully acquired the lock, while holding the associated Krlock, and is currently executing.
SPIN The thread is executing and unsuccessfully attempting to acquire the lock.
KRLOCK LOCK The thread has successfully acquired the associated Krlock and is currently executing.
KRLOCK SPIN The thread is executing and unsuccessfully attempting to acquire the associated Krlock.
TRANSFORM The thread has successfully allocated a Krlock that it associates itself to and is executing.

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 distinguish whether interrupts were enabled or disabled at the time that the thread was in the given state.

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 might 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.