Re: [PATCH 15/22] test: Clean up the specsize tests

Kris Van Hees
2024-09-14T17:57:34Z

On Thu, Aug 29, 2024 at 01:22:12AM -0400, eugene.loh@oracle.com wrote:
> From: Eugene Loh <eugene.loh@oracle.com>
>
> The tests had actions like
> printf("%lld: Lots of data\n", x);
> printf("%lld: Has to be crammed into this buffer\n", x);
> printf("%lld: Until it overflows\n", x);
> printf("%lld: And causes flops\n", x);
> suggesting that these strings were crowding the buffer, but these
> strings are not passed from producer to consumer at all.
>
> The tests also only tested one clause per speculation. It would be
> nice also to test multiple clauses per speculation.
>
> There is much replicated code from one of the tests to the other, a
> shortcoming that is amplified if we want to test more specsize values,
> which is the case when we test multiple clauses per speculation.
>
> Therefore, replace the multiple tests with a single test that checks
> multiple clauses per speculation and more values of specsize.
>
> Signed-off-by: Eugene Loh <eugene.loh@oracle.com>

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

> ---
> .../speculation/tst.SpecSizeVariations.r | 68 +++++++++++++++++
> .../speculation/tst.SpecSizeVariations.sh | 74 +++++++++++++++++++
> .../speculation/tst.SpecSizeVariations4.d | 66 -----------------
> .../speculation/tst.SpecSizeVariations4.r | 5 --
> .../speculation/tst.SpecSizeVariations5.d | 61 ---------------
> .../speculation/tst.SpecSizeVariations5.r | 7 --
> 6 files changed, 142 insertions(+), 139 deletions(-)
> create mode 100644 test/unittest/speculation/tst.SpecSizeVariations.r
> create mode 100755 test/unittest/speculation/tst.SpecSizeVariations.sh
> delete mode 100644 test/unittest/speculation/tst.SpecSizeVariations4.d
> delete mode 100644 test/unittest/speculation/tst.SpecSizeVariations4.r
> delete mode 100644 test/unittest/speculation/tst.SpecSizeVariations5.d
> delete mode 100644 test/unittest/speculation/tst.SpecSizeVariations5.r
>
> diff --git a/test/unittest/speculation/tst.SpecSizeVariations.r b/test/unittest/speculation/tst.SpecSizeVariations.r
> new file mode 100644
> index 00000000..51f0596c
> --- /dev/null
> +++ b/test/unittest/speculation/tst.SpecSizeVariations.r
> @@ -0,0 +1,68 @@
> +Speculative buffer ID: 1
> +counts: 0 1
> +
> +Speculative buffer ID: 1
> +123456700
> +123456701
> +123456702
> +123456703
> +123456704
> +123456705
> +123456706
> +counts: 1 1
> +
> +Speculative buffer ID: 1
> +123456700
> +123456701
> +123456702
> +123456703
> +123456704
> +123456705
> +123456706
> +counts: 1 1
> +
> +Speculative buffer ID: 1
> +123456700
> +123456701
> +123456702
> +123456703
> +123456704
> +123456705
> +123456706
> +counts: 2 1
> +
> +Speculative buffer ID: 1
> +123456700
> +123456701
> +123456702
> +123456703
> +123456704
> +123456705
> +123456706
> +counts: 2 1
> +
> +Speculative buffer ID: 1
> +123456700
> +123456701
> +123456702
> +123456703
> +123456704
> +123456705
> +123456706
> +123456800
> +123456801
> +123456802
> +123456803
> +123456804
> +123456805
> +123456806
> +123456807
> +123456808
> +counts: 2 1
> +
> +-- @@stderr --
> +dtrace: 2 speculative drops
> +dtrace: 1 speculative drop
> +dtrace: 1 speculative drop
> +dtrace: 1 speculative drop
> +dtrace: 1 speculative drop
> diff --git a/test/unittest/speculation/tst.SpecSizeVariations.sh b/test/unittest/speculation/tst.SpecSizeVariations.sh
> new file mode 100755
> index 00000000..75e527d9
> --- /dev/null
> +++ b/test/unittest/speculation/tst.SpecSizeVariations.sh
> @@ -0,0 +1,74 @@
> +#!/bin/bash
> +
> +#
> +# Oracle Linux DTrace.
> +# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
> +# Licensed under the Universal Permissive License v 1.0 as shown at
> +# http://oss.oracle.com/licenses/upl.
> +#
> +
> +dtrace=$1
> +
> +for x in 63 64 79 80 143 144; do
> + $dtrace $dt_flags -xspecsize=$x -qn '
> + BEGIN
> + {
> + x = 123456700ll;
> + self->nspeculate = 0;
> + self->ncommit = 0;
> + self->spec = speculation();
> + printf("Speculative buffer ID: %d\n", self->spec);
> + }
> +
> + /* 16 + 7 * 8 = 72 bytes */
> + BEGIN
> + {
> + speculate(self->spec);
> + printf("%lld\n", x++);
> + printf("%lld\n", x++);
> + printf("%lld\n", x++);
> + printf("%lld\n", x++);
> + printf("%lld\n", x++);
> + printf("%lld\n", x++);
> + printf("%lld\n", x++);
> + self->nspeculate++;
> + }
> +
> + BEGIN
> + {
> + x = 123456800ll;
> + }
> +
> + /* 16 + 9 * 8 = 88 bytes */
> + BEGIN
> + {
> + speculate(self->spec);
> + printf("%lld\n", x++);
> + printf("%lld\n", x++);
> + printf("%lld\n", x++);
> + printf("%lld\n", x++);
> + printf("%lld\n", x++);
> + printf("%lld\n", x++);
> + printf("%lld\n", x++);
> + printf("%lld\n", x++);
> + printf("%lld\n", x++);
> + self->nspeculate++;
> + }
> +
> + BEGIN
> + {
> + commit(self->spec);
> + self->ncommit++;
> + }
> +
> + BEGIN
> + {
> + printf("counts: %d %d\n", self->nspeculate, self->ncommit);
> + exit(0);
> + }
> +
> + ERROR
> + {
> + exit(1);
> + }'
> +done
> diff --git a/test/unittest/speculation/tst.SpecSizeVariations4.d b/test/unittest/speculation/tst.SpecSizeVariations4.d
> deleted file mode 100644
> index 4221c89e..00000000
> --- a/test/unittest/speculation/tst.SpecSizeVariations4.d
> +++ /dev/null
> @@ -1,66 +0,0 @@
> -/*
> - * Oracle Linux DTrace.
> - * Copyright (c) 2006, 2023, Oracle and/or its affiliates. All rights reserved.
> - * Licensed under the Universal Permissive License v 1.0 as shown at
> - * http://oss.oracle.com/licenses/upl.
> - */
> -
> -/*
> - * ASSERTION:
> - * Verify the behavior of speculations with changes in specsize.
> - *
> - * SECTION: Speculative Tracing/Options and Tuning;
> - * Options and Tunables/specsize
> - *
> - */
> -
> -#pragma D option quiet
> -#pragma D option specsize=39
> -
> -long long x;
> -
> -BEGIN
> -{
> - x = 123456789;
> - self->speculateFlag = 0;
> - self->commitFlag = 0;
> - self->spec = speculation();
> - printf("Speculative buffer ID: %d\n", self->spec);
> -}
> -
> -BEGIN
> -{
> - speculate(self->spec);
> - printf("%lld: Lots of data\n", x);
> - printf("%lld: Has to be crammed into this buffer\n", x);
> - printf("%lld: Until it overflows\n", x);
> - printf("%lld: And causes flops\n", x);
> - self->speculateFlag++;
> -
> -}
> -
> -BEGIN
> -/1 <= self->speculateFlag/
> -{
> - commit(self->spec);
> - self->commitFlag++;
> -}
> -
> -BEGIN
> -/1 <= self->commitFlag/
> -{
> - printf("Statement was executed\n");
> - exit(1);
> -}
> -
> -BEGIN
> -/1 > self->commitFlag/
> -{
> - printf("Statement wasn't executed\n");
> - exit(0);
> -}
> -
> -ERROR
> -{
> - exit(1);
> -}
> diff --git a/test/unittest/speculation/tst.SpecSizeVariations4.r b/test/unittest/speculation/tst.SpecSizeVariations4.r
> deleted file mode 100644
> index 7c4bb3b7..00000000
> --- a/test/unittest/speculation/tst.SpecSizeVariations4.r
> +++ /dev/null
> @@ -1,5 +0,0 @@
> -Speculative buffer ID: 1
> -Statement wasn't executed
> -
> --- @@stderr --
> -dtrace: 1 speculative drop
> diff --git a/test/unittest/speculation/tst.SpecSizeVariations5.d b/test/unittest/speculation/tst.SpecSizeVariations5.d
> deleted file mode 100644
> index fb71dfed..00000000
> --- a/test/unittest/speculation/tst.SpecSizeVariations5.d
> +++ /dev/null
> @@ -1,61 +0,0 @@
> -/*
> - * Oracle Linux DTrace.
> - * Copyright (c) 2006, 2021, Oracle and/or its affiliates. All rights reserved.
> - * Licensed under the Universal Permissive License v 1.0 as shown at
> - * http://oss.oracle.com/licenses/upl.
> - */
> -
> -/*
> - * ASSERTION:
> - * Verify the behavior of speculations with changes in specsize.
> - *
> - * SECTION: Speculative Tracing/Options and Tuning;
> - * Options and Tunables/specsize
> - *
> - */
> -
> -#pragma D option quiet
> -#pragma D option specsize=40
> -
> -long long x;
> -
> -BEGIN
> -{
> - x = 123456789;
> - self->speculateFlag = 0;
> - self->commitFlag = 0;
> - self->spec = speculation();
> - printf("Speculative buffer ID: %d\n", self->spec);
> -}
> -
> -BEGIN
> -{
> - speculate(self->spec);
> - printf("%lld: Lots of data\n", x);
> - printf("%lld: Has to be crammed into this buffer\n", x);
> - printf("%lld: Until it overflows\n", x);
> - printf("%lld: And causes flops\n", x);
> - self->speculateFlag++;
> -
> -}
> -
> -BEGIN
> -/1 <= self->speculateFlag/
> -{
> - commit(self->spec);
> - self->commitFlag++;
> -}
> -
> -BEGIN
> -/1 <= self->commitFlag/
> -{
> - printf("Statement was executed\n");
> - exit(0);
> -}
> -
> -BEGIN
> -/1 > self->commitFlag/
> -{
> - printf("Statement wasn't executed\n");
> - exit(1);
> -}
> diff --git a/test/unittest/speculation/tst.SpecSizeVariations5.r b/test/unittest/speculation/tst.SpecSizeVariations5.r
> deleted file mode 100644
> index d09013a2..00000000
> --- a/test/unittest/speculation/tst.SpecSizeVariations5.r
> +++ /dev/null
> @@ -1,7 +0,0 @@
> -Speculative buffer ID: 1
> -123456789: Lots of data
> -123456789: Has to be crammed into this buffer
> -123456789: Until it overflows
> -123456789: And causes flops
> -Statement was executed
> -
> --
> 2.43.5
>