41

Piszę mały program w C, i chcę zmierzyć jego wydajność.najprostsze narzędzie do pomiaru czasu c/chu pamięci podręcznej programu C i czasu procesora w systemie Linux?

Chcę sprawdzić, ile czasu upływa w procesorze i ile trafień + braków w pamięci podręcznej zostało wykonane. Informacje na temat przełączników kontekstu i użycia pamięci również byłyby przyjemne.

Wykonanie programu zajmuje mniej niż sekundę.

Podobają mi się informacje o/proc/[pid]/stat, ale nie wiem jak to zobaczyć po śmierci programu/śmierci.

Wszelkie pomysły?

EDYCJA: Myślę, że Valgrind dodaje wiele kosztów ogólnych. Dlatego chciałem proste narzędzie, takie jak/proc/[pid]/stat, które zawsze jest dostępne.

+0

Szukasz czegoś takiego? http://software.intel.com/en-us/articles/intel-performance-counter-monitor/ – harold

Odpowiedz

66

Zastosowanie perf:

perf stat ./yourapp 

Zobacz kernel wiki perf tutorial szczegóły. Wykorzystuje to liczniki wydajności sprzętowej procesora, więc narzut jest bardzo mały.

Przykład z wiki:

perf stat -B dd if=/dev/zero of=/dev/null count=1000000 

Performance counter stats for 'dd if=/dev/zero of=/dev/null count=1000000': 

     5,099 cache-misses    #  0.005 M/sec (scaled from 66.58%) 
     235,384 cache-references   #  0.246 M/sec (scaled from 66.56%) 
    9,281,660 branch-misses   #  3.858 %  (scaled from 33.50%) 
    240,609,766 branches     # 251.559 M/sec (scaled from 33.66%) 
1,403,561,257 instructions    #  0.679 IPC (scaled from 50.23%) 
2,066,201,729 cycles     # 2160.227 M/sec (scaled from 66.67%) 
      217 page-faults    #  0.000 M/sec 
      3 CPU-migrations   #  0.000 M/sec 
      83 context-switches   #  0.000 M/sec 
    956.474238 task-clock-msecs   #  0.999 CPUs 

    0.957617512 seconds time elapsed 

Nie trzeba ręcznie załadować moduł jądra, na nowoczesnym systemie Debian (z pakietu linux-zasadowej) należy po prostu działać. Dzięki zestawowi "perf record -a"/"perf report" możesz także wykonać pełne profilowanie systemu. Każda aplikacja lub biblioteka z symbolami debugowania pojawi się wraz ze szczegółami w raporcie. W przypadku wizualizacji wydaje się, że flame graphs działa dobrze.

7

Najlepsze narzędzie dla Ciebie nazywa się valgrind. Jest w stanie profilować pamięć, budować call-graph i wiele więcej.

sudo apt get install valgrind 
valgrind ./yourapp 

Jednak, aby uzyskać czas program wykonywany, można użyć narzędzia time(8) Linux.

time ./yourapp 
+0

może valgrind zmierzyć pamięć podręczną lub tylko pamięć główną? – jperelli

+1

o ile mi wiadomo, valgrind może mierzyć wszystkie poziomy pamięci podręcznej, co najmniej L1 i L2. – iehrlich

+3

Istnieje moduł Valgrind o nazwie cachegrind, który mierzy pamięć podręczną. –

10

Można również użyć

/usr/bin/time -v YourProgram.exe 

To pokaże wam wszystkie te informacje:

/usr/bin/time -v ls 
    Command being timed: "ls" 
    User time (seconds): 0.00 
    System time (seconds): 0.00 
    Percent of CPU this job got: 60% 
    Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00 
    Average shared text size (kbytes): 0 
    Average unshared data size (kbytes): 0 
    Average stack size (kbytes): 0 
    Average total size (kbytes): 0 
    Maximum resident set size (kbytes): 4080 
    Average resident set size (kbytes): 0 
    Major (requiring I/O) page faults: 0 
    Minor (reclaiming a frame) page faults: 314 
    Voluntary context switches: 1 
    Involuntary context switches: 1 
    Swaps: 0 
    File system inputs: 0 
    File system outputs: 0 
    Socket messages sent: 0 
    Socket messages received: 0 
    Signals delivered: 0 
    Page size (bytes): 4096 
    Exit status: 0 

Można także użyć opcji -f formatować dane wyjściowe do swoich potrzeb.

Proszę, upewnij się, aby zadzwonić za pomocą tego programu jest pełna ścieżka, otherway wywoła komendę „czas”, a nie to, co trzeba ...

nadzieję, że to pomaga!

+7

Warto zauważyć, że '/ usr/bin/time! = Time'. W bash 'time' jest wbudowanym słowem kluczowym powłoki. – jperelli

+9

Ale gdzie jest brak pamięci podręcznej? –

+3

Odpowiedź nie ma nic wspólnego z chybieniami w pamięci podręcznej. –

Powiązane problemy