2 Stimmen

Vor- und Nachteile der statischen und dynamischen Instrumentierung

Es gibt viele statische und dynamische Instrumentierungswerkzeuge. Soot ist ein statisches Instrumentierungswerkzeug für Java-Bytecode. Pin und Valgrind sind dynamische Instrumentierungswerkzeuge für Binärdateien.

Was sind die Vor- und Nachteile von statischen und dynamischen Messinstrumenten? Meiner Meinung nach sind statische Instrumentierungswerkzeuge besser in Bezug auf die Laufzeitleistung, während dynamische Werkzeuge leistungsfähiger sind. Bitte vergleichen Sie sie in Bezug auf ihre Fähigkeiten und Leistung.

Außerdem, was ist der Unterschied mit Instrumentierung Tools aus dem Schreiben LLVM passieren?

3voto

gon1332 Punkte 1780

Der Vorteil der statischen Instrumentierung besteht darin, dass die Analyse nicht von der Eingabe abhängig ist. Die Analyse erfolgt am Originalcode und umfasst alle Pfade des Codes. Vollständige Abdeckung. Bei dieser Art der Instrumentierung wird die ausführbare Binärdatei in der Regel neu geschrieben, ohne dass zur Laufzeit ein weiterer Prozess erforderlich ist. Das bedeutet auch, dass der Code schnell ausgeführt wird, wobei der einzige Overhead durch den injizierten Code entsteht. Der Nachteil der statischen Instrumentierung ist die nicht detaillierte Analyse, die durch das Fehlen von Laufzeitinformationen verursacht wird, und deshalb ist es manchmal sehr schwierig, Ihre Ziele zu erreichen.

Auf der anderen Seite umfasst die dynamische Instrumentierung jedes Detail und jede Information während der Laufzeit des Codes. In den meisten Fällen sind die Tools, die dynamische Instrumentierung durchführen, einfach zu schreiben. Andererseits ist es nicht möglich, eine vollständige Codeabdeckung zu erreichen, da der Ausführungspfad von den gegebenen Eingaben abhängig ist. Auch die Tatsache, dass ein externer Prozess angehängt werden muss, um den ursprünglichen Prozess zu instrumentieren, macht die Dinge langsamer.

AFAIC, LLVM Pässe sind für statische Instrumentierung verwendet, weil der Code zur Kompilierzeit erzeugt wird und ist bereits in der endgültigen Binärdatei geschrieben und sicher enthält alle Vor- und Nachteile der statischen Instrumentierung Techniken.

Abschließend lässt sich sagen, dass es darauf ankommt, was Sie brauchen. Sie sollten das richtige Werkzeug für Ihre Arbeit wählen.

2voto

Mike Dunlavey Punkte 39339

Ich gehe davon aus, dass es darum geht, Code zu finden, der viel Zeit in Anspruch nimmt und den man optimieren könnte, um diese Zeit zu sparen. Das ist ein anderes Ziel als nur die Zeitmessung von Routinen.

Ich bin skeptisch gegenüber statischen Analysatoren, denn alles hängt von der Mischung der Eingabedaten ab.

Die dynamische Instrumentierung versucht, Eigenschaften von Funktionen zu messen, wie z. B.: Eigenzeit und Gesamtzeit, absolut, durchschnittlich und in Prozent. Auch die Anzahl der Aufrufe und die Rolle der einzelnen Routinen im Aufrufdiagramm.

Dynamische Instrumentierung (a la gprof ) ist seit Jahrzehnten der De-facto-Standard, aber er ist bei weitem nicht das letzte Wort. Zum einen muss man sich darüber im Klaren sein, dass die meisten der Statistiken, die sie liefert, am eigentlichen Bedarf vorbeigehen.

Heutzutage (IMHO) brauchen Sie einen Sampling-Profiler, der den Aufrufstapel abtastet, nicht nur den Programmzähler. Er sollte Stichproben zur Wanduhrzeit und nicht nur zur CPU-Zeit nehmen. Die Stichproben müssen nicht mit hoher Frequenz gezogen werden. Er sollte das Sampling unterdrücken, wenn die Anwendung auf Benutzereingaben wartet. Es sollte Ihnen Informationen auf Zeilen- oder Anweisungsebene liefern, nicht nur auf Funktionsebene. Die wichtigste Statistik, die es Ihnen für eine Codezeile liefern sollte, ist der Prozentsatz der Stichproben, die sie enthalten, denn das ist das direkteste Maß für die Zeit, die eingespart werden kann, wenn diese Zeile optimiert wird.

Einige Profiler können dies tun, insbesondere Oprofile und RotateRight/Zoom.

1 Stimmen

Diese Antwort bezieht sich hauptsächlich auf Profiler die Ihnen detaillierte Informationen darüber geben, wo Ihr Programm seine Zeit verbringt. Profiling ist nur eine Anwendungsfall für die Instrumentierung Ihres Programms.

0 Stimmen

@Karmastan: Danke. In der Regel sind Leistungs- und Speicherprobleme die Hauptsorgen. In der Antwort hieß es, dass die Leistung das Problem ist. Ich kann mir vorstellen, dass man auch andere Arten von Fragen zur Korrektheit beantworten möchte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X