summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/cmd/dtrace/test/tst/common/aggs/tst.stddev.normalize.d46
-rw-r--r--usr/src/cmd/dtrace/test/tst/common/aggs/tst.stddev.normalize.d.out3
-rw-r--r--usr/src/lib/libdtrace/common/dt_consume.c2
-rw-r--r--usr/src/pkg/manifests/system-dtrace-tests.mf2
4 files changed, 53 insertions, 0 deletions
diff --git a/usr/src/cmd/dtrace/test/tst/common/aggs/tst.stddev.normalize.d b/usr/src/cmd/dtrace/test/tst/common/aggs/tst.stddev.normalize.d
new file mode 100644
index 0000000000..50c14d3ced
--- /dev/null
+++ b/usr/src/cmd/dtrace/test/tst/common/aggs/tst.stddev.normalize.d
@@ -0,0 +1,46 @@
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source. A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright 2017 Panzura. All rights reserved.
+ */
+
+/*
+ * ASSERTION:
+ * Positive test for normalization() of stddev()
+ *
+ * SECTION: Aggregations/Normalization
+ *
+ */
+
+#pragma D option quiet
+#pragma D option aggrate=1ms
+#pragma D option switchrate=50ms
+
+BEGIN
+{
+ i = 0;
+}
+
+tick-100ms
+/i < 11/
+{
+ @ = stddev(i * 100);
+ i++;
+}
+
+tick-100ms
+/i == 11/
+{
+ printf("normalized data:\n");
+ normalize(@, 10);
+ exit(0);
+}
diff --git a/usr/src/cmd/dtrace/test/tst/common/aggs/tst.stddev.normalize.d.out b/usr/src/cmd/dtrace/test/tst/common/aggs/tst.stddev.normalize.d.out
new file mode 100644
index 0000000000..a629b1fdb5
--- /dev/null
+++ b/usr/src/cmd/dtrace/test/tst/common/aggs/tst.stddev.normalize.d.out
@@ -0,0 +1,3 @@
+normalized data:
+
+ 31
diff --git a/usr/src/lib/libdtrace/common/dt_consume.c b/usr/src/lib/libdtrace/common/dt_consume.c
index b292b6abc5..7f8c673dbe 100644
--- a/usr/src/lib/libdtrace/common/dt_consume.c
+++ b/usr/src/lib/libdtrace/common/dt_consume.c
@@ -381,8 +381,10 @@ dt_stddev(uint64_t *data, uint64_t normal)
* The standard approximation for standard deviation is
* sqrt(average(x**2) - average(x)**2), i.e. the square root
* of the average of the squares minus the square of the average.
+ * When normalizing, we should divide the sum of x**2 by normal**2.
*/
dt_divide_128(data + 2, normal, avg_of_squares);
+ dt_divide_128(avg_of_squares, normal, avg_of_squares);
dt_divide_128(avg_of_squares, data[0], avg_of_squares);
norm_avg = (int64_t)data[1] / (int64_t)normal / (int64_t)data[0];
diff --git a/usr/src/pkg/manifests/system-dtrace-tests.mf b/usr/src/pkg/manifests/system-dtrace-tests.mf
index 1dc1a5649d..33ed8b8b4d 100644
--- a/usr/src/pkg/manifests/system-dtrace-tests.mf
+++ b/usr/src/pkg/manifests/system-dtrace-tests.mf
@@ -358,6 +358,8 @@ file path=opt/SUNWdtrt/tst/common/aggs/tst.sizedkeys.d mode=0444
file path=opt/SUNWdtrt/tst/common/aggs/tst.sizedkeys.d.out mode=0444
file path=opt/SUNWdtrt/tst/common/aggs/tst.stddev.d mode=0444
file path=opt/SUNWdtrt/tst/common/aggs/tst.stddev.d.out mode=0444
+file path=opt/SUNWdtrt/tst/common/aggs/tst.stddev.normalize.d mode=0444
+file path=opt/SUNWdtrt/tst/common/aggs/tst.stddev.normalize.d.out mode=0444
file path=opt/SUNWdtrt/tst/common/aggs/tst.subr.d mode=0444
file path=opt/SUNWdtrt/tst/common/aggs/tst.sum.d mode=0444
file path=opt/SUNWdtrt/tst/common/aggs/tst.sum.d.out mode=0444