การวัดการใช้งานดิสก์ I / O ของโปรแกรม


12

time เป็นคำสั่งที่ยอดเยี่ยมถ้าคุณต้องการที่จะคำนวณเวลาของ CPU ที่คำสั่งที่ได้รับ

ฉันกำลังมองหาสิ่งที่คล้ายกันซึ่งสามารถวัดดิสก์ I / O ของโปรแกรมและลูก ๆ ควรแยกความแตกต่างระหว่าง I / O ที่แคช (และไม่ทำให้ดิสก์หมุน) และ I / O ที่ไม่ได้แคช

ดังนั้นฉันต้องการทำ:

iomeassure my_program my_args

และรับเอาต์พุตคล้ายกับ:

Cached read: 10233303 Bytes
Cached write: 33303 Bytes  # This was probably a tmp file that was erased before making it to the disk
Non-cached read: 200002020 Bytes
Non-cached write: 202020 Bytes

ผมมองที่vmstat, iostatและsarแต่ไม่มีของเหล่านี้กำลังมองหาที่ขั้นตอนเดียว แต่พวกเขาดูที่ระบบทั้งหมด

ฉันได้ดูiotopแล้ว แต่นั่นทำให้ฉันได้เห็นทันที

--- แก้ไข ---

คำตอบของ snap ดูเหมือนใกล้

'อินพุตระบบไฟล์:' คือการอ่านที่ไม่แคชในบล็อก 512- ไบต์

'เอาต์พุตระบบไฟล์:' คือการเขียนแคชในบล็อก 512- ไบต์

คุณสามารถบังคับให้แคชว่างด้วย:

sync ; echo 3 | sudo tee /proc/sys/vm/drop_caches >/dev/null

ฉันทดสอบด้วย:

 seq 10000000 > seq
 /usr/bin/time -v bash -c 'perl -e "open(G,\">f\"); print G <>;close G; unlink \"f\";" seq'

คำตอบ:


9

คุณไม่ได้ระบุระบบปฏิบัติการที่คุณใช้

ลินุกซ์

แทนที่จะใช้time fooซึ่งเป็น (โดยปกติ) เชลล์ในตัวคุณสามารถลองใช้คำสั่งภายนอก/usr/bin/time fooได้ มันให้ข้อมูลเพิ่มเติมบางอย่างเช่นจำนวนอินพุตและเอาต์พุตระบบไฟล์ (แต่ไม่มีข้อมูลเกี่ยวกับการเข้าชมแคชหรือจำนวนไบต์) ดูman timeและman getrusageสำหรับคำแนะนำเพิ่มเติม

โปรดทราบว่าคุณลักษณะนี้ต้องการเคอร์เนล Linux เวอร์ชัน 2.6.22 หรือใหม่กว่า

FreeBSD

/usr/bin/time -l fooใช้ มันให้จำนวนอินพุตและเอาต์พุต ดูman timeและman getrusageสำหรับคำแนะนำเพิ่มเติม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.