Esiste qualcosa come "time" che registra anche I / O e CPU?


18

Posso monitorare abbastanza rapidamente il tempo di esecuzione di un processo con time:

x@y ~ $ time foo

real        0m14.299s
user        0m4.770s
sys         0m0.440s

Esiste un modo per ottenere gli stessi dati per l'utilizzo degli I / O e della CPU di un argomento, registrati su STDOUT? Un semplice comando o utilità come timesarebbe l'ideale, dove ho appena passato l'argomento della cosa che voglio eseguire:

x@y ~ $ stats foo

wallclock runtime     0m14.299s
I/O reads             290,420 KB
I/O writes            239,429 KB
peak CPU usage        18.62%
mean CPU usage        1.44%
# etc.

Risposte:


25

guarda la pagina man del tempo sul tuo sistema, alcune implementazioni hanno opzioni di formato che includono statistiche I / O, CPU e memoria (-f).

Ad esempio, GNU time, con -vmostrerà tutte le informazioni disponibili (qui su Linux):

/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: 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): 3664
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 273
Voluntary context switches: 2
Involuntary context switches: 2
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

Su BSDs, usa -linvece.

Nota che questo è il /usr/bin/timeprogramma attuale , non la parola chiave che alcune shell come bashforniscono con cui invochi time pipeline.


4
zshLa timeparola chiave può anche essere configurata (con $TIMEFMT) per fornire tali informazioni.
Stéphane Chazelas,

1
Questo è esattamente quello che volevo. Perfetto! Inoltre, grazie ai redattori di questo post che hanno chiarito che dovrai eseguirlo command time -v ...poiché bashè il dirottamento time.
John Feminella,

4

Il comando stracepuò essere utile, puoi limitare la traccia al conteggio -co a un sottoinsieme di chiamate di sistema,

-e trace=set
      Trace  only  the  specified set of system calls.  The -c option is
      useful for determining which  system  calls  might  be  useful  to
      trace.   For  example,  trace=open,close,read,write  means to only
      trace those four system calls.  Be careful when making  inferences
      about  the  user/kernel  boundary if only a subset of system calls
      are being monitored.  The default is trace=all.

In questa risposta , lo uso per contare il numero di chiamate di sistema. Non so se qualcosa ti fornirà un riepilogo del throughput, tuttavia lo strace può produrre le cifre per qualcosa di simile awka riassumere.


stracepuò rallentare significativamente le cose, quindi è utile misurare i tempi relativi di diverse scale di sistema, ma non lo userei come un timer per scopi generici. perfè molto più veloce / meno invadente, se si gioca con le opzioni di frequenza di campionamento.
Marcin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.