次の例は、最初のプローブと2番目のプローブ(query-userentry
からquery-maxcheckval
)間の経過時間を測定する単純なスクリプトを作成する方法を示しています。
/* simpleTimeProbe.d */ /* Show how much time elapses between two probes */ primeget*:::query-userentry { self->t = timestamp; /* Initialize a thread-local variable with the time */ } primeget*:::query-maxcheckval /self->t != 0/ { timeNow = timestamp; /* Divide by 1000 for microseconds */ printf("%s (pid=%d) spent %d microseconds between userentry & maxcheckval\n", execname, pid, ((timeNow - self->t)/1000)); self->t = 0; /* Reset the variable */ }
ターゲット・アプリケーションの実行を開始します:
# ./prime
Enter a positive target integer to test for prime status:
次に、別のウィンドウからDTraceスクリプトを実行します:
# dtrace -q -s simpleTimeProbe.d
アプリケーションの実行中、スクリプトの出力も並行して実行されます:
#./prime
Enter a positive target integer to test for prime status: 7921 Square root of 7921 is 89.000000 89 highest value to check as divisor 7921 is not prime because there is a factor 89 #./prime
Enter a positive target integer to test for prime status: 995099 Square root of 995099 is 997.546509 997 highest value to check as divisor 995099 is not prime because there is a factor 7 #./prime
Enter a positive target integer to test for prime status: 7921 Square root of 7921 is 89.000000 89 highest value to check as divisor 7921 is not prime because there is a factor 89
スクリプトを実行するコマンドラインに、次のような出力が表示されます:
#dtrace -q -s simpleTimeProbe.d
prime (pid=2328) spent 45 microseconds between userentry & maxcheckval prime (pid=2330) spent 41 microseconds between userentry & maxcheckval prime (pid=2331) spent 89 microseconds between userentry & maxcheckval^C