ฉันจะตรวจสอบดิสก์ I / O ในไดเรกทอรีเฉพาะได้อย่างไร


10

ฉันมีกระบวนการเล็กน้อยที่มีชื่อที่รู้จักซึ่งทั้งหมดเขียนไปยังไฟล์ในไดเรกทอรีเดียว ฉันต้องการบันทึกจำนวนดิสก์บล็อกอ่านและเขียนในช่วงเวลา ( ไม่ใช่แค่การเข้าถึงไฟล์) เพื่อทดสอบว่าการเปลี่ยนแปลงพารามิเตอร์จะลดจำนวน I / O อย่างมีนัยสำคัญหรือไม่ ฉันใช้อยู่ในขณะนี้iostat -d -pแต่ จำกัด เฉพาะพาร์ทิชันทั้งหมด



1
สิ่งนี้แตกต่างจากคำถามเหล่านี้เนื่องจากฉันไม่ได้สนใจไฟล์เอง แต่เป็นปริมาณของ I / O
l0b0

คำตอบ:


10

ฉันรู้ว่าสิ่งนี้จะฟังดูง่ายและไร้สาระ แต่ถ้าคุณสามารถควบคุมแอพที่เป็นปัญหา (อาจอยู่ในสภาพแวดล้อมการทดสอบ) คุณสามารถเมานต์ได้เฉพาะไดเรกทอรีที่พาร์ติชั่นของตัวเองiostatฯลฯ จะบอกคุณเท่านั้น เกี่ยวกับมันและไม่มีอะไรอื่นในจุดนั้น

หากมีฮาร์ดไดรฟ์ที่เกี่ยวข้องคุณสามารถปลอมแปลงด้วยการติดตั้งลูปแบ็คà la

dd if=/dev/zero of=/bigdisk/LOOPFILE bs=1024m count=1024m # 1gb loopback file
mke2fs -j /bigdisk/LOOPFILE
mkdir /tmpcopy
mount -o loop /tmpcopy /bigdisk/LOOPFILE
cp -r -p $SPECIALDIR2MONITOR /tmpcopy
umount /tmpcopy
mount -o loop $SPECIALDIR2MONITOR  /bigdisk/LOOPFILE,

ซึ่งจะไม่ลบ I / O ดิสก์การแข่งขันทั้งหมดออกไปอย่างสมบูรณ์ แต่ฉันค่อนข้างมั่นใจว่าiostatเอาต์พุตของมันจะเฉพาะเจาะจงมากขึ้นกับความต้องการของคุณ


3

ฉันไม่คิดว่าจะมีวิธีโดยตรง วิธีหนึ่งในการรับข้อมูลที่คุณต้องการคือเข้าถึงโครงสร้างไดเรกทอรีผ่านระบบไฟล์เสมือนที่บันทึกการเข้าถึง Loggedfsเป็นระบบไฟล์แบบหนึ่งถึงแม้ว่าฉันจะไม่รู้ว่ามันสามารถแสดงข้อมูลทั้งหมดที่คุณสนใจได้หรือไม่ (ถ้าไม่ใช่ก็อาจเป็นความพยายามเขียนโค้ดเล็กน้อยสำหรับข้อมูลนั้น)

mkdir /tmp/replica
loggedfs /path/to/directory /tmp/replica
mycommand --root=/tmp/replica
fusermount -u /tmp/replica

2

คุณสามารถใช้inotifywait -m DIRNAMEจากinotify เครื่องมือ


-dไม่มีอยู่ใน inotifywait 3.13 คุณหมายถึง-mอะไร
l0b0

@ l0b0: โอ้ฉันใช้ 3.14 จาก git repo ขอโทษ แต่ manpage ระบุว่ามันเป็นเช่นเดียว-mกับข้อยกเว้นของการทำงานในพื้นหลังและต้องการ outfile
Tobias Kienzler

นอกจากนี้ยัง-rอาจจะมีประโยชน์
โทเบียส KIENZLER

1
ทดสอบแล้ว ฉันขอโทษสำหรับความเข้าใจผิด แต่ฉันไม่สนใจว่าไฟล์ใด (หรือแม้แต่จำนวนไฟล์) ที่เข้าถึง แต่เป็นจำนวน I / O
l0b0

2
หมายเหตุนี่เป็น Linux โดยเฉพาะ BSD มี kqueue และ pnotify การเรียกของระบบ แต่ฉันไม่รู้ว่าพวกเขาทำสิ่งที่ผู้เขียนต้องการหรือไม่
Shawn J. Goff
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.