Adaptive Lock Probes
Adaptive locks enforce mutual exclusion to a critical
section, and may be acquired in most contexts in the kernel. Because adaptive
locks have few context restrictions, they comprise the vast majority of synchronization
primitives in the Oracle Solaris kernel. These locks are adaptive in their
behavior with respect to contention: when a thread attempts to acquire a held
adaptive lock, it will determine if the owning thread is currently running
on a CPU. If the owner is running on another CPU, the acquiring thread will spin. If the owner is not running, the acquiring thread will block.
The four lockstat probes pertaining to adaptive locks are in Table 18–1.
For each probe, arg0 contains a pointer to the kmutex_t structure that represents the adaptive lock.
Table 11-1 Adaptive Lock Probes
adaptive-acquire
| Hold-event probe that fires immediately after an adaptive lock is acquired
|
adaptive-block
| Contention-event probe that fires after a thread that has blocked on
a held adaptive mutex has reawakened and has acquired the mutex. If both probes
are enabled, adaptive-block fires before adaptive-acquire. At most one of adaptive-block and adaptive-spin will fire for a single lock acquisition. arg1 for adaptive-block contains the sleep time in nanoseconds.
|
adaptive-spin
| Contention-event probe that fires after a thread that has spun on a
held adaptive mutex has successfully acquired the mutex. If both are enabled, adaptive-spin fires before adaptive-acquire.
At most one of adaptive-spin and adaptive-block will
fire for a single lock acquisition. arg1 for adaptive-spin
contains the spin time: the number of nanoseconds that
were spent in the spin loop before the lock was acquired.
|
adaptive-release
| Hold-event probe that fires immediately after an adaptive lock is released.
|
|