Suspend lock instrumentation data

For the following system suspend locks: the system maintains lock instrumentation data to help debug scalability issues related to lock contention. Although the CMSSMF, CMSEQDQ, and CMSLATCH locks are not programming interfaces, the system collects lock instrumentation data on those locks to aid debugging performance problem related to those locks.
Lock instrumentation data is defined in mapping macro IHALOCKI. Lock instrumentation data is kept by the lock owner and the home address space of the lock requestor when it is different than the lock owner. All suspend locks noted above have a Common Lock Instrumentation Block (LockInst_Comm) and could point to a Unique Lock Instrumentation Block (LockInst_Uniq). Generally, the following set of lock instrumentation data is kept for each lock:

CMS locks are owned by the system so the lock instrumentation data is kept at the system level. The system Common Lock Instrumentation Block for each CMS lock is pointed to by the ECVT (mapped by IHAECVT) which represents the total CMS lock contention seen on the system. CMS Lock instrumentation data is also kept in the home address space of the work unit that requested the CMS lock. Each address space has a Common Lock Instrumentation Block pointed to by the ASSB (mapped by IHAASSB) for each CMS lock. These blocks represents the contention encountered on CMS locks for units of work from a given address space.

Address space local (and CML) lock instrumentation data is associated with an address space. The Common Lock Instrumentation block for the local lock is pointed to by the ASSB (mapped by IHAASSB). The common block contains lock instrumentation data for suspends on the local lock by units of work in that address space.

Each address space's local lock can be requested from another address space as a CML lock. CML lock instrumentation is kept in a Unique Lock Instrumentation Block called LockInst_Uniq_CML. When a CML lock is requested, two address spaces are involved, so each LockInst_Uniq_CML contains two sets of lock instrumentation data; one for the owner and one for the requestor. For CML lock contention, lock instrumentation data will be updated in the LockInst_Uniq_CML block that owns the CML lock and in the LockInst_Uniq_CML block of the home address space that requested the CML lock.