Leistungsoptimierung bezeichnet die Verbesserung der Systemleistung . In Computersystemen wird die Motivation für solche Maßnahmen typischerweise als Leistungsproblem bezeichnet, das entweder real oder vorhersehbar sein kann. Die meisten Systeme reagieren auf erhöhte Last mit einem gewissen Leistungsabfall. Die Fähigkeit eines Systems, höhere Lasten zu bewältigen, wird als Skalierbarkeit bezeichnet , und die Modifizierung eines Systems zur Bewältigung höherer Lasten ist gleichbedeutend mit Leistungsoptimierung.
Systematisches Stimmen erfolgt in folgenden Schritten:
- Beurteilen Sie das Problem und legen Sie numerische Werte fest, die akzeptables Verhalten kategorisieren.
- Messen Sie die Leistungsfähigkeit des Systems vor der Modifizierung.
- Identifizieren Sie den Teil des Systems, der für die Leistungsverbesserung entscheidend ist. Dies wird als Engpass bezeichnet .
- Ändern Sie diesen Teil des Systems, um den Engpass zu beseitigen.
- Messen Sie die Leistungsfähigkeit des Systems nach der Modifizierung.
- Verbessert die Änderung die Leistung, übernehmen Sie sie. Verschlechtert sie die Leistung, stellen Sie den vorherigen Zustand wieder her.
Dies ist ein Beispiel für den Mess-, Bewertungs-, Verbesserungs- und Lernzyklus aus der Qualitätssicherung .
Ein Leistungsproblem kann sich durch langsame oder nicht reagierende Systeme äußern. Dies tritt üblicherweise aufgrund einer hohen Systemauslastung auf , die dazu führt, dass ein Teil des Systems an seine Reaktionsgrenzen stößt. Diese Grenze innerhalb des Systems wird als Flaschenhals bezeichnet.
Zur Leistungsverbesserung werden verschiedene Techniken eingesetzt. Dazu gehören Codeoptimierung, Lastverteilung, Caching-Strategien, verteiltes Rechnen und Selbstoptimierung.
Leistungsanalyse
- Den Hauptartikel finden Sie unter Leistungsanalyse.
Die Leistungsanalyse, auch Profiling genannt, untersucht das Verhalten eines Programms anhand von Informationen, die während der Programmausführung erfasst werden. Ihr Ziel ist es, die zu optimierenden Programmteile zu identifizieren.
Ein Profiler ist ein Werkzeug zur Leistungsanalyse, das das Verhalten eines Programms während der Ausführung misst, insbesondere die Häufigkeit und Dauer von Funktionsaufrufen. Werkzeuge zur Leistungsanalyse existieren mindestens seit den frühen 1970er Jahren. Profiler lassen sich nach ihren Ausgabetypen oder ihren Datenerfassungsmethoden klassifizieren.
Leistungstechnik
- Den Hauptartikel finden Sie unter Leistungstechnik.
Performance Engineering ist die Disziplin, die Rollen, Fähigkeiten, Aktivitäten, Praktiken, Werkzeuge und Ergebnisse umfasst, die dazu dienen, die nicht-funktionalen Anforderungen eines entworfenen Systems zu erfüllen, wie z. B. die Steigerung des Geschäftsumsatzes, die Reduzierung von Systemausfällen, die Vermeidung von Projektverzögerungen und die Vermeidung unnötiger Nutzung von Ressourcen oder Arbeit.
In verschiedenen Methodiken wurden mehrere gemeinsame Aktivitäten identifiziert:
- Identifizierung kritischer Geschäftsprozesse .
- Ausarbeitung der Prozesse in Anwendungsfällen und Systemvolumetrie.
- Systemaufbau, einschließlich Leistungsoptimierung.
- Einsatz des konstruierten Systems.
- Servicemanagement, einschließlich der Aktivitäten, die nach der Bereitstellung des Systems durchgeführt werden.
Codeoptimierung
- Den Hauptartikel finden Sie unter Optimierung (Informatik) .
Zu den Optimierungen gehören beispielsweise die Verbesserung des Codes, sodass die Arbeit einmal vor einer Schleife und nicht innerhalb einer Schleife erledigt wird, oder das Ersetzen eines Aufrufs eines einfachen Selection Sort durch einen Aufruf des komplizierteren Quicksort- Algorithmus .
Konfigurationsoptimierung
Moderne Softwaresysteme, z. B. Big-Data-Systeme, bestehen aus mehreren Frameworks (z. B. Apache Storm, Spark, Hadoop). Jedes dieser Frameworks bietet Hunderte von Konfigurationsparametern, die die Leistung solcher Anwendungen erheblich beeinflussen. Zu den Optimierungen (Tuning) gehört die Verbesserung der Anwendungsleistung durch die Ermittlung der optimalen Konfiguration.
Caching-Strategie
Caching ist eine grundlegende Methode zur Beseitigung von Leistungsengpässen, die durch langsamen Datenzugriff entstehen. Durch das Speichern häufig verwendeter Informationen im Hochgeschwindigkeitsspeicher wird die Leistung verbessert, wodurch Zugriffszeiten verkürzt und wiederholte Berechnungen vermieden werden. Caching ist besonders effektiv, wenn das Prinzip der Datenlokalität gilt. Die Methoden, mit denen bestimmt wird, welche Daten in einem zunehmend schnelleren Speicher abgelegt werden, werden zusammenfassend als Caching-Strategien bezeichnet. Beispiele hierfür sind der ASP.NET-Cache und der CPU-Cache .
Lastverteilung
Ein System kann aus unabhängigen Komponenten bestehen, die jeweils Anfragen bearbeiten können. Werden alle Anfragen von einem dieser Systeme (oder wenigen) bearbeitet, während andere ungenutzt bleiben, geht Zeit durch das Warten auf die Verfügbarkeit des benötigten Systems verloren. Die gleichmäßige Auslastung aller Systeme wird als Lastverteilung bezeichnet und kann die Gesamtleistung verbessern.
Lastverteilung wird häufig eingesetzt, um weitere Vorteile aus einem verteilten System zu erzielen, indem intelligent ausgewählt wird, auf welcher Maschine eine Operation ausgeführt werden soll. Dabei wird berücksichtigt, wie ausgelastet alle potenziellen Kandidaten sind und wie gut jede Maschine für die Art der auszuführenden Operation geeignet ist.
Verteiltes Rechnen
Da verteiltes Rechnen die Möglichkeiten der parallelen Ausführung auf modernen CPU-Architekturen kontinuierlich erweitert, ist der Einsatz verteilter Systeme unerlässlich, um die Leistungsvorteile der verfügbaren Parallelität zu nutzen . Hochleistungs- Cluster-Computing ist ein bekanntes Anwendungsbeispiel für verteilte Systeme zur Leistungssteigerung.
Verteilte Systeme und Clustering können die Latenz negativ beeinflussen und gleichzeitig die Last auf gemeinsam genutzte Ressourcen wie Datenbanksysteme erhöhen. Um die Latenz zu minimieren und Engpässe zu vermeiden, kann die verteilte Datenverarbeitung erheblich von verteilten Caches profitieren .
Selbstoptimierung
Ein selbstoptimierendes System ist in der Lage, seine internen Betriebsparameter zu optimieren, um die Erfüllung einer Zielfunktion zu maximieren oder zu minimieren ; typischerweise die Maximierung der Effizienz oder die Minimierung des Fehlers . Selbstoptimierende Systeme weisen typischerweise eine nichtlineare adaptive Regelung auf . Sie sind seit Jahrzehnten ein Markenzeichen der Luft- und Raumfahrtindustrie, da diese Art der Rückkopplung notwendig ist, um eine optimale Mehrgrößenregelung für nichtlineare Prozesse zu erzeugen.
Engpässe
Der Engpass ist der Teil eines Systems, der seine Kapazitätsgrenze erreicht hat. Andere Teile des Systems warten im Leerlauf darauf, dass er seine Aufgabe erledigt.
Bei der Suche und Beseitigung von Engpässen ist es wichtig, deren Existenz – typischerweise durch Messungen – nachzuweisen, bevor man Maßnahmen zu ihrer Beseitigung ergreift. Die Versuchung, einfach zu raten , ist groß . Doch Vermutungen sind oft falsch.