มีบางเวลาเหมือนกันที่บันทึก I / O และ CPU


18

ฉันสามารถตรวจสอบเวลาทำงานของกระบวนการได้อย่างรวดเร็วด้วยtime:

x@y ~ $ time foo

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

มีวิธีที่ฉันสามารถรับข้อมูลเดียวกันสำหรับการใช้ I / O และ CPU ของอาร์กิวเมนต์ที่บันทึกใน STDOUT หรือไม่ คำสั่งหรือยูทิลิตีอย่างง่าย ๆtimeน่าจะเหมาะสมที่สุดที่ฉันเพิ่งผ่านการโต้แย้งของสิ่งที่ฉันต้องการเรียกใช้:

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.

คำตอบ:


25

ดูหน้า man time บนระบบของคุณการใช้งานบางอย่างมีตัวเลือกรูปแบบเพื่อรวม I / O, CPU และ Memory stats (-f)

ตัวอย่างเช่น GNU timeซึ่ง-vจะแสดงข้อมูลที่มีอยู่ทั้งหมด (ที่นี่บน 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

เปิดBSDsใช้-lแทน

ทราบว่านี้เป็นจริง/usr/bin/timeโปรแกรมไม่คำหลักที่เปลือกบางคนชอบให้ที่คุณเรียกด้วยbashtime pipeline


4
zsh's timeคำหลักยังสามารถกำหนดค่า (มี$TIMEFMT) เพื่อให้มีข้อมูลว่า
Stéphane Chazelas

1
นี่คือสิ่งที่ฉันต้องการ ที่สมบูรณ์แบบ! นอกจากนี้ขอขอบคุณบรรณาธิการบรรณาธิการของโพสต์นี้ที่ชี้แจงว่าคุณจะต้องดำเนินการด้วยcommand time -v ...เนื่องจากbashมีการไฮแจ็time
John Feminella

4

คำสั่งstraceนั้นมีประโยชน์คุณสามารถ จำกัด การติดตามให้มีเพียงจำนวน-cหรือชุดย่อยของการเรียกระบบ

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

ในคำตอบนี้ฉันใช้เพื่อนับจำนวนการโทรของระบบ ฉันไม่รู้ว่าจะมีอะไรให้สรุปรายละเอียดของทรูพุตอย่างไรสเตรซสามารถสร้างตัวเลขสำหรับบางสิ่งที่ต้องการawkสรุป


straceสามารถชะลอสิ่งต่าง ๆ ลงอย่างมากดังนั้นจึงเป็นประโยชน์ในการวัดเวลาสัมพัทธ์ของ syscalls ที่แตกต่างกัน แต่ฉันจะไม่ใช้มันเป็นตัวจับเวลาวัตถุประสงค์ทั่วไป perfเร็วเกินไป / ไม่ก้าวก่ายหากคุณเล่นด้วยตัวเลือกความถี่การสุ่มตัวอย่าง
Marcin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.