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_t をポイントしています。args[1] は、このスレッドが含まれているプロセスの psinfo_t をポイントしています。args[2] は、このスレッドがキューから外される CPU の cpuinfo_t をポイントしています。スレッドが外される実行キューが特定の CPU に関連付けられていない場合、この構造体の cpu_id メンバーの値は -1 になります。

enqueue

実行可能スレッドが実行キューに入れられる直前に起動するプローブ。args[0] は、キューに入れられるスレッドの lwpsinfo_t をポイントしています。args[1] は、このスレッドが含まれているプロセスの psinfo_t をポイントしています。args[2] は、このスレッドがキューに入れられる CPU の cpuinfo_t をポイントしています。スレッドが入れられる実行キューが特定の CPU に関連付けられていない場合、この構造体の cpu_id メンバーの値は -1 になります。args[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 プローブは起動しますが、ディスパッチャは、実行の優先順位の高いスレッドを見つけることができません。このため、off-cpu プローブではなく remain-cpu プローブが起動します。

remain-cpu

スケジューリングに関する決定がなされたにもかかわらず、現在のスレッドの実行の続行がディスパッチャによって選択されたときに、起動するプローブ。curcpu 変数は、現在の CPU を表します。curlwpsinfo 変数は、実行を開始するスレッドを表します。curpsinfo 変数は、現在のスレッドが含まれているプロセスの説明です。

schedctl-nopreempt

横取り制御要求により、スレッドが横取りされたあと、実行キューの先頭に入れ直されたときに起動するプローブ。横取り制御の詳細については、schedctl_init(3C) を参照してください。preempt の場合と同じく、schedctl-nopreempt に続いて off-cpuremain-cpu が起動します。schedctl-nopreempt は、現在のスレッドを実行キューの先頭に入れ直す指示です。このため、off-cpu よりも remain-cpu のほうが、schedctl-nopreempt に続いて起動する確率が高いと言えます。args[0] は、横取りされるスレッドの lwpsinfo_t をポイントしています。args[1] は、このスレッドが含まれているプロセスの psinfo_t をポイントしています。

schedctl-preempt

スレッドが横取り制御を使用しているにもかかわらず横取りされ、実行キューの末尾に入れ直されたときに、起動するプローブ。横取り制御の詳細については、schedctl_init(3C) を参照してください。preempt の場合と同じく、schedctl-preempt に続いて off-cpuremain-cpu が起動します。preempt の場合と同じく、(そして schedctl-nopreempt の場合とは違って)、schedctl-preempt は、現在のスレッドを実行キューの末尾に入れ直す指示です。その結果、remain-cpu よりも off-cpu のほうが、schedctl-preempt に続いて起動する確率が高いといえます。args[0] は、横取りされるスレッドの lwpsinfo_t をポイントしています。args[1] は、このスレッドが含まれているプロセスの psinfo_t をポイントしています。

schedctl-yield

横取り制御を有効にし、タイムスライスを人工的に延長したスレッドが、CPU をほかのスレッドに譲るコードを実行したときに、起動するプローブ。 

sleep

現在のスレッドが同期オブジェクトでスリープする直前に起動するプローブ。同期オブジェクトの型は、curlwpsinfo がポイントしている lwpsinfo_tpr_stype メンバーに格納されます。同期オブジェクトのアドレスは、curlwpsinfo がポイントしている lwpsinfo_tpr_wchan メンバーに格納されます。このアドレスの意味は、非公開の実装詳細情報ですが、アドレス値は、同期オブジェクトに固有のトークンとして機能します。

surrender

CPU が、別の CPU から、スケジューリングに関する決定を下すように指示を受けたときに起動するプローブ。こうした指示は、一般に、より優先順位の高いスレッドが実行可能状態になったときに発行されます。 

tick

クロック刻みベースのアカウンティングの一環として起動するプローブ。クロック刻みベースのアカウンティングでは、固定間隔の割り込みが発生したとき、どのスレッドとどのプロセスが実行されていたかを調べることによって、CPU のアカウンティングが行われます。args[0] は、CPU 時間の割り当てを受けるスレッドの lwpsinfo_t をポイントしています。args[1] は、このスレッドが含まれているプロセスの psinfo_t をポイントしています。

wakeup

現在のスレッドが同期オブジェクトでスリープしているスレッドを呼び起こす直前に起動するプローブ。args[0] は、スリープ中のスレッドの lwpsinfo_t をポイントしています。args[1] は、スリープ中のスレッドが含まれているプロセスの psinfo_t をポイントしています。同期オブジェクトの型は、スリープ中のスレッドの lwpsinfo_tpr_stype メンバーに格納されます。同期オブジェクトのアドレスは、スリープ中のスレッドの lwpsinfo_tpr_wchan メンバーに格納されます。このアドレスの意味は、非公開の実装詳細情報ですが、アドレス値は、同期オブジェクトに固有のトークンとして機能します。