Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

Anhang A. Tipps für Entwickler

Jedes gute Programmier-Lehrbuch umfasst Probleme mit Speicherzuweisung und der Performanz spezieller Funktionen. Achten Sie bei Ihrer Entwicklung von Software auf Probleme, die den Energieverbrauch auf den Systemen, auf denen die Software läuft, erhöhen könnte. Auch wenn diese Berücksichtigungen keinen Einfluß auf jede Zeile des Codes haben, können Sie diesen in Bereichen optimieren, die häufig Flaschenhälse bei der Performanz darstellen.
Einige Techniken, die häufig problematisch sind, beinhalten:
  • das Verwenden von Threads.
  • unnötige und ineffiziente CPU-Wake-Ups. Falls Sie den Ruhezustand beenden müssen, machen Sie alles gleichzeitig (race to idle) und so schnell wie möglich.
  • unnötiges Verwenden von [f]sync().
  • unnötiges aktives Abfragen (polling) oder das Verwenden von kurzen, regelmäßigen Timeouts (stattdessen auf Ereignisse reagieren).
  • ineffektives Verwenden von Wake-Ups.
  • ineffizienter Zugriff auf Platten. Verwenden Sie große Puffer, um häufigen Zugriff auf die Platte zu vermeiden. Schreiben Sie jeweils einen großen Block.
  • ineffiziente Verwendung von Timer. Gruppieren Sie Timer über Anwendungen (oder sogar Systemen) verteilt, falls möglich.
  • exzessive I/O. Stromverbrauch oder Speichergebrauch (inklusive Speicherlecks)
  • Durchführen unnötiger Berechnungen.
Die folgenden Abschnitte untersuchen einige dieser Bereiche in größerem Detail.

A.1. Das Verwenden von Threads

Es gilt als weit verbreitet, dass die Verwendung von Threads die Performanz von Anwendungen verbessert und beschleunigt. Dies trifft aber nicht in jedem Fall zu.
Python

Python verwendet Global Lock Interpreter[1], so dass Threading nur für größere I/O-Operationen profitabel ist. Unladen-swallow [2] ist eine schnellere Python-Implementierung, mit der Sie ggf. Ihren Code optimieren können.

Perl

Perl-Threads wurden ursprünglich für Systeme ohne Forking geschaffen (wie beispielsweise Systeme mit 32-Bit Windows-Betriebssystemen). Bei Perl-Threads werden Daten für jeden einzelnen Thread kopiert (Copy On Write). Daten werden standardmäßig nicht gemeinsam genutzt, da Benutzer in der Lage sein sollten, das Level an Daten-Sharing zu bestimmen. Das Modul threads::shared muss für Daten-Sharing eingebunden sein. Daten werden jedoch nicht nur dann kopiert (Copy On Write), sondern das Modul erstellt auch eng verknüpfte Variablen für die Daten, was noch mehr Zeit kostet und noch langsamer ist [3].

C

C-Threads nutzen den Speicher gemeinsam, jeder Thread besitzt seinen eigenen Stapel (stack) und der Kernel muss keine neuen Dateideskriptoren erstellen und neuen Speicherplatz zuweisen. C kann wirklich die Unterstützung von mehreren CPUs für mehrere Threads nutzen. Um daher die Performanz Ihrer Threads zu maximieren, verwenden Sie eine höhere Sprache wie C oder C++. Falls Sie eine Skripting-Sprache verwenden, ziehen Sie das Schreiben eines C-Bindings in Betracht. Benutzen Sie Profilers zur Identifizierung von schlecht funktionierenden Teilen in Ihrem Code [4].