Left Up Experimente mit perf

Versuch mit perf record/perf report

Ziel ist es nun, aus einem größerem Programm die interessanten Stellen herauszufinden

mattestv2 ist nun ein Programm, welches nun in einer Schleife eine grosse Matrix sowohl zeilenweise als auch spaltenweise beschreibt, und zwischendurch noch eine Berechnung macht.

Analyse: perf record -e cycles:u,cache-references:u,cache-misses:u -F 1000 ./mattestv2

wobei

ist.

Bemerkung: bei Option -F braucht der Kern einen externen Zeitgeber, der mit dem APIC zusammenhängt. Der Kern muss mit CONFIG_X86_UP_APIC und mit CONFIG_X86_LOCAL_APIC (???) gebaut sein, und lapic in der Boot-Zeile des Kerns (z.B. in GRUB) angegeben sein.

perf record liefert dann:

# Events: 69  cycles
#
# Overhead  Command      Shared Object               Symbol
# ........  .......  .................  ...................
#
    99.36%  mattest  mattest            [.] spaltenweise()
     0.49%  mattest  ld-2.11.3.so       [.] _dl_relocate_object
     0.13%  mattest  ld-2.11.3.so       [.] _dl_map_object
     0.01%  mattest  [kernel.kallsyms]  [k] page_fault
     0.00%  mattest  ld-2.11.3.so       [.] _start


# Events: 1K cache-references
#
# Overhead  Command  Shared Object               Symbol
# ........  .......  .............  ...................
#
    87.70%  mattest  mattest        [.] spaltenweise()
    12.06%  mattest  mattest        [.] zeilenweise()
     0.22%  mattest  ld-2.11.3.so   [.] _dl_relocate_object
     0.02%  mattest  ld-2.11.3.so   [.] _dl_lookup_symbol_x
     0.00%  mattest  ld-2.11.3.so   [.] do_lookup_x


# Events: 1K cache-misses
#
# Overhead  Command  Shared Object          Symbol
# ........  .......  .............  ..............
#
    99.69%  mattest  mattest        [.] spaltenweise()
     0.31%  mattest  mattest        [.] zeilenweise()


#
# (For a higher level overview, try: perf report --sort comm,dso)
#

Damit haben wir die Funktion spaltenweise insbesondere bei cache-misses entlarvt!


Rudolf Weber Informatik- und Netzwerkverein Ravensburg e.V