forked from jcaesar/ETI-GP-SS12-P5
-
Notifications
You must be signed in to change notification settings - Fork 0
ke-kx/ETI-GP-SS12-P5
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Quellen zum ETI Grossprojekt "Cache Simulator fuer Visualisierungen zum Cacheverhalten" Generator fuer Speicherzugriffsereignisse: McTracer =================================================== mctracer-vg370.patch ist ein Patch fuer die Original-Quellen von Valgrind 3.7.0 und enthaelt das sogenannte McTracer-Tool, welches Speicherzugriffe an einen eigenen Simulator ueber Shared-Memory weiterleiten kann (siehe SimpleSim unten). Installation ------------ Voraussetzung: * relativ neue Linux-Distribution * "gcc" (C-Compiler), "automake" installiert * Valgrind 3.7.0 Quellen (siehe www.valgrind.org), z.B. mit wget http://www.valgrind.org/downloads/valgrind-3.7.0.tar.bz2 Installation unter /home/me/mctracer (wenn man --prefix=... beim configure-Aufruf weglaesst, wird es unter /usr/local installiert, und kann dort mit "make uninstall" entfernt werden): tar xvf valgrind-3.7.0.tar.bz2 patch -p1 < mctracer-vg370.patch cd valgrind-3.7.0 sh ./autogen ./configure --prefix=/home/me/mctracer make make install Am besten /home/me/mctracer/bin zum PATH hinzufuegen: export PATH=$PATH:/home/me/mctracer/bin Als Test ist unter ../valgrind-3.7.0/mctracer ein einfaches Beispiel eines Event-Empfaengers dabei, das einfach die Speicherzugriffe auf der Standardausgabe ausgibt. Testen kann man das mit: cd valgrind-3.7.0/mctracer valgrind --tool=mctracer -v /bin/ls Die Option "-v" schaltet interne Debug-Ausgaben an. Am Ende sollte eine Ausgabe wie ==16888== --16888-- Event producer (rb 'tr_main') statistics: --16888-- total 0.520s (active 0.520s, waiting 0.000s = 0.00%) --16888-- produced 1 chunks, 0 events, 4 bytes --16888-- troughput 0.000 MEv/s, 0.000 MB/s (without waiting 0.0 MEv/s, 0.0 MB/s) ++16888++ Event consumer: statistics ++16888++ run 0.519 secs since attaching (0.519 secs waiting = 100.00%) ++16888++ consumed 1 chunks, 0 events, 4 bytes ++16888++ troughput 0.000 MEv/s, 0.000 MB/s (without waiting 0.0 MEv/s, 0.2 MB/s) stehen. Der Standardempfaenger fuer Events ist "./tr-consumer", den es in ../valgrind-3.7.0/mctracer geben sollte, und der automatisch aufgerufen wird. Wie man sieht, wird kein einziges Event uebertragen. Dies liegt daran, dass McTracer Events erst anfaengt, zu erzeugen, wenn die Funktion "main" ausgefuehrt wird. Da wir oben "/bin/ls" aufrufen, welches keine Debuginformationen enthaelt, findet McTracer auch kein "main". Um Events von Anfang an zu generieren, kann man die Funktion, ab der Events erzeugt werden, selbst angeben mit "--fnstart=<func>". Leerlassen bedeutet von Anfang an. Also: valgrind --tool=mctracer -v --fnstart= /bin/ls > log Da nun SEHR VIEL auf die Standardausgabe geschrieben wird, leitet man das besser in eine Datei "log". Als Statistik sollte folgendes etwa am Ende erscheinen: ==16915== --16915-- Event producer (rb 'tr_main') statistics: --16915-- total 0.531s (active 0.514s, waiting 0.016s = 3.15%) --16915-- produced 269 chunks, 200111 events, 2202292 bytes --16915-- troughput 0.376 MEv/s, 4.142 MB/s (without waiting 0.3 MEv/s, 4.2 MB/s) ++16915++ Event consumer: statistics ++16915++ run 0.531 secs since attaching (0.487 secs waiting = 91.83%) ++16915++ consumed 269 chunks, 200111 events, 2202292 bytes ++16915++ troughput 0.377 MEv/s, 4.149 MB/s (without waiting 4.6 MEv/s, 50.8 MB/s) D.h. jetzt waren es schon ueber 200.000 Ereignisse, die alle nun in "log" stehen. Nutzung von SimpleSim mit Code-Beispiel --------------------------------------- Dann simplesim und Code-Beispiel kompilieren: (cd simplesim; make) (cd example; make) Testen: valgrind --tool=mctracer --consumer=simplesim/simplesim example/redblack Dies weist McTracer an, als Ereignisempfaenger das Program "simplesim/simplesim" zu benutzen. Dies enthaelt einen einfachen Cache-Simulator. Es sollte etwa folgende Ausgabe kommen: ==19331== McTracer, an memory tracer tool ==19331== Copyright (C) 2002-2011, and GNU GPL'd, by NN & JW. ==19331== Using Valgrind-3.8.0.SVN and LibVEX; rerun with -h for copyright info ==19331== Command: example/redblack ==19331== Sum: 125195.582793 ==19331== Summary: Cache holding 524288 bytes (8192 lines, ass. 16, sets: 512). Misses: stores 132191 / 53276343, loads 13239578 / 209961103 Wie oben schon erwaehnt, faengt McTracer erst dann an, Speicherzugriffe weiterzuleiten, wenn die Funktion "main()" betreten wird. Damit wird mehr oder weniger das dynamische Linken der libc etc. ausgeblendet. Weitere Informationen zu SimpleSim in "simplesim/README". Achtung: Wenn an McTracer kein Prozess zum Verarbeiten der Events haengt (etwa wenn ein modifizierter simplesim abstuerzt), kann McTracer nicht mit Ctrl+C beendet werden, sondern muss mit "kill -9 <mctracerPID>" getoetet werden, etwa bei obiger Ausgabe mit "kill -9 19331" (die Zeilen, die mit ==XXXXX== beginnen, geben als XXXXX die ProcessID an). Viel Spass, Josef Weidendorfer
About
No description, website, or topics provided.
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published