[DTrace-devel] [PATCH] Change trigger for rand() test

Kris Van Hees kris.van.hees at oracle.com
Wed Dec 1 20:40:02 UTC 2021


On Mon, Nov 22, 2021 at 09:32:38PM -0500, eugene.loh--- via DTrace-devel wrote:
> From: Eugene Loh <eugene.loh at oracle.com>
> 
> The tick-* probe is unreliable on some kernels, depending on how
> their timers subsystem is configured (CONFIG*_HZ*).  Add a trigger
> that generates many ioctl() calls and use a syscall::ioctl:entry
> probe instead.
> 
> Signed-off-by: Eugene Loh <eugene.loh at oracle.com>

Reviewed-by: Kris Van Hees <kris.van.hees at oracle.com>

... adding it to 'dev'.

Nice solution!

> ---
>  test/unittest/funcs/tst.rand_inter.sh | 14 ++++++++------
>  test/unittest/funcs/tst.rand_intra.sh | 14 ++++++++------
>  2 files changed, 16 insertions(+), 12 deletions(-)
> 
> diff --git a/test/unittest/funcs/tst.rand_inter.sh b/test/unittest/funcs/tst.rand_inter.sh
> index ac3f318a..973d4a8e 100755
> --- a/test/unittest/funcs/tst.rand_inter.sh
> +++ b/test/unittest/funcs/tst.rand_inter.sh
> @@ -8,17 +8,19 @@
>  dtrace=$1
>  tmpfile=$tmpdir/tst.rand_inter.$$
>  
> +niter=25000
> +
>  # Sanity test of rand().  Do inter-word correlation checks.  That
>  # is, use lquantize to look at the distribution of 4-bit blocks,
>  # 2 bits from two consecutive words at arbitrary locations.
>  
> -$dtrace $dt_flags -q -o $tmpfile -n '
> +$dtrace $dt_flags -q -o $tmpfile -c test/triggers/bogus-ioctl -n '
>  BEGIN
>  {
>  	n = 0;
>  	x = rand();
>  }
> -tick-200us
> +syscall::ioctl:entry
>  {
>  	y = rand();
>  
> @@ -47,7 +49,8 @@ tick-200us
>  	x = y;
>  	n++;
>  }
> -tick-5sec
> +syscall::ioctl:entry
> +/n >= '$niter'/
>  {
>  	printf("number of iterations: %d\n", n);
>  	exit(0);
> @@ -70,9 +73,8 @@ awk '
>      # process line: "number of iterations: ..."
>      /number of iterations:/ {
>          n = int($4);
> -        if (n < 400) {
> -            # tick-* can underfire, but require some minimum data
> -            print "ERROR: insufficient data";
> +        if (n != '$niter') {
> +            print "ERROR: unexpected amount of data";
>              exit 1;
>          }
>          avg = n / nbins;     # how many to expect per bin
> diff --git a/test/unittest/funcs/tst.rand_intra.sh b/test/unittest/funcs/tst.rand_intra.sh
> index 3fcf8c42..70a318f9 100755
> --- a/test/unittest/funcs/tst.rand_intra.sh
> +++ b/test/unittest/funcs/tst.rand_intra.sh
> @@ -8,12 +8,14 @@
>  dtrace=$1
>  tmpfile=$tmpdir/tst.rand_intra.$$
>  
> +niter=25000
> +
>  # Sanity test of rand().  Do intra-word correlation checks.  That
>  # is, use lquantize to look at the distribution of 4-bit blocks.
>  
> -$dtrace $dt_flags -q -o $tmpfile -n '
> +$dtrace $dt_flags -q -o $tmpfile -c test/triggers/bogus-ioctl -n '
>  BEGIN { nuperr = n = 0 }
> -tick-200us
> +syscall::ioctl:entry
>  {
>  	x = rand();
>  
> @@ -29,7 +31,8 @@ tick-200us
>  	nuperr += (x & 0xffffffff00000000) ? 1 : 0;
>  	n++;
>  }
> -tick-5sec
> +syscall::ioctl:entry
> +/n >= '$niter'/
>  {
>  	printf("# of upper-bit errors: %d out of %d\n", nuperr, n);
>  	exit(0);
> @@ -56,9 +59,8 @@ awk '
>              exit 1;
>          }
>          n = int($8);
> -        if (n < 400) {
> -            # tick-* can underfire, but require some minimum data
> -            print "ERROR: insufficient data";
> +        if (n != '$niter') {
> +            print "ERROR: unexpected amount of data";
>              exit 1;
>          }
>          avg = n / nbins;     # how many to expect per bin
> -- 
> 2.18.4
> 
> 
> _______________________________________________
> DTrace-devel mailing list
> DTrace-devel at oss.oracle.com
> https://oss.oracle.com/mailman/listinfo/dtrace-devel



More information about the DTrace-devel mailing list