From owner-svn-src-all@freebsd.org Fri Jun 9 15:16:40 2017 Return-Path: Delivered-To: svn-src-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B8B38BF7290; Fri, 9 Jun 2017 15:16:40 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 8AE047075C; Fri, 9 Jun 2017 15:16:40 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v59FGdYh037100; Fri, 9 Jun 2017 15:16:39 GMT (envelope-from avg@FreeBSD.org) Received: (from avg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v59FGd0E037097; Fri, 9 Jun 2017 15:16:39 GMT (envelope-from avg@FreeBSD.org) Message-Id: <201706091516.v59FGd0E037097@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: avg set sender to avg@FreeBSD.org using -f From: Andriy Gapon Date: Fri, 9 Jun 2017 15:16:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r319746 - in head: cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs sys/dev/aacraid X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Jun 2017 15:16:40 -0000 Author: avg Date: Fri Jun 9 15:16:39 2017 New Revision: 319746 URL: https://svnweb.freebsd.org/changeset/base/319746 Log: MFV r319744,r319745: 8269 dtrace stddev aggregation is normalized incorrectly illumos/illumos-gate@79809f9cf402f130667349b2d4007ecd65d63c6f https://github.com/illumos/illumos-gate/commit/79809f9cf402f130667349b2d4007ecd65d63c6f https://www.illumos.org/issues/8269 It seems that currently normalization of stddev aggregation is done incorrectly. We divide both the sum of values and the sum of their squares by the normalization factor. But we should divide the sum of squares by the normalization factor squared to scale the original values properly. FreeBSD note: the actual change was committed in r316853, this commit adds the test files and record merge information. Reviewed by: Bryan Cantrill Approved by: Robert Mustacchi Author: Andriy Gapon MFC after: 1 week Sponsored by: Panzura Added: head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.stddev.normalize.d - copied unchanged from r319745, vendor/illumos/dist/cmd/dtrace/test/tst/common/aggs/tst.stddev.normalize.d head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.stddev.normalize.d.out - copied unchanged from r319745, vendor/illumos/dist/cmd/dtrace/test/tst/common/aggs/tst.stddev.normalize.d.out Modified: head/sys/dev/aacraid/aacraid.c Directory Properties: head/cddl/contrib/opensolaris/ (props changed) Copied: head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.stddev.normalize.d (from r319745, vendor/illumos/dist/cmd/dtrace/test/tst/common/aggs/tst.stddev.normalize.d) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.stddev.normalize.d Fri Jun 9 15:16:39 2017 (r319746, copy of r319745, vendor/illumos/dist/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); +} Copied: head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.stddev.normalize.d.out (from r319745, vendor/illumos/dist/cmd/dtrace/test/tst/common/aggs/tst.stddev.normalize.d.out) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.stddev.normalize.d.out Fri Jun 9 15:16:39 2017 (r319746, copy of r319745, vendor/illumos/dist/cmd/dtrace/test/tst/common/aggs/tst.stddev.normalize.d.out) @@ -0,0 +1,3 @@ +normalized data: + + 31 Modified: head/sys/dev/aacraid/aacraid.c ============================================================================== --- head/sys/dev/aacraid/aacraid.c Fri Jun 9 15:06:50 2017 (r319745) +++ head/sys/dev/aacraid/aacraid.c Fri Jun 9 15:16:39 2017 (r319746) @@ -670,12 +670,10 @@ aac_alloc(struct aac_softc *sc) TAILQ_INIT(&sc->aac_fibmap_tqh); sc->aac_commands = malloc(sc->aac_max_fibs * sizeof(struct aac_command), M_AACRAIDBUF, M_WAITOK|M_ZERO); - mtx_lock(&sc->aac_io_lock); while (sc->total_fibs < sc->aac_max_fibs) { if (aac_alloc_commands(sc) != 0) break; } - mtx_unlock(&sc->aac_io_lock); if (sc->total_fibs == 0) return (ENOMEM); @@ -1046,7 +1044,9 @@ aac_command_thread(struct aac_softc *sc) * will grab Giant, and would result in an LOR. */ if ((sc->aifflags & AAC_AIFFLAGS_ALLOCFIBS) != 0) { + mtx_unlock(&sc->aac_io_lock); aac_alloc_commands(sc); + mtx_lock(&sc->aac_io_lock); sc->aifflags &= ~AAC_AIFFLAGS_ALLOCFIBS; aacraid_startio(sc); } @@ -1193,7 +1193,6 @@ aac_alloc_commands(struct aac_softc *sc) u_int32_t maxsize; fwprintf(sc, HBA_FLAGS_DBG_FUNCTION_ENTRY_B, ""); - mtx_assert(&sc->aac_io_lock, MA_OWNED); if (sc->total_fibs + sc->aac_max_fibs_alloc > sc->aac_max_fibs) return (ENOMEM); @@ -1202,7 +1201,6 @@ aac_alloc_commands(struct aac_softc *sc) if (fm == NULL) return (ENOMEM); - mtx_unlock(&sc->aac_io_lock); /* allocate the FIBs in DMAable memory and load them */ if (bus_dmamem_alloc(sc->aac_fib_dmat, (void **)&fm->aac_fibs, BUS_DMA_NOWAIT, &fm->aac_fibmap)) { @@ -1220,7 +1218,6 @@ aac_alloc_commands(struct aac_softc *sc) (void)bus_dmamap_load(sc->aac_fib_dmat, fm->aac_fibmap, fm->aac_fibs, sc->aac_max_fibs_alloc * maxsize, aac_map_command_helper, &fibphys, 0); - mtx_lock(&sc->aac_io_lock); /* initialize constant fields in the command structure */ bzero(fm->aac_fibs, sc->aac_max_fibs_alloc * maxsize); @@ -1250,8 +1247,12 @@ aac_alloc_commands(struct aac_softc *sc) if ((error = bus_dmamap_create(sc->aac_buffer_dmat, 0, &cm->cm_datamap)) != 0) break; - if (sc->aac_max_fibs <= 1 || sc->aac_max_fibs - sc->total_fibs > 1) + if (sc->aac_max_fibs <= 1 || + sc->aac_max_fibs - sc->total_fibs > 1) { + mtx_lock(&sc->aac_io_lock); aacraid_release_command(cm); + mtx_unlock(&sc->aac_io_lock); + } sc->total_fibs++; } @@ -1500,6 +1501,7 @@ aac_unmap_command(struct aac_command *cm) if (!(cm->cm_flags & AAC_CMD_MAPPED)) return; + mtx_assert(&sc->aac_io_lock, MA_OWNED); if (cm->cm_datalen != 0 && cm->cm_passthr_dmat == 0) { if (cm->cm_flags & AAC_CMD_DATAIN) bus_dmamap_sync(sc->aac_buffer_dmat, cm->cm_datamap,