Solaris 动态跟踪指南

探测器

表 26–1 中对 sched 探测器进行了说明。

表 26–1 sched 探测器

探测器 

说明 

change-pri

要更改线程的优先级时将触发的探测器。args[0] 指向线程的 lwpsinfo_t。线程的当前优先级在此结构的 pr_pri 字段中。args[1] 指向包含该线程进程的 psinfo_t。线程的新优先级包含在 args[2] 中。

dequeue

探测器就在可运行线程离开运行队列之前的瞬间触发。args[0] 指向要离开队列线程的 lwpsinfo_targs[1] 指向包含该线程进程的 psinfo_targs[2] 指向线程将离开队列 CPU 的 cpuinfo_t。如果线程要从与特定 CPU 无关的队列中离开,则此结构的 cpu_id 成员将为 -1

enqueue

探测器就在可运行线程进入运行队列之前的瞬间触发。args[0] 指向要进入队列线程的 lwpsinfo_targs[1] 指向包含该线程进程的 psinfo_targs[2] 指向线程要进入的队列所在 CPU 的 cpuinfo_t。如果线程要进入与特定 CPU 无关的运行队列中,则此结构的 cpu_id 成员将为 -1args[3] 中的值是一个布尔值,指示线程是否排在运行队列的前面。如果线程排在运行队列的前面,则此值为非零,如果线程排在运行队列的后面,则此值为零。

off-cpu

当前 CPU 结束执行线程时将触发的探测器。curcpu 变量指示当前 CPU。curlwpsinfo 变量指示要结束执行的线程。curpsinfo 变量说明包含当前线程的进程。args[0] 指向当前 CPU 接下来要执行线程的 lwpsinfo_t 结构。args[1] 指向包含下一个线程进程的 psinfo_t

on-cpu

CPU 开始执行线程时将触发的探测器。curcpu 变量指示当前 CPU。curlwpsinfo 变量指示要开始执行的线程。curpsinfo 变量说明包含当前线程的进程。

preempt

探测器就在当前线程被抢占之前的瞬间触发。触发此探测器后,当前线程将选择要运行的线程,并且将为当前线程触发 off-cpu 探测器。在某些情况下,一个 CPU 中的线程将被抢占,但与此同时抢占线程将在另一个 CPU 中运行。在此情况下,将触发 preempt 探测器,但分发程序将找不到要运行的更高优先级线程,因此将触发 remain-cpu 探测器而不是 off-cpu 探测器。

remain-cpu

已做出调度决策,但分发程序选择继续运行当前线程时,将触发的探测器。curcpu 变量指示当前 CPU。curlwpsinfo 变量指示要开始执行的线程。curpsinfo 变量说明包含当前线程的进程。

schedctl-nopreempt

当线程被抢占,然后重新排在运行队列的前面(由于抢占控制请求)时,将触发的探测器。有关抢占控制的详细信息,请参见 schedctl_init(3C)。与 preempt 一样,off-cpuremain-cpu 将在 schedctl-nopreempt 之后触发。因为 schedctl-nopreempt 表示将当前线程排在运行队列的前面,所以 remain-cpu 更有可能在 schedctl-nopreempt(而不是 off-cpu)之后触发。args[0] 指向要被抢占线程的 lwpsinfo_targs[1] 指向包含该线程进程的 psinfo_t

schedctl-preempt

使用抢占控制的线程仍然被抢占,并重新排在运行队列的后面时,将触发的探测器。有关抢占控制的详细信息,请参见 schedctl_init(3C)。与 preempt 一样,off-cpuremain-cpu 将在 schedctl-preempt 之后触发。与 preempt 一样(与 schedctl-nopreempt 不同),schedctl-preempt 表示将当前线程重排在运行队列的后面。因此,off-cpu 更有可能在 schedctl-preempt(而不是 remain-cpu)之后触发。args[0] 指向要被抢占线程的 lwpsinfo_targs[1] 指向包含该线程进程的 psinfo_t

schedctl-yield

启用了抢占控制并且以人工方式扩展其时间片的线程,执行代码以将 CPU 提供给其他线程时,将触发的探测器。 

sleep

探测器就在当前线程在同步对象上休眠之前的瞬间触发。同步对象的类型包含在 curlwpsinfo 指向的 lwpsinfo_tpr_stype 成员中。同步对象的地址包含在 curlwpsinfo 指向的 lwpsinfo_tpr_wchan 成员中。此地址表示专用实现详细信息,但地址值可能被视为同步对象的唯一标记。

surrender

一个 CPU 指示另一个 CPU 做出调度决策(通常是因为更高优先级线程变得可运行)时将触发的探测器。 

tick

作为基于时钟周期记帐的一部分触发的探测器。在基于时钟周期的记帐中,CPU 记帐是通过检查在触发固定时间间隔中断时,哪些线程和进程正在运行来执行的。args[0] 指向对应于要对其分配 CPU 时间线程的 lwpsinfo_targs[1] 指向对应于包含该线程进程的 psinfo_t

wakeup

探测器就在当前线程唤醒同步对象的休眠线程之前的瞬间触发。args[0] 指向休眠线程的 lwpsinfo_targs[1] 指向包含该休眠线程进程的 psinfo_t。同步对象的类型包含在休眠线程的 lwpsinfo_tpr_stype 成员中。同步对象的地址包含在休眠线程的 lwpsinfo_tpr_wchan 成员中。此地址表示专用实现详细信息,但地址值可能被视为同步对象的唯一标记。