Overkill (Informatik)

Aus MARJORIE-WIKI
Wechseln zu: Navigation, Suche

Bei der Entwicklung einer Hard- oder Softwarelösung bezeichnet der umgangssprachliche Begriff Overkill in der Informatik (to overkill engl. wörtlich übersetzt 'übertöten')

i.) eine zu umfangreiche (breite) Umsetzung von technisch gesichteten Anwendungsfällen, von der das Gesamtkonzept nicht profitiert, ii.) eine übermäßige (tiefe) Optimierung, die die Leistung unter strategischen Gesichtspunkten nicht (wesentlich) erhöht.

Ein eindeutiges Beispiel für einen Overkill in der Informatik ist, wenn die gleiche Aufgabe mehrfach bearbeitet wird, obwohl das Ergebnis praktisch schon vorliegt (z.B. bei Cacheemisses) Der sogenannte Overhead dabei ist die Zeit, die vergeht bis die Information dort ankommt, wo sie logisch als nächstes benötigt wird (worst case) abzüglich der informationstheoretisch mindestens erwarteten Laufzeit der Information (best case).


Im Hinblick auf Anwendungssoftware kann das Produkt mehr Funktionalität enthalten, als der Anwender im Endeffekt praktisch nutzt, nutzen kann, oder sinnvoll für den Einsatzzweck ist. Dabei spielt die Struktur, Eingabeperipherie und die Präsentation (Usability) bei dem Anwender eine entscheidende Rolle, damit es beim Erlernen nicht zur Überforderung kommt - z.B. durch zu viele Optionen, Konfigurationsmöglichkeiten, oder Methoden eine Aufgabe auf unterschiedliche Art und Weise zu bearbeiten - sondern leicht zugänglich ist. Eine gute Grunddokumentation mit Einstiegshilfen oder z.B. eine situationsabhängige Hilfefunktionen ist förderlich, um mit der Software arbeiten zu können.


Im Hinblick auf Betriebssysteme können überflüssige Erweiterungen (insbesondere Hintergrunddienste; z.B. mehrfach vorhandene Software zu Indizierung des Festplatteninhalts) für das Betriebssystem und überladene Funktionen den eigentlichen Arbeitsablauf behindern oder die Gesamtperformance des Computersystems schwächen. Dies führt hin bis zu künstlich aufgeblähter Software, die durch ihre Positionierung am Markt im Extremfall vorgibt die 'generell und universell am besten geeignete' Software für möglichst viele Zwecke gleichzeitig zu sein, oder Felder abdecken will, für die sie nicht die am besten geeignete Lösung ist (s. auch Bundleware). Bei Schadsoftware kann sie einen völlig anderen Zweck erfüllen, und bei vernetzten Computern die Datensicherheit kompromittieren.

Außerdem fällt bei bestimmten EDV Anlagen die Kommunikation der Softwarekomponenten untereinander und mit der Hardware, insgesamt unter vielen Aspekten umständlich und langwierig aus, z.B. wenn bestimmte Abläufe in einer Kette eher interpretiert werden und nicht integraler Bestandteil sind (z.B. schlecht angebundene Datenbanken, langsame Softwarestacks, Browser Erweiterungen).


Im Hinblick auf Computerarchitektur kann es z.B. ein Overkill sein, wenn eine 1000-MBit-Ethernet Schnittstelle durch die anderen an dem I/O Prozess beteiligten Komponenten (wie Festplatten, CPUs, deren Bussysteme, und die zugehörigen Softwarekomponenten wie Kernel, Treiber, Protokolle, Filesysteme,...) technisch nicht ausgelastet werden kann. Sollte die Festplatte nur 60 Mbyte/s liefern, kann die Netzwerkverbindung in einer Richtung nur ungefähr zur Hälfte ausgelastet werden. Wenn also auch nur ein Glied in der Kette langsamer ist, entsteht ein Overhead bei der Netzwerkkarte.

Eine der haupsächlich begrenzenden Faktoren bei den gebräuchlichen Architekturen ist die begrenzte Leistung des Hauptprozessors in Verbindung mit dem Hauptspeicher und den Chipsätzen, über die weitere Peripherie (z.B. USB Geräte) angebunden sind. Dies führte beispielsweise dazu, den Speichercontroller oder eine GPU in die CPU direkt zu integrieren.


Im Hinblick auf Softwareentwicklung kann z.B. ein Brute-Force Sortieralgorithmus, der alle möglichen Werte strikt der Reihe nach durchprobiert, bis der positiv-Treffer für eine weitere Iteration gefunden ist, einen gewaltigen Overhead bei der Ausführung produzieren. Der Overhead kann dann, durch eine effizientere Methode (durch weitere logische Ausschließung der nicht gewinnbringenden Fälle wie bei Bubblesort) und erst durch eine rekursive Implementation (Quicksort) wesentlich reduziert werden. Die 'simpleren' Methoden erfordern in der Regel eine hohen Speicherdurchsatz und Verarbeitungsgeschwindigkeit, was in der Regel auch mit einem höheren Energieverbrauch (s. auch TDP,...) verbunden ist.

Ein effizienter Programmierstil führt dazu, die technisch vorgesehen Funktionalität sinnvoll auszunutzen und den Nutzungsgrad falls erforderlich in alle Richtungen optimieren und ggf. portieren zu können (selbst wenn die Ergebnisse nicht direkt zielführend oder zu zeitaufwändig sind).

Um einen Overhead bei der Programmierung zu vermeiden, können - insbesondere auf Hardware naher Ebene - Überlegungen zur effizienten Codierung bei der Abbildung von Daten auf dem Stack (s. Stack-orientierte-Maschine, Daterntypen) und den unterschiedlichen Speicherbereichen, der Nutzung der Register als schnellste Speicherplätze des Prozessors, ebenso wie eine effiziente Nutzung der Maschinenbefehle (Assembler- Programmierung mit Mnemonics) und Adressierungsarten. Das zahlt sich bei häufiger Nutzung dieser 'hochoptimierten' Routinen aus, etwa bei der Entwicklung eines Compilers mit Linker-Bibliotheken (die Grundfunktionen für eine breite Front enthalten), oder bei der Generierung zeitkritischer Programmteile.

Die Laufzeiten der Routinen und die Prozessorauslastung hängen dabei u.a. von der verwendeten Prozessorarchitektur (die wiederum eine Implementation der Logik der Maschinenbefehle in Microintruktionen enthält; s. auch CISC/RISC) und der darin ggf. speziell enthaltenen Optimierungen. Diese Optimierungen sind beispielsweise 3-fach abgestufte Caches oder parallel(-isiert) arbeitenden Einheiten oder spezialisierte Befehlssätze, die softwaretechnisch auch richtig genutzt bzw. erstmal unterstützt werden wollen.

Die Integration auf Hardwareebene ('Hardwarebeschleunigung') und deren Miniaturisierung und die Verschmelzung von Aufgaben bei der Software wird zunehmend wichtiger, da die Aufgaben auch immer komplexer und nicht beliebig auf Subsysteme (Kernel an erster Stelle) aufgeteilt werden können.

Wikilinks - Wikis & Websites mit Artikeln zum Thema[Bearbeiten]

(Trage hier dein Wiki mit Link zum Artikel ein, wenn du ebenfalls einen Artikel zum Thema hast oder du diesen Artikel in dein Wiki exportiert hast)

Social Networks[Bearbeiten]

<fb:like></fb:like>

Netzwerke[Bearbeiten]

Blogs[Bearbeiten]

Twitter[Bearbeiten]

Info Sign.svg Dieser Wikipedia-Artikel wurde, gemäß GFDL, CC-by-sa mit der kompletten History importiert.