Frage

Ich habe einen Rahmen entwickelt, die von mehreren Teams in unserer Organisation verwendet wird. Diese „Module“, oben auf diesem Rahmen entwickelt, kann ganz anders verhalten, aber sie sind alle ziemlich Ressourcen verbrauchen, obwohl manche mehr als andere. Sie empfangen alle Daten in der Eingabe, analysieren und / oder transformieren, und senden Sie es weiter.

Wir planten neue Hardware zu kaufen und mein Chef hat mich gebeten, eine Benchmark auf den Modulen beruht, um zu definieren und zu implementieren, die verschiedenen Angebote vergleichen wir haben.

ist meine Idee, einfach nacheinander jedes Modul mit einer gut gewählten Reihe von Daten als Eingabe zu beginnen.

Haben Sie einen Rat? Irgendwelche Hinweise zu diesem einfachen Verfahren?

War es hilfreich?

Lösung

Ihre Frage ziemlich breit ist, so leider meine Antwort nicht sehr spezifisch entweder.

Als erstes Benchmarking ist hart. unterschätzen den Aufwand nicht nötig zu erzeugen, sinnvolle, reproduzierbare, hochVertrauen Ergebnisse.

Zweitens, was ist Ihr Leistungsziel? Ist es Durchsatz (Transaktion oder Operationen pro Sekunde)? Ist Latenz es (Zeit es braucht, um eine Transaktion ausführen)? Haben Sie über durchschnittliche Leistung kümmern? Ich kümmere mich um Worst-Case-Leistung? Haben Sie Sorge, über die absolute schlimmsten Fall oder ist mir egal, dass 90%, 95% oder eine andere Perzentile angemessene Leistung erhalten?

Je nachdem, welches Ziel Sie haben, dann sollten Sie entwerfen Sie Ihre Benchmark gegen dieses Ziel zu messen. Also, wenn Sie Interesse an Durchsatz sind, möchten Sie wahrscheinlich Nachrichten / Transaktionen / Eingang in Ihr System mit einer vorgeschriebenen Geschwindigkeit und sehen Sie senden, wenn das System hochgefahren wird, zu halten.

Wenn Sie in Latenz interessiert sind, würden Sie Nachrichten / Transaktionen / Eingang senden und messen, wie lange es dauert, jeden zu verarbeiten.

Wenn Sie sich für Worst-Case-Leistung sind, werden Sie Last auf das System bis addieren, was Sie betrachten „realistisch“ (oder was auch immer das System-Design sagt sollte es unterstützen.)

Zweitens, sagen Sie nicht, wenn diese Module CPU gebunden sein werden, I / O gebunden, wenn sie die Vorteile von mehreren CPUs / Cores nehmen, usw. Wenn Sie verschiedene Hardware-Lösungen zu bewerten versuchen Sie, dass finden Ihre Anwendung profitiert mehr von einem großen I / O-Subsystem gegen eine große Anzahl von CPUs.

Drittens, die beste Benchmark (und das härteste) ist realistisch Last in das System zu bringen. Das heißt, Sie Daten aus einer Produktionsumgebung, und setzen Sie die neue Hardware-Lösung durch diese Daten. Erste dies geschehen ist schwieriger als es klingt, oft bedeutet dies, alle Arten von Messpunkten in dem System hinzugefügt, um zu sehen, wie es sich verhält (wenn man sie nicht bereits hat,) zur Änderung des bestehenden Systems Aufzeichnung / Wiedergabe-Funktionen hinzuzufügen, die modifizierende Wiedergabe mit unterschiedlichen Geschwindigkeiten laufen, und immer ein realistisches (dh ähnlich wie Produktion) -Umgebung für den Test.

Andere Tipps

Der bedeutendste Maßstab zu messen, wie Sie Ihr Code unter dem täglichen Gebrauch führt. Das werden Sie natürlich bieten die realistischste Zahlen.

Wählen Sie mehrere realen Datensätzen und setzen sie durch die gleichen Prozesse Ihre org jeden Tag verwendet. Für zusätzliche Kredite, mit den Leuten reden, die Ihren Rahmen verwenden und sie bitten, einige „Best-Case“ zu schaffen, „normal“ und „worst-case“ -Daten. Anonymisieren die Daten, wenn es Bedenken hinsichtlich der Privatsphäre sind, aber versuchen Sie nicht, etwas zu ändern, die Leistung beeinträchtigen könnten.

Beachten Sie, dass Sie das Benchmarking und den Vergleich von zwei Sätzen von Hardware, nicht dem Rahmen. Behandeln Sie die gesamte Software als Blackbox und einfach messen die Hardware-Leistung.

Schließlich betrachten die Datensätze speichern und mit ihnen zu bewerten, in ähnlicher Weise jede spätere Änderungen an der Software zu machen.

Wenn Sie System sind angeblich der Lage sein, mehrere Clients alle gleichzeitig telefonieren zu handhaben, dann sollten Sie Ihre Benchmark dies widerspiegeln. Beachten Sie, dass einige Anrufe nicht gut zusammen spielen. Zum Beispiel, mit 25 Themen erstellen die gleiche Menge an Informationen zur gleichen Zeit zu Sperren auf dem Server Ende führen könnte, damit Ihre Ergebnisse verfälscht hat.

Von einer Muttern-und Schrauben-Sicht habe ich verwendet, Perl und sein Benchmark-Modul , um die Informationen, die ich sammeln kümmern.

Wenn Sie vergleichen unterschiedliche Hardware, dann die Messung der Kosten pro Transaktion geben Ihnen einen guten Vergleich der Abwägungen von Hardware für die Leistung. Eine Konfiguration kann Ihnen die beste Leistung, aber zu viel kostet. Eine weniger teure Konfiguration können Sie auf eine ausreichende Leistung.

Es ist wichtig, den „worst case“ oder „Spitzenstunde“ der Last zu emulieren. Es ist auch wichtig, mit „typischem“ Volumes zu testen. Es ist ein Balanceakt gute Serverauslastung zu bekommen, die nicht zu viel kostet, dass die erforderliche Leistung.

Test über Hardware-Konfigurationen wird schnell teuer. Eine weitere sinnvolle Option ist es, erste Maßnahme auf der Konfiguration, die Sie haben, dann simulieren, dass das Verhalten in virtuellen Systemen ein Modell verwendet wird.

Wenn Sie können, versuchen einige Operationen Benutzer (oder Prozesse) zur Aufzeichnung mit Rahmen machen, idealerweise einen Klon des realen Systems. Das gibt Ihnen die realistischste Daten. Dinge zu beachten:

  1. Welche Funktionen werden am häufigsten verwendet?
  2. Wie viele Daten übertragen?
  3. Sie nichts annehmen. Wenn Sie denken, „das geht schnell / langsam sein“, setzen Sie sich nicht darauf. In 9 von 10 Fällen, dann irren Sie sich.
Erstellen

einen Top-Ten für 1 + 2 und Arbeit aus, dass.

Das heißt:. Wenn Sie alte Hardware mit neuer Hardware zu ersetzen, können Sie rund 10% schnellere Ausführung für jedes Jahr erwarten, die vergangen ist, seit Sie den ersten Satz gekauft (wenn die Systeme sonst ziemlich gleich sind)

Wenn Sie ein spezielles System haben, können die Zahlen ganz anders sein, aber in der Regel, neue Hardware ändert sich nicht viel. Zum Beispiel kann einen nützlichen Index zu einer Datenbank hinzugefügt reduziert die Laufzeit einer Abfrage von zwei Stunden auf zwei Sekunden. Hardware werden Sie nie geben.

Wie ich es sehe, gibt es zwei Arten von Benchmarks, wenn es um Benchmarking-Software. Zuerst Microbenchmarks, wenn Sie versuchen, ein Stück Code in Isolation oder wie ein System befasst sich mit eng definierten Arbeitsbelastung zu bewerten. Vergleichen Sie zwei Sortieralgorithmen in Java geschrieben. Vergleichen Sie zwei Web-Browser, wie schnell jeder eine DOM-Manipulation Operation durchführen. Zweitens gibt es System-Benchmarks (ich habe nur den Namen nach oben), wenn Sie versuchen, ein Software-System unter realistischen Arbeitsbelastung zu bewerten. Vergleichen Sie meinen Python basierte Backend läuft auf Google Compute Engine und auf Amazon AWS.

Wenn Sie mit Java und dergleichen zu tun, denken Sie daran, dass die VM aufwärmen muss, bevor es Sie realistische Performance geben kann. Wenn Sie Zeit mit dem time Befehl messen, wird die JVM Startzeit aufgenommen werden. Sie wollen fast immer entweder die Startzeit ignorieren oder sie zu verfolgen getrennt.

Microbenchmarking

Während des ersten Durchlauf CPU-Caches werden immer mit den notwendigen Daten gefüllt. Das gleiche gilt für Platten-Caches. Während wenigen nachfolgenden Läufen geht die VM bis erwärmen, was bedeutet, JIT kompiliert, was sie nützlich erachtet zu kompilieren. Sie wollen diese Läufe ignorieren und beginnen danach zu messen.

eine Menge Messungen Stellen und Statistiken berechnen. Mittelwert, Median, Standardabweichung, Grundstück ein Diagramm. Sehen Sie es und sehen, wie viel sie sich ändert. Dinge, die das Ergebnis enthalten GC Pausen in der VM, Frequenzskalierung auf der CPU (wie Virenscan) beginnen kann, ein anderer Prozess einige Hintergrundaufgabe beeinflussen können, O entscheiden kann den Prozess auf einem anderen CPU-Kern bewegen, wenn Sie ein href < = "https://access.redhat.com/solutions/48756" rel = "nofollow"> haben NUMA Architektur, würden die Ergebnisse noch deutlicher.

Bei Microbenchmarks, all dies ist ein Problem. Töten, welche Prozesse Sie können, bevor Sie beginnen. Verwenden Sie eine Benchmark-Bibliothek, die einen Teil davon für Sie tun können. Wie https://github.com/google/caliper und dergleichen mehr.

System Benchmarking

Bei einem System unter realistischer Arbeitsbelastung Benchmarking, diese Details wirklich nicht interessieren Sie und Ihr Problem ist „nur“ zu wissen, was eine realistische Arbeitsbelastung ist, wie es zu erzeugen und welche Daten zu sammeln. Es ist immer am besten, wenn Sie können Instrument ein Produktionssystem und Daten dort sammeln. Sie tun können, in der Regel, dass, weil Sie Endbenutzers Eigenschaften messen (wie lange hat eine Web-Seite machen) und dies sind I / O gebunden, so dass die Codedatenerfassung nicht verlangsamt das System. (Die Seite für den Benutzer ausgeliefert werden muss, über das Netzwerk, spielt es keine Rolle, ob wir auch ein paar Zahlen in den Prozess log).

Denken Sie an den Unterschied zwischen Profilierung und Benchmarking. Benchmarking können Sie absolute Zeit geben, etwas damit verbracht,, Profilieren Sie relative Zeit gibt etwas damit verbracht, im Vergleich zu allem anderen, was zu tun brauchte. Dies liegt daran, Profilometer laufen stark instrumentierten Programme (gängige Technik ist Stop-the-world alle paar hundert ms und eine Stack-Trace speichern) und die Instrumentierung verlangsamt alles deutlich nach.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top