Apakah ada sesuatu seperti `time` yang juga merekam I / O dan CPU?

18

Saya dapat dengan cepat memonitor waktu proses yang sedang berjalan dengan time:

x@y ~ $ time foo

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

Apakah ada cara saya bisa mendapatkan data yang sama untuk penggunaan I / O dan CPU dari argumen, yang direkam ke STDOUT? Perintah atau utilitas sederhana seperti timeideal, di mana saya hanya melewatkan argumen dari hal yang ingin saya jalankan:

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.
John Feminella
sumber

Jawaban:

25

lihat halaman manual waktu pada sistem Anda, beberapa implementasi memiliki opsi format untuk menyertakan I / O, CPU dan statistik Memory (-f).

Misalnya, GNU time, dengan -vakan menampilkan semua info yang tersedia (di sini di 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

Aktif BSDs, gunakan -lsaja.

Perhatikan bahwa ini adalah /usr/bin/timeprogram yang sebenarnya , bukan kata kunci yang bashdisediakan oleh beberapa shell yang Anda gunakan time pipeline.

MaQleod
sumber
4
zsh's timekata kunci juga dapat dikonfigurasi (dengan $TIMEFMT) untuk memberikan dengan informasi tersebut.
Stéphane Chazelas
1
Inilah yang saya inginkan. Sempurna! Juga, terima kasih kepada editor pos ini yang mengklarifikasi bahwa Anda harus menjalankannya command time -v ...sejak bashpembajakan time.
John Feminella
4

Perintah straceini dapat bermanfaat, Anda dapat membatasi jejak hanya menghitung -catau bagian dari panggilan sistem,

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

Dalam jawaban ini , saya menggunakannya untuk menghitung jumlah panggilan sistem. Saya tidak tahu apakah ada yang akan memberi Anda ringkasan ringkasan dari throughput, namun strace dapat menghasilkan angka untuk sesuatu yang ingin awkdiringkas.

X Tian
sumber
stracedapat memperlambat segalanya secara signifikan, jadi ini berguna untuk mengukur waktu relatif dari syscalls yang berbeda, tetapi saya tidak akan menggunakannya sebagai pengukur waktu untuk keperluan umum. perfjauh lebih cepat / kurang mengganggu, jika Anda bermain dengan opsi frekuensi sampling.
Marcin