GNU/Linux >> Linux Esercitazione >  >> Linux

Il comando `time` di UNIX è sufficientemente accurato per i benchmark?

Al giorno d'oggi, imo, non c'è motivo di usare time a scopo di benchmarking. Usa perf stat invece. Ti dà informazioni molto più utili e può ripetere il processo di benchmarking un dato numero di volte e fare statistiche sui risultati, cioè calcolare la varianza e il valore medio. Questo è molto più affidabile e altrettanto semplice da usare di time :

perf stat -r 10 -d <your app and arguments>

Il -r 10 eseguirà la tua app 10 volte e farà statistiche su di essa. -d genera altri dati, come cache miss.

Quindi, mentre time potrebbe essere abbastanza affidabile per applicazioni di lunga durata, sicuramente non è affidabile come perf stat . Usa quello invece.

Appendice: Se vuoi davvero continuare a usare time , almeno non usare il comando bash-builtin, ma il vero affare in modalità dettagliata:

/usr/bin/time -v <some command with arguments>

L'output è quindi, ad esempio:

    Command being timed: "ls"
    User time (seconds): 0.00
    System time (seconds): 0.00
    Percent of CPU this job got: 0%
    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): 1968
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 0
    Minor (reclaiming a frame) page faults: 93
    Voluntary context switches: 1
    Involuntary context switches: 2
    Swaps: 0
    File system inputs: 8
    File system outputs: 0
    Socket messages sent: 0
    Socket messages received: 0
    Signals delivered: 0
    Page size (bytes): 4096
    Exit status: 0

Si noti in particolare come questo sia in grado di misurare il picco RSS, che spesso è sufficiente se si desidera confrontare l'effetto di una patch sul consumo massimo di memoria. Cioè. usa quel valore per confrontare prima/dopo e se c'è una diminuzione significativa del picco RSS, allora hai fatto qualcosa di giusto.


time produce tempi abbastanza buoni per i benchmark che durano più di un secondo altrimenti il ​​tempo impiegato exec() ing di un processo può essere grande rispetto al suo tempo di esecuzione.

Tuttavia, durante il benchmarking dovresti fare attenzione al cambio di contesto. Cioè, un altro processo potrebbe utilizzare la CPU contendendo così la CPU con il tuo benchmark e aumentandone il tempo di esecuzione. Per evitare conflitti con altri processi, dovresti eseguire un benchmark come questo:

sudo chrt -f 99 /usr/bin/time --verbose <benchmark>

Oppure

sudo chrt -f 99 perf stat -ddd <benchmark>

sudo chrt -f 99 esegue il tuo benchmark nella classe FIFO in tempo reale con priorità 99, che rende il tuo processo il processo con la massima priorità ed evita il cambio di contesto (puoi cambiare il tuo /etc/security/limits.conf in modo che non richieda un processo privilegiato per utilizzare le priorità in tempo reale).

Rende anche time riporta tutte le statistiche disponibili, incluso il numero di cambi di contesto sostenuti dal tuo benchmark, che normalmente dovrebbe essere 0, altrimenti potresti voler eseguire nuovamente il benchmark.

perf stat -ddd è ancora più informativo di /usr/bin/time e visualizza informazioni come istruzioni per ciclo, fallimenti di branch e cache, ecc.

Ed è meglio disabilitare il ridimensionamento e l'aumento della frequenza della CPU, in modo che la frequenza della CPU rimanga costante durante il benchmark per ottenere risultati coerenti.


Linux
  1. Pianifica un'attività con il comando Linux at

  2. Una guida al terminale Linux per principianti

  3. Nala:un frontend più carino per il comando APT

  4. Trova il tempo di esecuzione di un comando o di un processo in Linux

  5. Tenere traccia del tempo impiegato da un comando in UNIX/LINUX?

Tracciare il tempo con Timewarrior alla riga di comando

Trucchi di formattazione per il comando data di Linux

Come modificare il limite di tempo per una sessione di sudo

Una guida pratica per il comando chroot in Linux

Comprendere il comando dell'ora in Linux

Pratici comandi Tee Linux e Unix per l'amministratore Linux