Có cái gì đó giống như 'thời gian' cũng ghi lại I / O và CPU không?


18

Tôi có thể nhanh chóng theo dõi thời gian chạy của một quá trình với time:

x@y ~ $ time foo

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

Có cách nào để tôi có thể nhận được cùng một dữ liệu cho việc sử dụng I / O và CPU của một đối số, được ghi vào STDOUT không? Một lệnh hoặc tiện ích đơn giản như thế timesẽ là lý tưởng, nơi tôi chỉ cần truyền đối số của thứ tôi muốn chạy:

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.

Câu trả lời:


25

nhìn vào trang thời gian trên hệ thống của bạn, một số triển khai có các tùy chọn định dạng để bao gồm các chỉ số I / O, CPU và Bộ nhớ (-f).

Chẳng hạn, GNU time, với -vsẽ hiển thị tất cả thông tin có sẵn (ở đây trên 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

Bật BSDs, sử dụng -lthay thế.

Lưu ý rằng đây là /usr/bin/timechương trình thực tế , không phải từ khóa mà một số shell như bashcung cấp mà bạn gọi time pipeline.


4
zsh's timetừ khóa cũng có thể được cấu hình (với $TIMEFMT) để cung cấp các thông tin đó.
Stéphane Chazelas

1
Đây chính xác là những gì tôi muốn. Hoàn hảo! Ngoài ra, cảm ơn các biên tập viên của bài đăng này, người đã làm rõ rằng bạn sẽ cần phải chạy nó command time -v ...bashđang chiếm quyền điều khiển time.
John Women'sella

4

Lệnh này stracecó thể hữu ích, bạn có thể giới hạn dấu vết chỉ đếm -choặc một tập hợp con của các cuộc gọi hệ thống,

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

Trong câu trả lời này , tôi sử dụng nó để đếm số lượng cuộc gọi hệ thống. Tôi không biết liệu có bất cứ điều gì sẽ cung cấp cho bạn bảng phân tích tóm tắt về thông lượng hay không, tuy nhiên, strace có thể tạo ra các số liệu cho một cái gì đó muốn awktóm tắt.


stracecó thể làm chậm đáng kể mọi thứ, vì vậy thật hữu ích khi đo thời gian tương đối của các tòa nhà khác nhau, nhưng tôi sẽ không sử dụng nó như một bộ đếm thời gian cho mục đích chung. perfnhanh hơn / ít xâm nhập hơn, nếu bạn chơi với các tùy chọn tần số lấy mẫu.
Marcin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.