Czy istnieje coś takiego jak „czas”, który rejestruje również operacje we / wy i procesor?


18

Mogę dość szybko monitorować czas przebiegu procesu za pomocą time:

x@y ~ $ time foo

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

Czy istnieje sposób, aby uzyskać te same dane dla operacji we / wy i wykorzystania procesora przez argument zapisane w STDOUT? Idealne timebyłoby proste polecenie lub narzędzie , w którym przekazuję argument dotyczący rzeczy, którą chcę uruchomić:

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.

Odpowiedzi:


25

spójrz na stronę podręcznika czasowego w twoim systemie, niektóre implementacje mają opcje formatowania obejmujące statystyki I / O, CPU i pamięci (-f).

Na przykład GNU time, z -vpokaże wszystkie dostępne informacje (tutaj w systemie 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

Włącz BSDs, użyj -lzamiast tego.

Zauważ, że jest to rzeczywisty /usr/bin/timeprogram, a nie słowo kluczowe, które zapewniają niektóre powłoki, bashktóre wywołujesz time pipeline.


4
zshSłowo timekluczowe można również skonfigurować (za pomocą $TIMEFMT) w celu zapewnienia tych informacji.
Stéphane Chazelas

1
Właśnie tego chciałem. Doskonały! Dziękuję również redaktorom tego postu, którzy wyjaśnili, że będziesz musiał go uruchomić, command time -v ...ponieważ bashjest to porwanie time.
John Feminella

4

Polecenie stracemoże być przydatne, możesz ograniczyć śledzenie tylko do liczby -club podzbioru wywołań systemowych,

-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.

W tej odpowiedzi używam go do zliczania liczby wywołań systemowych. Nie wiem, czy cokolwiek da ci podsumowanie podziału przepustowości, jednak strace może wygenerować dane liczbowe dla czegoś takiego jak awkpodsumowanie.


stracemoże znacznie spowolnić, dlatego warto mierzyć względne czasy różnych wywołań systemowych, ale nie używałbym go jako timera ogólnego przeznaczenia. perfjest znacznie szybszy / mniej ingerujący, jeśli grasz z opcjami częstotliwości próbkowania.
Marcin
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.