2009-01-06 3 views
5

Ich muss die Speicherzugriffe mehrerer Programme analysieren. Was ich suche, ist ein Profiler, mit dem ich sehen kann, welches meiner Programme mehr rechenintensiv und rechenintensiv ist. Ich bin sehr interessiert an der Anzahl der Zugriffe auf den L1-Daten-Cache, L2 und den Hauptspeicher.Profiling zur Analyse der Low-Level-Speicherzugriffe meines Programms

Es muss für Linux sein und wenn es nur mit Befehlsverwendung möglich ist. Die Programmiersprache ist C++. Wenn es ein Problem mit meiner Frage gibt, wie ich nicht verstehe, was Sie meinen oder wir brauchen mehr Daten, kommentieren Sie bitte unten.

Vielen Dank.

-Update mit der Lösung

ich die Antwort von Crashworks ausgewählt haben als favorisiert, da ist der einzige, der etwas zur Verfügung gestellt, was ich suchte. Aber die Frage ist noch offen, wenn Sie eine bessere Lösung kennen, antworten Sie bitte.

Antwort

1

Wenn Sie Intel-Hardware verwenden, ist VTune für Linux wahrscheinlich das beste und umfassendste Tool, das Ihnen zur Verfügung steht.

Andernfalls sind Sie möglicherweise verpflichtet, die Leistungszähler-MSRs direkt unter Verwendung der perfctr-Bibliothek zu lesen. Ich habe selbst keine Erfahrung mit Linux, aber ich habe ein paar Papiere gefunden, die Ihnen helfen könnten (vorausgesetzt, Sie sind auf x86 - wenn Sie PPC verwenden, antworten Sie bitte und ich kann detailliertere Antworten geben): http://ieeexplore.ieee.org/Xplore/login.jsp?url=/iel5/11169/35961/01704008.pdf?temp=x

Im Allgemeinen können diese Tools Ihnen nicht genau sagen, auf welchen Zeilen Ihr Cache fehlschlägt, weil sie durch das Abrufen eines Zählers arbeiten. Was Sie tun müssen, ist den "l1 cache miss" -Zähler am Anfang und am Ende jeder Funktion abzurufen, die Sie interessiert, um zu sehen, wie viele Fehler innerhalb dieser Funktion auftreten, und natürlich können Sie dies hierarchisch tun. Dies kann vereinfacht werden durch zB Erfinden einer Klasse, die den Start-Timer beim Eingeben des Bereichs aufzeichnet und das Delta beim Verlassen des Bereichs berechnet.

Der instrumentierte Modus von VTune erledigt dies automatisch für Sie im gesamten Programm. Das entsprechende AMD-Tool ist CodeAnalyst. Valgrind behauptet, ein Open-Source-Cache-Profiler zu sein, aber ich habe es nie selbst verwendet.

0

Benötigen Sie etwas mehr als der Unix-Befehl top liefert? Dies bietet CPU-Nutzung und Speichernutzung von Linux-Programmen in einem einfach zu lesenden Darstellungsformat.

Wenn Sie etwas Spezifischeres brauchen, vielleicht einen Profiler, hilft die Software-Sprache (java/C++/etc.) Festzustellen, welcher Profiler für Ihre Situation am besten ist.

2

Es ist nicht möglich, alle Zugriffe auf den Speicher zu ermitteln, da dies wenig Sinn ergibt. Ein Zugriff auf den Speicher könnte die nächste Anweisung ausführen (Programm befindet sich im Speicher), oder wenn Ihr Programm eine Variable liest oder schreibt, so greift Ihr Programm fast ständig auf .

Was könnte für Sie interessanter sein könnte folgen die Speicherauslastung Ihres Programms (sowohl Heap und Stack). In diesem Fall können Sie den Standard top Befehl verwenden.

Sie könnten auch Systemaufrufe überwachen (d. H. Auf Festplatte schreiben oder ein gemeinsam genutztes Speichersegment anhängen/zuweisen). In diesem Fall sollten Sie strace Befehl verwenden.

Eine vollständigere Kontrolle, um alles zu tun wäre Debuggen Ihres Programms mit Hilfe von gdb Debugger. Es erlaubt Ihnen, Ihr Programm zu steuern, wie zum Beispiel das Setzen von Haltepunkten auf eine Variable, so dass das Programm immer dann interrupted wird, wenn es gelesen oder geschrieben wird (vielleicht war es genau das, wonach Sie gesucht haben). Auf der anderen Seite kann GDB schwierig zu erlernen sein, also wird DDD, das ein gtk graphisches Frontend ist, Ihnen helfen, damit anzufangen.

Update: Was Sie suchen, ist wirklich Low-Level-Speicherzugriff, dass es nicht auf Benutzerebene verfügbar ist (das ist die Aufgabe des Kernels des Betriebssystems). Ich bin mir nicht sicher, ob sogar die Verwaltung des L1-Caches transparent von der CPU gehandhabt und dem Kernel verborgen wird. Was klar ist, dass Sie gehen müssen als Kernel-Ebene, so KDB, erklärte here o KDBG, erklärte here.

Update 2: Es scheint, dass Linux-Kernel CPU-Cache aber nur L1-Cache behandelt. Das Buch Understanding the Linux Virtual Memory Manager erklärt, wie die Speicherverwaltung des Linux-Kernels funktioniert. This chapter erklärt einige der Innereien der L1-Cache-Behandlung.

Verwandte Themen