Solaris 动态跟踪指南

自适应锁定探测器

自适应锁定强制临界段互斥,在内核的大多数上下文中都可以获取该锁定。因为自适应锁定的上下文限制极少,所以它们组成了 Solaris 内核中绝大多数的同步元语。这些锁定的与争用相关的行为是自适应的:当线程尝试获取暂挂的自适应锁定时,它将确定拥有的线程当前是否正在 CPU 中运行。如果属主正在另一个 CPU 中运行,则获取线程将旋转。如果属主未运行,则获取线程将阻塞

表 18–1 中介绍了与自适应锁定有关的四种 lockstat 探测器。对于每种探测器,arg0 都包含指向代表自适应锁定的 kmutex_t 结构的探测器。

表 18–1 自适应锁定探测器

adaptive-acquire

获取自适应锁定后立即触发的暂挂事件探测器。 

adaptive-block

在暂挂的自适应锁定上阻塞的线程重新唤醒并获取互斥之后,将触发的争用事件探测器。如果两种探测器都已启用,则 adaptive-block 将在 adaptive-acquire 之前触发。单个锁定获取可以触发 adaptive-blockadaptive-spin 探测器。adaptive-blockarg1 包含休眠时间(以纳秒为单位)。

adaptive-spin

在暂挂的自适应互斥上旋转的线程成功获取互斥后将触发的争用事件探测器。如果两种探测器都已启用,则 adaptive-spin 将在 adaptive-acquire 之前触发。单个锁定获取可以触发 adaptive-blockadaptive-spin 探测器。adaptive-spinarg1 包含旋转时间:获取锁定之前,旋转循环花费的时间(以纳秒为单位)。

adaptive-release

释放自适应锁定之后将立即触发的暂挂事件探测器。