[DTrace-devel] [PATCH 17/61] test: Fix race condition in many-fire tests
Kris Van Hees
kris.van.hees at oracle.com
Thu Jul 28 14:20:57 UTC 2022
Reviewed-by: Kris Van Hees <kris.van.hees at oracle.com>
... queued for dev
On Fri, Jul 08, 2022 at 10:45:01AM -0400, eugene.loh--- via DTrace-devel wrote:
> From: Eugene Loh <eugene.loh at oracle.com>
>
> Some tests that expect probes to fire many times had been using tick-*
> for this purpose. Unfortunately, tick-* quality can be poor, depending
> on how the kernel is configured. Therefore, commit 80a539ae8653
> ("test: Account for unreliable tick firing") addressed this problem
> by replacing tick-* probes with syscall::ioctl:entry probes and with
> bogus-ioctl as a trigger.
>
> The problem with this solution is that the actions also involved some
> global variables. The ioctl:entry probes could fire on multiple CPUs
> concurrently, overwriting each other. Test runs were erratic.
>
> Add "pid==$target" to the probe predicates. This includes both the
> the tests in the aforementioned patch but also two rand() tests.
>
> Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
> ---
> test/unittest/aggs/tst.llquantincr.d | 3 ++-
> test/unittest/aggs/tst.llquantize.d | 3 ++-
> test/unittest/aggs/tst.llquantneg.d | 6 +++---
> test/unittest/aggs/tst.llquantstep.d | 3 ++-
> test/unittest/funcs/tst.rand_inter.sh | 3 ++-
> test/unittest/funcs/tst.rand_intra.sh | 3 ++-
> test/unittest/speculation/tst.SingleCPU.d | 12 ++++++------
> 7 files changed, 19 insertions(+), 14 deletions(-)
>
> diff --git a/test/unittest/aggs/tst.llquantincr.d b/test/unittest/aggs/tst.llquantincr.d
> index 27755050..5b02d1d3 100644
> --- a/test/unittest/aggs/tst.llquantincr.d
> +++ b/test/unittest/aggs/tst.llquantincr.d
> @@ -15,12 +15,13 @@
> #pragma D option quiet
>
> syscall::ioctl:entry
> +/pid == $target/
> {
> @ = llquantize(i++, 10, 0, 6, 20, 2);
> }
>
> syscall::ioctl:entry
> -/i == 1500/
> +/pid == $target && i == 1500/
> {
> exit(0);
> }
> diff --git a/test/unittest/aggs/tst.llquantize.d b/test/unittest/aggs/tst.llquantize.d
> index 3161ac97..352f937d 100644
> --- a/test/unittest/aggs/tst.llquantize.d
> +++ b/test/unittest/aggs/tst.llquantize.d
> @@ -15,12 +15,13 @@
> #pragma D option quiet
>
> syscall::ioctl:entry
> +/pid == $target/
> {
> @ = llquantize(i++, 10, 0, 6, 20);
> }
>
> syscall::ioctl:entry
> -/i == 1500/
> +/pid == $target && i == 1500/
> {
> exit(0);
> }
> diff --git a/test/unittest/aggs/tst.llquantneg.d b/test/unittest/aggs/tst.llquantneg.d
> index 61d6686c..5070ad63 100644
> --- a/test/unittest/aggs/tst.llquantneg.d
> +++ b/test/unittest/aggs/tst.llquantneg.d
> @@ -15,19 +15,19 @@
> #pragma D option quiet
>
> syscall::ioctl:entry
> -/i % 2 == 0/
> +/pid == $target && i % 2 == 0/
> {
> @ = llquantize(i++, 10, 0, 6, 20);
> }
>
> syscall::ioctl:entry
> -/i % 2 != 0/
> +/pid == $target && i % 2 != 0/
> {
> @ = llquantize(i++, 10, 0, 6, 20, -1);
> }
>
> syscall::ioctl:entry
> -/i == 1500/
> +/pid == $target && i == 1500/
> {
> exit(0);
> }
> diff --git a/test/unittest/aggs/tst.llquantstep.d b/test/unittest/aggs/tst.llquantstep.d
> index 1420ebe4..0b8594d3 100644
> --- a/test/unittest/aggs/tst.llquantstep.d
> +++ b/test/unittest/aggs/tst.llquantstep.d
> @@ -16,12 +16,13 @@
> #pragma D option quiet
>
> syscall::ioctl:entry
> +/pid == $target/
> {
> @ = llquantize(i++, 3, 3, 5, 27);
> }
>
> syscall::ioctl:entry
> -/i == 1500/
> +/pid == $target && i == 1500/
> {
> exit(0);
> }
> diff --git a/test/unittest/funcs/tst.rand_inter.sh b/test/unittest/funcs/tst.rand_inter.sh
> index 973d4a8e..4a66e488 100755
> --- a/test/unittest/funcs/tst.rand_inter.sh
> +++ b/test/unittest/funcs/tst.rand_inter.sh
> @@ -21,6 +21,7 @@ BEGIN
> x = rand();
> }
> syscall::ioctl:entry
> +/pid == $target/
> {
> y = rand();
>
> @@ -50,7 +51,7 @@ syscall::ioctl:entry
> n++;
> }
> syscall::ioctl:entry
> -/n >= '$niter'/
> +/pid == $target && n >= '$niter'/
> {
> printf("number of iterations: %d\n", n);
> exit(0);
> diff --git a/test/unittest/funcs/tst.rand_intra.sh b/test/unittest/funcs/tst.rand_intra.sh
> index 70a318f9..0d263fd5 100755
> --- a/test/unittest/funcs/tst.rand_intra.sh
> +++ b/test/unittest/funcs/tst.rand_intra.sh
> @@ -16,6 +16,7 @@ niter=25000
> $dtrace $dt_flags -q -o $tmpfile -c test/triggers/bogus-ioctl -n '
> BEGIN { nuperr = n = 0 }
> syscall::ioctl:entry
> +/pid == $target/
> {
> x = rand();
>
> @@ -32,7 +33,7 @@ syscall::ioctl:entry
> n++;
> }
> syscall::ioctl:entry
> -/n >= '$niter'/
> +/pid == $target && n >= '$niter'/
> {
> printf("# of upper-bit errors: %d out of %d\n", nuperr, n);
> exit(0);
> diff --git a/test/unittest/speculation/tst.SingleCPU.d b/test/unittest/speculation/tst.SingleCPU.d
> index 0a96b47d..81a5afa1 100644
> --- a/test/unittest/speculation/tst.SingleCPU.d
> +++ b/test/unittest/speculation/tst.SingleCPU.d
> @@ -28,39 +28,39 @@ BEGIN
> */
>
> syscall::ioctl:entry
> -/ (n & 3) == 0 /
> +/ pid == $target && (n & 3) == 0 /
> {
> i = speculation();
> }
>
> syscall::ioctl:entry
> -/ (n & 3) == 1 /
> +/ pid == $target && (n & 3) == 1 /
> {
> speculate(i);
> printf("%4d %4d", n, i);
> }
>
> syscall::ioctl:entry
> -/ (n & 3) == 2 /
> +/ pid == $target && (n & 3) == 2 /
> {
> speculate(i);
> printf("%4d hello world\n", n);
> }
>
> syscall::ioctl:entry
> -/ (n & 3) == 3 && (n & 63) == 3 /
> +/ pid == $target && (n & 3) == 3 && (n & 63) == 3 /
> {
> commit(i);
> }
>
> syscall::ioctl:entry
> -/ (n & 3) == 3 && (n & 63) != 3 /
> +/ pid == $target && (n & 3) == 3 && (n & 63) != 3 /
> {
> discard(i);
> }
>
> syscall::ioctl:entry
> -/ n++ >= 1000 /
> +/ pid == $target && n++ >= 1000 /
> {
> exit(0);
> }
> --
> 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