From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ot1-x32a.google.com (mail-ot1-x32a.google.com [IPv6:2607:f8b0:4864:20::32a]) by sourceware.org (Postfix) with ESMTPS id BF376383442B for ; Mon, 8 Feb 2021 10:00:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org BF376383442B Received: by mail-ot1-x32a.google.com with SMTP id l23so1963387otn.10 for ; Mon, 08 Feb 2021 02:00:02 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=29Ri7CIx4INOW+dW2+JC4Wh/nJ50qHFTU+yyE+cBYsY=; b=FOQUJoqqeCgHjRh+xDueOyaeBnFlhcSUexNh2d4s3lOQc4qEhSmu2kKtebnzMjJyVr urjFC4yRWxSH2zXsEcrCfQE+wKGHuBQ/0NUaWR6AVKPexvNnjOVyQpn5TiKuEF+seV21 jl9UOUDxPQ1vgZPWsVZ/MVRMj0aItJo4CMfisCsW8YYTCmcUrK+xx6n476nWGE89f/C4 /s7JI2LhCm6lb2+VsBgR79frvE6i8f3tBteByrHMtKJZkN8k3rYTL/fITsoqD/8N3qHI ZGnT8NON3mI9qU9aOUVE89fCTuekIlkokVRcUlxyRRayaF8+Oo9QmZCnDq4TfAy/OwJ2 XTVw== X-Gm-Message-State: AOAM533/MNVt9qQzqws+0llJJf4uy9QTTEEYn7sbQirg+B9C6ZEzWokf cVDMYmNR/1inelqszBOCr9ORBcA/E6jR8r0PD8ZFlA== X-Google-Smtp-Source: ABdhPJz922KfSoOQUU/mdBvQoOd1cd40jTAwptA7v0b7P23rXO1fs9TFLhH9WIF70Boo3YNHD+Ecs4Jw3w8dbl4SfCk= X-Received: by 2002:a9d:4786:: with SMTP id b6mr12008495otf.269.1612778402044; Mon, 08 Feb 2021 02:00:02 -0800 (PST) MIME-Version: 1.0 References: <20210114125408.GA7692@redhat.com> In-Reply-To: From: Christophe Lyon Date: Mon, 8 Feb 2021 10:59:51 +0100 Message-ID: Subject: Re: calibrate intervals to avoid zero in futures poll test To: Alexandre Oliva Cc: Jonathan Wakely , "libstdc++" , gcc Patches Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-12.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Feb 2021 10:00:05 -0000 On Thu, 14 Jan 2021 at 19:57, Alexandre Oliva wrote: > > On Jan 14, 2021, Jonathan Wakely wrote: > > >> + /* Got for some 10 cycles, but we're already past that and still > > > I can't parse "Got for some 10 cycles". If that's just a typo > > Yeah, I meant "Go for ... but if ..." and managed to double-mangle it. > Thanks for spotting it. Here's the patch I'm installing, with the typos > fixed. Thanks! > > > calibrate intervals to avoid zero in futures poll test > > From: Alexandre Oliva > > We get occasional failures of 30_threads/future/members/poll.cc > on some platforms whose high resolution clock doesn't have such a high > resolution; wait_for_0 ends up as 0, and then some asserts fail as > intervals measured as longer than zero are tested for less than > several times zero. > > This patch adds some calibration in the iteration count to set a > measurable base time interval with some additional margin. > Seeing such random errors when testing arm target under qemu on shared servers. I noticed several such errors on gcc-testresults, too. So I guess this is a ping for this patch, to clear this noise in the results? Thanks, Christophe > > for libstdc++-v3/ChangeLog > > * testsuite/30_threads/future/members/poll.cc: Calibrate > iteration count. > --- > .../testsuite/30_threads/future/members/poll.cc | 33 +++++++++++++++++++- > 1 file changed, 32 insertions(+), 1 deletion(-) > > diff --git a/libstdc++-v3/testsuite/30_threads/future/members/poll.cc b/libstdc++-v3/testsuite/30_threads/future/members/poll.cc > index 91f685b172d73..133dae15ac471 100644 > --- a/libstdc++-v3/testsuite/30_threads/future/members/poll.cc > +++ b/libstdc++-v3/testsuite/30_threads/future/members/poll.cc > @@ -25,7 +25,7 @@ > #include > #include > > -const int iterations = 200; > +int iterations = 200; > > using namespace std; > > @@ -45,10 +45,41 @@ int main() > promise p; > future f = p.get_future(); > > + start_over: > auto start = chrono::high_resolution_clock::now(); > for(int i = 0; i < iterations; i++) > f.wait_for(chrono::seconds(0)); > auto stop = chrono::high_resolution_clock::now(); > + > + /* We've run too few iterations for the clock resolution. > + Attempt to calibrate it. */ > + if (start == stop) > + { > + /* Loop until the clock advances, so that start is right after a > + time increment. */ > + do > + start = chrono::high_resolution_clock::now(); > + while (start == stop); > + int i = 0; > + /* Now until the clock advances again, so that stop is right > + after another time increment. */ > + do > + { > + f.wait_for(chrono::seconds(0)); > + stop = chrono::high_resolution_clock::now(); > + i++; > + } > + while (start == stop); > + /* Go for some 10 cycles, but if we're already past that and > + still get into the calibration loop, double the iteration > + count and try again. */ > + if (iterations < i * 10) > + iterations = i * 10; > + else > + iterations *= 2; > + goto start_over; > + } > + > double wait_for_0 = print("wait_for(0s)", stop - start); > > start = chrono::high_resolution_clock::now(); > > > -- > Alexandre Oliva, happy hacker https://FSFLA.org/blogs/lxo/ > Free Software Activist GNU Toolchain Engineer > Vim, Vi, Voltei pro Emacs -- GNUlius Caesar