18 Stimmen

Modellierung der Verteilung von Leistungsmessungen

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.

0voto

Charles Stewart Punkte 11393

Das ist zwar keine Antwort auf Ihre Frage, aber dennoch relevant: Mor Harchol-Balter hat eine sehr schöne Analyse der Größe von Aufträgen durchgeführt, die an einen Scheduler übermittelt werden, Die Auswirkung von Verteilungen mit starkem Schwanz auf den Entwurf von Computersystemen (1999) . Sie fand heraus, dass die Größe der an ihr verteiltes Aufgabenzuweisungssystem übermittelten Aufträge eine Potenzgesetz-Verteilung aufwies, was bedeutete, dass bestimmte konventionelle Weisheiten, die sie bei der Konstruktion ihres Aufgabenzuweisungssystems angenommen hatte, vor allem die Annahme, dass die Aufträge gut ausbalanciert sein sollten, schreckliche Folgen für die Übermittler von Aufträgen hatten. Sie hat in dieser Angelegenheit gute Nacharbeit geleistet.

Im Großen und Ganzen geht es darum, dass Sie sich Fragen wie diese stellen müssen:

  1. Was passiert, wenn vernünftig erscheinende Annahmen über die Verteilung der Leistung, wie z. B. eine Normalverteilung, nicht mehr stimmen?
  2. Sind die Datensätze, die ich betrachte, wirklich repräsentativ für das Problem, das ich zu lösen versuche?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X