[DTrace-devel] [PATCH] test: Have USDT "deferred" tests wait for dtrace to start

Eugene Loh eugene.loh at oracle.com
Mon Jan 6 21:36:09 UTC 2025


On 1/6/25 16:14, Kris Van Hees wrote:

> On Tue, Dec 10, 2024 at 06:02:02PM -0500, eugene.loh at oracle.com wrote:
>> From: Eugene Loh <eugene.loh at oracle.com>
>>
>> Systemwide USDT tracing includes having dtrace track USDT processes
>> that start after it does.  Associated tests start dtrace first, wait
>> a few seconds, and then start processes to be traced.
>>
>> Waiting "a few seconds" can be insufficient, especially on slower
>> systems or as more work is being performed during dtrace startup.
>>
>> Change tests to wait for dtrace to start by polling on the output file.
>>
>> Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
> Reviewed-by: Kris Van Hees <kris.van.hees at oracle.com>
>
> ... though hopefully in the very near future we will not need this anymore,
> so we should revisit this once we have better (more timely) detection of USDT
> probes.  Otherwise these tests might result in hiding issues with the timely
> detection of the probes.

Yes, but such stricter tests already exist.  It's just that they xfail 
for now, given our current level of support.

> But for now, this is needed to ensure we have proper functional testing.
>
>> ---
>>   test/unittest/usdt/err.Z_no-w.sh      | 17 ++++++++++++++---
>>   test/unittest/usdt/tst.defer-Z.sh     | 17 ++++++++++++++---
>>   test/unittest/usdt/tst.defer.sh       | 17 ++++++++++++++---
>>   test/unittest/usdt/tst.nusdtprobes.sh | 16 +++++++++++++---
>>   4 files changed, 55 insertions(+), 12 deletions(-)
>>
>> diff --git a/test/unittest/usdt/err.Z_no-w.sh b/test/unittest/usdt/err.Z_no-w.sh
>> index 3833b4400..4f129341d 100755
>> --- a/test/unittest/usdt/err.Z_no-w.sh
>> +++ b/test/unittest/usdt/err.Z_no-w.sh
>> @@ -34,9 +34,20 @@ testprov*:::foo
>>   	raise(SIGUSR1);
>>   }' &
>>   dtpid=$!
>> -sleep 4
>> -if [[ ! -d /proc/$dtpid ]]; then
>> -	echo ERROR dtrace died prematurely
>> +
>> +# Wait up to half of the timeout period for dtrace to start up.
>> +
>> +iter=$((timeout / 2))
>> +while [ $iter -gt 0 ]; do
>> +	sleep 1
>> +	if [ -e dtrace.out ]; then
>> +		break
>> +	fi
>> +	iter=$((iter - 1))
>> +done
>> +if [[ $iter -eq 0 ]]; then
>> +	echo ERROR starting DTrace job
>> +	cat dtrace.out
>>   	exit 1
>>   fi
>>   
>> diff --git a/test/unittest/usdt/tst.defer-Z.sh b/test/unittest/usdt/tst.defer-Z.sh
>> index 52e92eb6b..ff2c5cbf1 100755
>> --- a/test/unittest/usdt/tst.defer-Z.sh
>> +++ b/test/unittest/usdt/tst.defer-Z.sh
>> @@ -45,9 +45,20 @@ testprov*4:::bar
>>   	@[pid, 3] = sum(pid % 100);
>>   }' &
>>   dtpid=$!
>> -sleep 2
>> -if [[ ! -d /proc/$dtpid ]]; then
>> -	echo ERROR dtrace died
>> +
>> +# Wait up to half of the timeout period for dtrace to start up.
>> +
>> +iter=$((timeout / 2))
>> +while [ $iter -gt 0 ]; do
>> +	sleep 1
>> +	if [ -e dtrace.out ]; then
>> +		break
>> +	fi
>> +	iter=$((iter - 1))
>> +done
>> +if [[ $iter -eq 0 ]]; then
>> +	echo ERROR starting DTrace job
>> +	cat dtrace.out
>>   	exit 1
>>   fi
>>   
>> diff --git a/test/unittest/usdt/tst.defer.sh b/test/unittest/usdt/tst.defer.sh
>> index 02ed1a767..073af12d5 100755
>> --- a/test/unittest/usdt/tst.defer.sh
>> +++ b/test/unittest/usdt/tst.defer.sh
>> @@ -51,9 +51,20 @@ testprov*'$lastdigit':::bar
>>   	@[pid, 3] = sum(pid % 100);
>>   }' &
>>   dtpid=$!
>> -sleep 2
>> -if [[ ! -d /proc/$dtpid ]]; then
>> -	echo ERROR dtrace died
>> +
>> +# Wait up to half of the timeout period for dtrace to start up.
>> +
>> +iter=$((timeout / 2))
>> +while [ $iter -gt 0 ]; do
>> +	sleep 1
>> +	if [ -e dtrace.out ]; then
>> +		break
>> +	fi
>> +	iter=$((iter - 1))
>> +done
>> +if [[ $iter -eq 0 ]]; then
>> +	echo ERROR starting DTrace job
>> +	cat dtrace.out
>>   	kill -USR1 ${pids[0]}
>>   	wait       ${pids[0]}
>>   	exit 1
>> diff --git a/test/unittest/usdt/tst.nusdtprobes.sh b/test/unittest/usdt/tst.nusdtprobes.sh
>> index d2d80fe8d..f275f921f 100755
>> --- a/test/unittest/usdt/tst.nusdtprobes.sh
>> +++ b/test/unittest/usdt/tst.nusdtprobes.sh
>> @@ -105,9 +105,19 @@ for nusdt in "" "-xnusdtprobes=40" "-xnusdtprobes=39"; do
>>   		@[probeprov, probemod, probefunc, probename] = count();
>>   	}' &
>>   	dtpid=$!
>> -	sleep 2
>> -	if [[ ! -d /proc/$dtpid ]]; then
>> -		echo ERROR dtrace died
>> +
>> +	# Wait a little for dtrace to start up.
>> +
>> +	iter=$((timeout / 4))
>> +	while [ $iter -gt 0 ]; do
>> +		sleep 1
>> +		if [ -e dtrace.out ]; then
>> +			break
>> +		fi
>> +		iter=$((iter - 1))
>> +	done
>> +	if [[ $iter -eq 0 ]]; then
>> +		echo ERROR starting DTrace job
>>   		cat dtrace.out
>>   		exit 1
>>   	fi
>> -- 
>> 2.43.5
>>



More information about the DTrace-devel mailing list