4 comments

  • cheema336 hours ago
    I think I could use a slightly more detailed explanation of what it is and how it works at the high level. The website doesn&#x27;t fully explain it.<p>e.g. The about page, as of this writing, does not say anything about the project.<p><a href="https:&#x2F;&#x2F;otava.apache.org&#x2F;docs&#x2F;overview" rel="nofollow">https:&#x2F;&#x2F;otava.apache.org&#x2F;docs&#x2F;overview</a>
    • homarp5 hours ago
      Change Detection for Continuous Performance Engineering: Otava performs statistical analysis of performance test results stored in CSV files, PostgreSQL, BigQuery, or Graphite database. It finds change-points and notifies about possible performance regressions.<p>You can also read &quot;8 Years of Optimizing Apache Otava: How disconnected open source developers took an algorithm from n3 to constant time&quot; - <a href="https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2505.06758v1" rel="nofollow">https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2505.06758v1</a><p>and &quot;The Use of Change Point Detection to Identify Software Performance Regressions in a Continuous Integration System&quot; - <a href="https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2003.00584" rel="nofollow">https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2003.00584</a> (and I guess this blog post <a href="https:&#x2F;&#x2F;www.mongodb.com&#x2F;company&#x2F;blog&#x2F;engineering&#x2F;using-change-point-detection-find-performance-regressions" rel="nofollow">https:&#x2F;&#x2F;www.mongodb.com&#x2F;company&#x2F;blog&#x2F;engineering&#x2F;using-chang...</a> )<p>(<a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Change_detection" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Change_detection</a> explains what&#x27;s change detection)
      • kanwisher1 hour ago
        that really doesn&#x27;t explain it very well
    • bjackman1 hour ago
      If you&#x27;ve had the problem it solves you don&#x27;t really need an explanation beyond &quot;Change Detection for Continuous Performance Engineering&quot; I think.<p>Basically if I&#x27;m reading it correctly the problem is you want to automate detection of performance regressions. You can&#x27;t afford to do continuous A&#x2F;B tests. So instead you run your benchmarks continuously at HEAD producing a time series of scores.<p>This does the statistical analysis to identify if your scores are degrading. When they degrade it gives you a statistical analysis of the location and magnitude of the (so something like &quot;mean score dropped by 5% at p=0.05 between commits X and Y&quot;).<p>Basically if anyone has ever proposed &quot;performance tests&quot; (&quot;we&#x27;ll run the benchmark and fail CI if it scores less than X!&quot;) you usually need to be pretty skeptical (it&#x27;s normally impossible to find an X high enough to detect issues but low enough to avoid constant flakes), but with fancy tools like this you can say &quot;no to performance tests, but here&#x27;s a way to do perf analysis in CI&quot;.<p>IME it&#x27;s still tricky to get these things working nicely, it always requires a bit of tuning and you are gonna be a bit out of your depth with the maths (if you understood the inferential statistics properly you would already have written a tool like this yourself). But they&#x27;re fundamentally a good idea if you really really care about perf IMO.
    • mohsen11 hour ago
      it is basically a “performance regression detector” It looks at a time series of benchmark results (e.g. test runtime, latency, memory usage across commits) and tries to answer one question: did something actually change, or is this just noise?<p>in a performance critical project I am working on, I had a precommit hook to run microbenchmarks to avoid perf regressions but noise was a real issue. Have to to try it to be sure if it can help but seems like a solution to a problem I had.
      • bjackman1 hour ago
        If your benchmarks are fast enough to run in pre-commit you might not need a time series analysis. Maybe you can just run an intensive A&#x2F;B test between HEAD and HEAD^.<p>You can&#x27;t just set a threshold coz your environment will drift but if you figure out the number of iterations needed to achieve statistical significance for the magnitude of changes you&#x27;re trying to catch, then you might be able to just run a before&#x2F;after then do a bootstrap [0] comparison to evaluate probability of a change.<p>[0] <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Bootstrapping_(statistics)" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Bootstrapping_(statistics)</a>
    • adammarples3 hours ago
      It&#x27;s hilarious that the about page doesn&#x27;t tell you anything about the project
  • jacques_chester4 hours ago
    I would be interested in a layperson summary of how this code deals with whacky distributions produced by computer systems. I am too stupid to understand anything more complex than introductory SPC which struggles with non-normal distributions.
  • esafak6 hours ago
    Change Detection for tests. The algorithm: <a href="https:&#x2F;&#x2F;otava.apache.org&#x2F;docs&#x2F;math" rel="nofollow">https:&#x2F;&#x2F;otava.apache.org&#x2F;docs&#x2F;math</a>