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.

6voto

Mike Dunlavey Punkte 39339

Wenn man einen Zufallswert hat, der nur positiv sein kann, ist eine logarithmische Normalverteilung eine gute Möglichkeit, ihn zu modellieren. Das heißt, man nimmt den Logarithmus jeder Messung und geht davon aus, dass dieser normalverteilt ist.

Wenn Sie wollen, können Sie davon ausgehen, dass es mehrere Höcker gibt, d. h. dass es sich um die Summe von zwei Normalen mit unterschiedlichen Mittelwerten handelt. Die Schätzung dieser Parameter ist etwas kompliziert, da man für jede Messung die Wahrscheinlichkeit schätzen muss, dass sie zu jedem Buckel gehört. Das könnte mehr sein, als Sie sich vornehmen wollen.

Lognormalverteilungen sind sehr praktisch und gut brauchbar. Man hat es zum Beispiel nicht mit dem Durchschnitt zu tun, sondern mit dem geometrischen Mittel, das dem Median entspricht.

In der pharmakometrischen Modellierung sind lognormale Verteilungen übrigens allgegenwärtig und modellieren z. B. Blutvolumen, Absorptions- und Eliminationsraten, Körpermasse usw.

HINZUFÜGEN: Wenn Sie eine gleitende Verteilung wünschen, handelt es sich um eine empirische oder nichtparametrische Verteilung. Um das zu modellieren, speichert man die Messwerte normalerweise in einem sortierten Array. Dann ist es einfach, die Perzentile herauszusuchen. Der Median ist zum Beispiel die "mittlere Zahl". Wenn Sie zu viele Messungen speichern müssen, können Sie eine Art Binning durchführen, nachdem Sie genug Messungen haben, um die allgemeine Form zu erhalten.

ADDED: Es gibt eine einfache Methode, um festzustellen, ob eine Verteilung normal (oder log-normal) ist. Nehmen Sie die Logarithmen der Messungen und legen Sie sie in ein sortiertes Feld. Dann erstellen Sie ein QQ-Diagramm (Quantil-Quantil). Dazu erzeugen Sie so viele normale Zufallszahlen, wie Sie Stichproben haben, und sortieren diese. Zeichnen Sie dann einfach die Punkte ein, wobei X der Punkt der Normalverteilung und Y der Punkt der logarithmischen Stichprobe ist. Das Ergebnis sollte eine gerade Linie sein. (Eine wirklich einfache Methode, eine normale Zufallszahl zu erzeugen, besteht darin, 12 gleichmäßige Zufallszahlen im Bereich von +/- 0,5 zu addieren).

3voto

kopper Punkte 2656

Das von Ihnen beschriebene Problem wird "Verteilungsanpassung" genannt und hat nichts mit Leistungsmessungen zu tun, d. h. es handelt sich um ein allgemeines Problem der Anpassung einer geeigneten Verteilung an eine beliebige gesammelte/gemessene Datenstichprobe.

Der Standardprozess sieht in etwa so aus:

  1. Erraten Sie die beste Verteilung.
  2. Führen Sie Hypothesentests durch, um zu prüfen, wie gut sie die gesammelten Daten beschreiben.
  3. Wiederholen Sie die Schritte 1-3, wenn sie nicht ausreichen.

Hier finden Sie einen interessanten Artikel, der beschreibt, wie dies mit Open-Source möglich ist R Software-System ici . Ich denke, besonders nützlich für Sie könnte Funktion sein fitdistr .

2voto

Denis Bazhenov Punkte 9065

Berücksichtigen Sie zusätzlich zu den bereits gegebenen Antworten Empirische Verteilungen . Ich habe erfolgreiche Erfahrungen mit der Verwendung empirischer Verteilungen für die Leistungsanalyse verschiedener verteilter Systeme. Die Idee ist sehr simpel. Sie müssen ein Histogramm der Leistungsmessungen erstellen. Die Messungen sollten mit einer bestimmten Genauigkeit diskretisiert werden. Wenn Sie ein Histogramm haben, können Sie mehrere nützliche Dinge tun:

  • die Wahrscheinlichkeit eines bestimmten Wertes berechnen (Sie sind nur an die Genauigkeit gebunden);
  • PDF- und CDF-Funktionen für die Leistungsmessungen erstellen;
  • eine Folge von Antwortzeiten gemäß einer Verteilung zu erzeugen. Dies ist sehr nützlich für die Leistungsmodellierung.

1voto

Luka Rahne Punkte 9982

Versuchen Sie es mit der Gamma-Verteilung http://en.wikipedia.org/wiki/Gamma_distribution

Aus wikipedia

El Gamma-Verteilung ist häufig ein Wahrscheinlichkeitsmodell für Wartezeiten In der Lebenserprobung ist beispielsweise die Wartezeit bis zum Tod eine Zufallsvariable, die häufig mit einer Gamma-Verteilung modelliert wird.

0voto

RBarryYoung Punkte 53364

Der Standard für randomisierte Ankunftszeiten für Leistungsmodellierung ist entweder die Exponentialverteilung oder die Poisson-Verteilung (die lediglich die Verteilung mehrerer Exponentialverteilungen zusammen ist).

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