diff options
Diffstat (limited to 'usr/src')
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 |