Wie würden Sie die Verteilung von wiederholten realen Leistungsmessungen mathematisch modellieren? "Real life" bedeutet, dass Sie nicht nur eine Schleife über den fraglichen Code laufen lassen, sondern dass es sich nur um einen kurzen Ausschnitt innerhalb einer großen Anwendung handelt, die in einem typischen Benutzerszenario läuft.
Meine Erfahrung zeigt, dass es in der Regel eine Spitze um die durchschnittliche Ausführungszeit herum gibt, die sich mit einer Gauß-Verteilung angemessen modellieren lässt. Darüber hinaus gibt es einen "langen Schwanz", der Ausreißer enthält - oft mit einem Vielfachen der Durchschnittszeit. (Das Verhalten ist verständlich, wenn man die Faktoren bedenkt, die zu einer ersten Ausführungsstrafe beitragen).
Mein Ziel besteht darin, Aggregatwerte zu modellieren, die dies in angemessener Weise widerspiegeln und aus den Aggregatwerten berechnet werden können (wie beim Gauß, mu und sigma aus N, Summe der Werte und Summe der Quadrate berechnen). Mit anderen Worten: Die Anzahl der Wiederholungen ist unbegrenzt, aber der Speicher- und Berechnungsbedarf sollte minimiert werden.
Eine Gaußsche Normalverteilung kann den langen Schwanz nicht angemessen modellieren und führt dazu, dass der Durchschnitt selbst bei einem sehr geringen Prozentsatz von Ausreißern stark verzerrt wird.
Ich bin auf der Suche nach Ideen, insbesondere wenn dies bereits versucht/analysiert wurde. Ich habe mir verschiedene Verteilungsmodelle angesehen und denke, dass ich mir etwas ausdenken könnte, aber meine Statistikkenntnisse sind eingerostet und ich könnte mit einer überzogenen Lösung enden. Oh, eine komplett eingeschweißte Lösung wäre auch in Ordnung ;)
Andere Aspekte / Ideen: Manchmal erhält man "Zwei-Höcker"-Verteilungen, die in meinem Szenario mit einem einzigen mu/sigma, das beide abdeckt, akzeptabel wären, aber idealerweise getrennt ausgewiesen werden sollten.
Ein weiterer Ansatz wäre eine "gleitende Wahrscheinlichkeitsdichteberechnung", die nur einen begrenzten Puffer verwendet und sich automatisch an den Bereich anpasst (aufgrund der langen Schwanzlänge sind die Bins möglicherweise nicht gleichmäßig verteilt) - ich habe nichts gefunden, aber mit einigen Annahmen über die Verteilung sollte es im Prinzip möglich sein.
Warum (da es gefragt wurde) -
Für einen komplexen Prozess müssen wir Garantien wie "nur 0,1 % der Läufe überschreiten eine Grenze von 3 Sekunden, und die durchschnittliche Verarbeitungszeit beträgt 2,8 Sekunden" geben. Die Leistung eines isolierten Codestücks kann sich stark von einer normalen Laufzeitumgebung unterscheiden, in der es unterschiedliche Ebenen von Festplatten- und Netzwerkzugriffen, Hintergrunddiensten, geplanten Ereignissen, die innerhalb eines Tages auftreten, usw. gibt.
Dies kann trivialerweise durch Akkumulation gelöst werden todo Daten. Um diese Daten in der Produktion zu akkumulieren, müssen die produzierten Daten jedoch begrenzt werden. Für die Analyse einzelner Codestücke ist eine Gaußsche Abweichung plus Strafe für den ersten Durchlauf in Ordnung. Für die oben gefundenen Verteilungen funktioniert das nicht mehr.
[Bearbeiten] Ich habe bereits sehr gute Antworten erhalten (und endlich - vielleicht - etwas Zeit, um daran zu arbeiten). Ich starte ein Kopfgeld, um nach mehr Input / Ideen zu suchen.