<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Consolas;
panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
pre
{mso-style-priority:99;
mso-style-link:"HTML Preformatted Char";
margin:0cm;
margin-bottom:.0001pt;
font-size:10.0pt;
font-family:"Courier New",serif;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
{mso-style-priority:34;
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:36.0pt;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
p.Code, li.Code, div.Code
{mso-style-name:Code;
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:22.7pt;
margin-bottom:.0001pt;
font-size:10.0pt;
font-family:"Courier New",serif;
font-weight:bold;}
span.HTMLPreformattedChar
{mso-style-name:"HTML Preformatted Char";
mso-style-priority:99;
mso-style-link:"HTML Preformatted";
font-family:Consolas;}
span.ws-pre-wrap
{mso-style-name:ws-pre-wrap;}
span.EmailStyle25
{mso-style-type:personal-reply;
font-family:"Calibri",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
@list l0
{mso-list-id:1200700991;
mso-list-type:hybrid;
mso-list-template-ids:-2060308090 134807553 134807555 134807557 134807553 134807555 134807557 134807553 134807555 134807557;}
@list l0:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l0:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New",serif;}
@list l0:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l0:level4
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l0:level5
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New",serif;}
@list l0:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l0:level7
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l0:level8
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New",serif;}
@list l0:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l1
{mso-list-id:1504590367;
mso-list-template-ids:-820626022;}
@list l1:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:36.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level2
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:72.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level3
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:108.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level4
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:144.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level5
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:180.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level6
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:216.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level7
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:252.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level8
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:288.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level9
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:324.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
ol
{margin-bottom:0cm;}
ul
{margin-bottom:0cm;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-GB" link="blue" vlink="purple">
<div class="WordSection1">
<p style="margin-left:36.0pt"><span lang="EN-US">Simon, you are on windows, correct? If so the result you posted is using the "x86_64-linux-deb9" environment as a baseline when it should be using "x86_64" which is much closer to the result you're getting.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">WSL actually. (Windows Subsystem for Linux.)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">Simon<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> David Eichmann <davide@well-typed.com>
<br>
<b>Sent:</b> 02 July 2020 16:25<br>
<b>To:</b> Simon Peyton Jones <simonpj@microsoft.com>; ghc-devs@haskell.org<br>
<b>Subject:</b> Re: Perf notes<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p>Hello,<o:p></o:p></p>
<p>So CI metrics are being pushed again, good. The immediate issue was perf test <span lang="EN-US">
T9803. I've looked at metrics across all CI test environments and the last 300 commit on master. Metric looks stable. I've attached the output of: `python3 ./testsuite/driver/perf_notes.py --chart T9203.html --ci --test-name T9203 origin/master~300..origin/master`.</span><o:p></o:p></p>
<p><span lang="EN-US">Simon, you are on windows, correct? If so the result you posted is using the "x86_64-linux-deb9" environment as a baseline when it should be using "x86_64" which is much closer to the result you're getting.</span><o:p></o:p></p>
<p><span lang="EN-US" style="mso-fareast-language:EN-US">> So it’s just an implementation detail whether the numbers you save are gotten from one run, or another identical one.
</span><o:p></o:p></p>
<p><span lang="EN-US" style="mso-fareast-language:EN-US">For the most part yes, but since we usually rebase and batch commit with marge bot, we are really creating a new commit. So it makes some sense to rerun CI.</span><o:p></o:p></p>
<p><span lang="EN-US" style="mso-fareast-language:EN-US">> The CI log tells you the comparison between the preceding commit and this one</span><o:p></o:p></p>
<p><span lang="EN-US" style="mso-fareast-language:EN-US">I'd love for this to be the behavior too. The problem is, most of the time we don't have the metrics for the parent commit, and generating them is expensive. We could automatically checkout / build the
previous commit and run perf tests, but this doesn't seem like good design. That's why we've resorted to searching for "most recent" local or CI metrics to establish an approximate baseline. Requiring the developers to always run perf tests locally on the
previous commit will be extremely annoying. Another option is to just disable perf tests by default.</span><o:p></o:p></p>
<p><span lang="EN-US" style="mso-fareast-language:EN-US">It's not satisfying but it's hard to think of a better solution. I think the current implementation is still more convenient than before, where baselines were just hard coded into test files. If you wanted
to investigate a particular commit, you had to manually establish a baseline. Perhaps the problem with this new system is that it's a bit too "magical" and it's unclear how to interpret results. Perhaps this can be remedied with better output form the test
runner.</span><o:p></o:p></p>
<p><span lang="EN-US" style="mso-fareast-language:EN-US">> Would it be possible to output a table (in the log) like we get from nofib-analyse</span><o:p></o:p></p>
<p><span lang="EN-US" style="mso-fareast-language:EN-US">Absolutely. This should be fairly easy to implement. I've created #18417.</span><o:p></o:p></p>
<p><span lang="EN-US" style="mso-fareast-language:EN-US">- David E</span><o:p></o:p></p>
<p><o:p> </o:p></p>
<div>
<p class="MsoNormal">On 6/29/20 3:08 PM, Simon Peyton Jones wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p style="margin-left:36.0pt"><span lang="EN-US">Re the doubling of bytes-allocated on T9803, that's a good point. Due to the recent change in RSA keys, CI is recently failing to upload metrics (e.g. [1])! I'll fix that then see if I can track down where /
if the metric has really regressed in master.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">Thanks</span><o:p></o:p></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"> </span><o:p></o:p></p>
<p style="margin-left:36.0pt"><span lang="EN-US">Yes we run CI on MRs, but once merged into master CI is run again. It's only those metrics from CI on master (post merge) that are ultimately uploaded / used as a baseline.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">OK. But they are guaranteed to be 100.0% identical to the ones discovered by CI, aren’t they? So it’s just an implementation detail whether the numbers you save are gotten from one run, or another
identical one.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">I’m still lost about when I can rely on the perf output of CI and when I can’t. I’m really hoping for a simple answer like:</span><o:p></o:p></p>
<ul style="margin-top:0cm" type="disc">
<li class="MsoListParagraph" style="margin-left:0cm;mso-list:l0 level1 lfo3"><span style="mso-fareast-language:EN-US">The CI log tells you the comparison between the preceding commit and this one</span><o:p></o:p></li></ul>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">No ifs, no buts. Simple!</span><o:p></o:p></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">Incidentally, would it be possible to output a table (in the log) like we get from nofib-analyse. It looks like this</span><o:p></o:p></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"> </span><o:p></o:p></p>
<p class="Code"><span style="mso-fareast-language:EN-US"> Program Size Allocs Runtime Elapsed TotalMem</span><o:p></o:p></p>
<p class="Code"><span style="mso-fareast-language:EN-US"> --------------------------------------------------------------------------------</span><o:p></o:p></p>
<p class="Code"><span style="mso-fareast-language:EN-US"> boyer -0.3% +5.4% +0.7% +1.0% 0.0%</span><o:p></o:p></p>
<p class="Code"><span style="mso-fareast-language:EN-US"> cichelli -0.3% +5.9% -9.9% -9.5% 0.0%</span><o:p></o:p></p>
<p class="Code"><span style="mso-fareast-language:EN-US"> compress2 -0.4% +9.6% +7.2% +6.4% 0.0%</span><o:p></o:p></p>
<p class="Code"><span style="mso-fareast-language:EN-US"> constraints -0.3% +0.2% -3.0% -3.4% 0.0%</span><o:p></o:p></p>
<p class="Code"><span style="mso-fareast-language:EN-US"> cryptarithm2 -0.3% -3.9% -2.2% -2.4% 0.0%</span><o:p></o:p></p>
<p class="Code"><span style="mso-fareast-language:EN-US"> gamteb -0.4% +2.5% +2.8% +2.8% 0.0%</span><o:p></o:p></p>
<p class="Code"><span style="mso-fareast-language:EN-US"> life -0.3% -2.2% -4.7% -4.9% 0.0%</span><o:p></o:p></p>
<p class="Code"><span style="mso-fareast-language:EN-US"> lift -0.3% -0.3% -0.8% -0.5% 0.0%</span><o:p></o:p></p>
<p class="Code"><span style="mso-fareast-language:EN-US"> linear -0.3% -0.1% -4.1% -4.5% 0.0%</span><o:p></o:p></p>
<p class="Code"><span style="mso-fareast-language:EN-US"> mate -0.2% +1.4% -2.2% -1.9% -14.3%</span><o:p></o:p></p>
<p class="Code"><span style="mso-fareast-language:EN-US"> parser -0.3% -2.1% -5.4% -4.6% 0.0%</span><o:p></o:p></p>
<p class="Code"><span style="mso-fareast-language:EN-US"> puzzle -0.3% +2.1% -6.6% -6.3% 0.0%</span><o:p></o:p></p>
<p class="Code"><span style="mso-fareast-language:EN-US"> simple -0.4% +2.8% -3.4% -3.3% -2.2%</span><o:p></o:p></p>
<p class="Code"><span style="mso-fareast-language:EN-US"> veritas -0.1% +0.7% -0.6% -1.1% 0.0%</span><o:p></o:p></p>
<p class="Code"><span style="mso-fareast-language:EN-US"> wheel-sieve2 -0.3% -19.2% -24.9% -24.5% -42.9%</span><o:p></o:p></p>
<p class="Code"><span style="mso-fareast-language:EN-US"> --------------------------------------------------------------------------------</span><o:p></o:p></p>
<p class="Code"><span style="mso-fareast-language:EN-US"> Min -0.4% -19.2% -24.9% -24.5% -42.9%</span><o:p></o:p></p>
<p class="Code"><span style="mso-fareast-language:EN-US"> Max +0.1% +9.6% +7.2% +6.4% +33.3%</span><o:p></o:p></p>
<p class="Code"><span style="mso-fareast-language:EN-US"> Geometric Mean -0.3% -0.0% -3.0% -2.9% -0.3%</span><o:p></o:p></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">Instantly comprehensible, one line per benchmark. I find I spent quite a lot of time search manually in the log and manually building a table (or excerpts thereof) looking like this.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">I don’t have an opinion about the columns, just wanting a table with one line per benchmark, and a number of columns.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">Thanks</span><o:p></o:p></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">Simon</span><o:p></o:p></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"> </span><o:p></o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> David Eichmann
<a href="mailto:davide@well-typed.com"><davide@well-typed.com></a> <br>
<b>Sent:</b> 27 June 2020 20:39<br>
<b>To:</b> Simon Peyton Jones <a href="mailto:simonpj@microsoft.com"><simonpj@microsoft.com></a>;
<a href="mailto:ghc-devs@haskell.org">ghc-devs@haskell.org</a><br>
<b>Subject:</b> Re: Perf notes</span><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"> <o:p></o:p></p>
<p><span lang="EN-US">> I thought that wasn’t possible. Isn’t that what CI is *<b>for</b>*?</span><o:p></o:p></p>
<p><span lang="EN-US">Yes we run CI on MRs, but once merged into master CI is run again. It's only those metrics from CI on master (post merge) that are ultimately uploaded / used as a baseline.</span><o:p></o:p></p>
<p><span lang="EN-US">Re the doubling of bytes-allocated on T9803, that's a good point. Due to the recent change in RSA keys, CI is recently failing to upload metrics (e.g. [1])! I'll fix that then see if I can track down where / if the metric has really regressed
in master.</span><o:p></o:p></p>
<p> <o:p></o:p></p>
<p><span lang="EN-US">[1] "</span><span class="ws-pre-wrap"><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New",serif">fatal: Could not read from remote repository." </span></span><span lang="EN-US">
<a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.haskell.org%2Fghc%2Fghc%2F-%2Fjobs%2F378487&data=02%7C01%7Csimonpj%40microsoft.com%7Cc4f75c38623e40b4983608d81e9c118a%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637293004078959683&sdata=1obE6D2oHoZxYizjzOAsxqOcW%2B3PcY6kqfckNgKFFQg%3D&reserved=0">
https://gitlab.haskell.org/ghc/ghc/-/jobs/378487</a></span><o:p></o:p></p>
<p>-- <o:p></o:p></p>
<pre>David Eichmann, Haskell Consultant<o:p></o:p></pre>
<pre>Well-Typed LLP, <a href="https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.well-typed.com%2F&data=02%7C01%7Csimonpj%40microsoft.com%7Cc4f75c38623e40b4983608d81e9c118a%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637293004078969677&sdata=lk2tF4MQQwKPoMO2ABXuWXI871hTlPNXb0O5YICa5Bg%3D&reserved=0">http://www.well-typed.com</a><o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>Registered in England & Wales, OC335890<o:p></o:p></pre>
<pre>118 Wymering Mansions, Wymering Road, London W9 2NF, England <o:p></o:p></pre>
</div>
</blockquote>
<pre>-- <o:p></o:p></pre>
<pre>David Eichmann, Haskell Consultant<o:p></o:p></pre>
<pre>Well-Typed LLP, <a href="https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.well-typed.com%2F&data=02%7C01%7Csimonpj%40microsoft.com%7Cc4f75c38623e40b4983608d81e9c118a%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637293004078969677&sdata=lk2tF4MQQwKPoMO2ABXuWXI871hTlPNXb0O5YICa5Bg%3D&reserved=0">http://www.well-typed.com</a><o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>Registered in England & Wales, OC335890<o:p></o:p></pre>
<pre>118 Wymering Mansions, Wymering Road, London W9 2NF, England <o:p></o:p></pre>
</div>
</div>
</body>
</html>