[PATCH 23/38] test: Clean up the specsize tests

eugene.loh
2024-06-27T05:39:19Z

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>
---
.../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.18.4