Benchmarking bersicht Code-Fragmente, Programmteile oder ganze
Anwendungen werden auf bestimmte Kriterien getestet Verschiedene
Arten von Benchmarks: Mikrobenchmark, Makrobenchmark In der Regel
ist kein gutes Mittelma zu finden: Entweder testen Benchmarks
einzelne Instruktionen ganz genau oder Anwendungen und/oder Systeme
als ein ganzes.
Folie 4
Benchmarking Mikrobenchmarking Wird in der Regel benutzt um die
Geschwindigkeit einzelner Instruktionen oder Funktionen zu testen.
Eine Instruktion/Funktion wird oft auf Grund der Schnelligkeit
viele tausend mal ausgefhrt um zuverlssige Ergebnisse erhalten zu
knnen. Entspricht nicht unbedingt der Praxis. Mgliche Verflschungen
der Messergebnisse auf Grund einer ungenauen Zeitbasis beachten!
Zum Beispiel System.getMilliSeconds(): Laufzeit ca. 1/2 ms, also
muss der Benchmark mindestens 100 ms laufen um die
Messungenauigkeit nur fr das abfragen der Zeit auf unter 1% zu
drcken. (Besser: Laufzeiten von 1 s und mehr.) Laufzeit ca. 1/2 ms,
also muss der Benchmark mindestens 100 ms laufen um die
Messungenauigkeit nur fr das abfragen der Zeit auf unter 1% zu
drcken. (Besser: Laufzeiten von 1 s und mehr.) Auch liefert
System.getMilliSeconds() nicht immer ein aktuelles Ergebnis. Auf
manchen Systemen nur ein Update alle 10-50 ms! (Besonders kleinere
Mobilgerte wie Palm PCs oder Mobiltelefone.) Auch liefert
System.getMilliSeconds() nicht immer ein aktuelles Ergebnis. Auf
manchen Systemen nur ein Update alle 10-50 ms! (Besonders kleinere
Mobilgerte wie Palm PCs oder Mobiltelefone.)
Folie 5
Benchmarking Makrobenchmarking Testet in der Regel Anwendungen
als ganzes Ergebnisse sind aber auch Abhngig von Systemfaktoren:
Verfgbarer Speicher, VM, Hardware, andere Software die parallel
luft. (Fr Tests am besten Zielsystem verwenden.) Makrobenchmarks
versuchen automatisiert den Arbeitsablauf des Benutzers zu
simulieren. (Mglichst mit reellen Daten.) Laufzeit deutlich lnger
als bei Mikrobenchmark: Minuten, Stunden oder sogar Tage
blich.
Folie 6
Warum ist die Anwendung langsam? Was tunen? Was messen? Was man
nicht messen kann: Empfundene Geschwindigkeit Profiling
bersicht
Folie 7
Weil sie nicht den Erwartungen entspricht! Lsung: berprfen ob
die Erwartungen nicht evtl. zu hoch gesteckt sind. (Gerade
nicht-Techniker neigen zur bertreibung.) berprfen ob die
Erwartungen nicht evtl. zu hoch gesteckt sind. (Gerade
nicht-Techniker neigen zur bertreibung.) Vor dem optimieren ein
Soll definieren. Vor dem optimieren ein Soll definieren. Optimieren
in der richtigen Reihenfolge bis Ziel erreicht ist Optimieren in
der richtigen Reihenfolge bis Ziel erreicht ist Profiling Warum ist
die Anwendung langsam?
Folie 8
We should forget about small efficiencies, say about 97% of the
time: premature optimization is the root of all evil. Donald Knuth
Vorzeitiges oder bertriebenes optimieren macht es nur noch
schlimmer. berlegen ob Optimierung wirklich Sinn macht. Unwichtiges
zu optimieren braucht endlos viel Zeit und bringt so gut wie keine
Verbesserungen Stattdessen: Lokalisieren von Stellen an denen die
Anwendung Schwachstellen aufweist Profiling Was tunen?
Folie 9
Erster Schritt: Algorithmen (mehr dazu spter) Zweiter Schritt:
Glue Logic Engpsse (Bottlenecks) finden. Verbindungen zwischen
verschiedenen Modulen knnen die Software ausbremsen obwohl sie
einzelnen schon optimiert worden sind. Dritter Schritt: Feintuning
Nur wenn unbedingt ntig! Aufwand > Nutzen Letzte Chance:
Hardware tauschen ;-) Profiling Was tunen?
Folie 10
Lsst sich nicht unbedingt pauschal beantworten, jede Anwendung
ist anders. Immer sinnvoll: Ausfhrungsgeschwindigkeit
Ausfhrungsgeschwindigkeit Anzahl der Objekte Anzahl der Objekte
Speicherverbrauch Speicherverbrauch Anzahl Garbage Collections
Anzahl Garbage Collections Je nach Anwendung sinnvoll:
Datendurchsatz von/zur Festplatte Datendurchsatz von/zur Festplatte
Datendurchsatz im Netzwerk Datendurchsatz im Netzwerk Anzahl der
Netzwerk Pakete und/oder Anfragen Anzahl der Netzwerk Pakete
und/oder Anfragen Antwortzeit fr die bearbeitung einer Anfrage
(Server) Antwortzeit fr die bearbeitung einer Anfrage (Server) etc
etc Profiling Was messen?
Folie 11
Eine nicht zu vernachlssigende Komponente, wichtig fr alle
GUIs. Reagiert die Oberflche zu langsam macht die gesamte Anwendung
fr den Bennutzer den Eindruck langsam zu sein. Auch wichtig: Bei
lngeren Wartezeiten den Benutzer informieren. Problem: Solche
Eindrcke sind nur schwer automatisiert zu testen. Praktische Tests
mit Personen durchfhren! (Am besten mit der selben Hardware wie
spter fr den Regelbetrieb vorgesehen.) Profiling Was man nicht
messen kann: Empfundene Geschwindigkeit
Tuning Strategien Bessere Algorithmen Beste Optimierungschancen
Nicht der Code wird optimiert, sondern die Logik Fragen: Ist der
verwendete Algorithmus geeignet fr die Anforderungen der Anwendung?
Ist der verwendete Algorithmus geeignet fr die Anforderungen der
Anwendung? Gibt es eine schnellere Alternative? Gibt es eine
schnellere Alternative? Wie viel Zeitaufwand bedeutet die
Implementierung einer mglichen Alternative, und wie viel
Performanceunterschied knnte Sie bringen? Wie viel Zeitaufwand
bedeutet die Implementierung einer mglichen Alternative, und wie
viel Performanceunterschied knnte Sie bringen?
Folie 14
Bei neueren VMs kein groes Problem mehr da schnelle O(1)
Allokation Trotzdem Erzeugung von bermig vielen Objekten vermeiden
Zum Beispiel: Objektpools verwenden, nur mit unvernderlichen
Klassen arbeiten wenn sinnvoll Das Erzeugen unntig vieler Objekte,
fhrt zur erhhter Aktivitt des Garbage Collectors Tuning Strategien
Objekterzeugung
Folie 15
Bei neueren VMs kein groes Problem mehr (da schneller
Generational Garbage Collector) Das Einsammeln kurzlebiger Objekte
ist schnell Trotzdem Erzeugung von bermig vielen Objekten vermeiden
Tuning Strategien Garbage Collection
Folie 16
Methodenaufrufe erzeugen einen (wenn auch minimalen) Overhead
Durch wiederholtes Aufrufen summiert sich der Overhead jedoch Bei
neueren VMs nicht sehr relevant, da HotSpot Compiler via inlining
optimieren kann. (In der Regel sogar deutlich besser als der
Programmierer.) Aber die Mglichkeiten sind begrenzt: Rekursive
Algorithmen, zum Beispiel, lassen sich so nicht bedeutend
beschleunigen. Tuning Strategien Methodenaufrufe minimieren
Folie 17
Kleinere Codeoptimierungen lohnen sich durch HotSpot Compiler
kaum noch. Bei anderen (einfacheren) VMs weiterhin sinnvoll
Generell Ressourcen schonendes Programmieren immer sinnvoll Rules
of Optimization: Rule 1: Dont do it. Rule 2: (for experts only):
Dont do it yet. M. A. Jackson Tuning Strategien Fazit
Folie 18
Profiling Tools bersicht Unzhlige Tools verfgbar Teilweise sehr
teure, kommerzielle Tools, aber auch kostenlose oder Open Source
Tools Umfang und Funktionalitt der Software oft ziemlich hnlich Fr
diese Prsentation: Fokus auf Techniken und Tools die jederzeit zur
Verfgung stehen, sowie ein kommerzielles Tool als Beispiel
Folie 19
Profiling Tools Taskmanager
Folie 20
Manuelles Zeit messen private static final Stack
profilingStack= new Stack(); /** * Start profiling by remembering
the actual system time. * NOTE: This profiler is NOT able to handle
multithreaded usage. */ public static final void startProfiling() {
profilingStack.push( new Long(System.currentTimeMillis()) ); } /**
* Stop profiling and return elapsed time. * @return The time
elapsed since the call of startProfiling(). */ public static final
long stopProfiling() { // first, remember the stop time, to avoid
delays long stopTime= System.currentTimeMillis(); // check if there
is at least one element left on the stack if(
profilingStack.empty() ) throw new java.lang.IllegalStateException(
"The count of profiling start and stop doesn't match!" ); // get
start value long startTime=
((Long)profilingStack.pop()).longValue(); return stopTime -
startTime; } Benutzung: profiler.startProfiling(); testMethod()
long duration= profiler.stopProfiling(); System.out.println(
duration ); Ab Java 5: Genaueres Timing mittels
System.nanoTime();
Folie 21
Profiling Tools static Zhler in der Klasse zum zhlen der
Instanzen public abstract class InstanceCounter { public static int
count; public InstanceCounter() { count++; } public void finalize()
{ count--; } public class StaticTest extends InstanceCounter {
public StaticTest() { System.out.println( count ); } public static
void main(String[] args ) { new StaticTest(); }
Profiling Tools Monitoring and Management Extensions (JMX/MX
Beans) Neu ab Java 5 Bietet Schnittstelle zum abfragen und setzen
von Informationen ber die virtuelle Maschine zur Laufzeit. Offene
APIs: Java Management Extensions (JSR-003) und JMX Remote API
(JSR-160) Monitoring Lokal oder Remote (+ Verschlsselung)
Management Tool(s) direkt bei JDK dabei Via Beans in eigene
Anwendung integrierbar Erweiterbar
Bcher und Artikel Schreiber, Hendrik: Performant Java
Programmieren; Addison-Wesley, 1. Auflage, 2002 (Deutsch) Shirazi,
Jack: Java Performance Tuning; OReilly, First edition, September
2000 (Englisch) So wie unzhlige Artikel im Internet (Qualitt und
Belegbarkeit oft fraglich)
Folie 38
Vielen Dank fr Ihre Aufmerksamkeit ! Aufmerksamkeit !