Teil 5: Erkennen von Flaschenhälsen und Problemen

.Net-Anwendungen für Multi-Core optimieren

Schlechte Thread Performance

Trotz einer Aufsplittung des Codes in mehrere Threads ist das natürlich kein Garant für eine optimal funktionierende Applikation. Im schlimmsten Fall kann es sogar passieren, dass die Applikation durch die Verteilung auf mehrere Threads langsamer wird, als wenn sie als single-threaded Applikation auf nur einem CPU-Kern ausgeführt würde.

Eine der Ursachen für nicht optimal austarierten Code sind ungünstige Locking-Verfahren. Wenn die Lock-Klammern um den Code zu eng gesetzt sind, zieht dies einen massiven Verwaltungsaufwand nach sich, denn die Locks müssen angefordert und wieder frei gegeben werden. Sind die Lock-Abschnitte dagegen zu groß gewählt, so werden andere Threads unnötig blockiert und die Parallelverarbeitung damit gesenkt.

Ein zu großzügiger Gebrauch von „shared Data“ sorgt dafür, dass viel Aufwand zur Synchronisation und der Abstimmung des Zugriffs getrieben werden muss.

Die generelle Verteilung der Last auf die unterschiedlichen Cores ist ebenso von entscheidendem Einfluss. Ist die Rechenlast nicht gleichmäßig auf alle CPU-Cores verteilt, so wird ein Core überlastet, ein anderer jedoch ungenutzt sein. Eine sorgfältige Analyse der Lastsituation ist daher in jedem Fall anzuraten. Die Analyse des Lastverhaltens muss durch die Unterstützung weiterer Werkzeuge erfolgen, wie etwa dem Intel VTune Performance Analyzer.

Um die bestmögliche Skalierbarkeit von Applikationen zu erzielen, sollten Sie darauf achten, dass keine zu großen seriellen Code-Abschnitte entstehen, die eine parallele Codeausführung per se verhindern. Hierbei gilt es, den wichtigsten und am meisten verwendeten Code-Abschnitt ausfindig zu machen und zu parallelisieren. Aber auch völlig andere Ursachen, wie etwa ungenügender Durchsatz bei den Speicheroperationen können sich negativ auf die Gesamtperformanz auswirken.

Um Probleme oder Engpässe auf Mehrprozessorsystemen zu ergründen, ist eine Analyse des Laufzeitverhaltens mit Testreihen über die tatsächlichen Auswirkungen unerlässlich. Auch an dieser Stelle leisten Tools wie der Intel VTune Performance Analyzer wertvolle Hilfe.