ข้อมูลที่แสดงโดยไอโซโทปจะไม่ถูกรวบรวมในลักษณะเดียวกันสำหรับแต่ละกระบวนการและสำหรับระบบโดยรวม ตัวเลขทั่วโลก“ จริง” ไม่ใช่ผลรวมของตัวเลขต่อกระบวนการ (นั่นคือสิ่งที่“ รวม”)
ข้อมูลทั้งหมดจะถูกรวบรวมจากระบบแฟ้ม proc
- สำหรับแต่ละกระบวนการไอโซโทปจะอ่านข้อมูลจากค่าเฉพาะและค่าต่างๆ เหล่านี้เป็นจำนวนไบต์ผ่านในและสายระบบ (รวมทั้งสายพันธุ์เช่น, , , ฯลฯ )
/proc/PID/io
rchar
wchar
read
write
readv
writev
recv
send
- ค่าที่แท้จริงของโลกนั้นอ่านได้จากค่า
/proc/vmstat
เฉพาะpgpgin
และpgpgout
ค่า สิ่งเหล่านี้วัดการแลกเปลี่ยนข้อมูลระหว่างเคอร์เนลและฮาร์ดแวร์ (แม่นยำยิ่งขึ้นนี่คือข้อมูลที่สับโดยอุปกรณ์บล็อกเลเยอร์ในเคอร์เนล)
มีหลายสาเหตุที่ข้อมูลต่อกระบวนการและข้อมูลเลเยอร์อุปกรณ์บล็อกแตกต่างกัน โดยเฉพาะอย่างยิ่ง:
- การแคชและการบัฟเฟอร์หมายความว่า I / O ที่เกิดขึ้นในเลเยอร์หนึ่งอาจไม่เกิดขึ้นในเวลาเดียวกันหรือจำนวนครั้งเท่ากันที่เลเยอร์อื่น ตัวอย่างเช่นข้อมูลที่อ่านจากแคชนั้นจะถือว่าเป็นการอ่านจากกระบวนการที่เข้าถึง แต่ไม่มีการอ่านที่สอดคล้องกันจากฮาร์ดแวร์ (ที่เกิดขึ้นแล้วก่อนหน้านี้อาจเป็นในนามของกระบวนการอื่น)
- ข้อมูลระดับกระบวนการประกอบด้วยข้อมูลที่แลกเปลี่ยนบนไพพ์ซ็อกเก็ตและอินพุต / เอาต์พุตอื่น ๆ ที่ไม่เกี่ยวข้องกับดิสก์ต้นแบบหรืออุปกรณ์บล็อกอื่น ๆ
- ข้อมูลระดับกระบวนการบัญชีสำหรับเนื้อหาไฟล์เท่านั้นไม่ใช่ข้อมูลเมตา
ความแตกต่างสุดท้ายนั้นอธิบายสิ่งที่คุณเห็นที่นี่ การลบไฟล์มีผลกับข้อมูลเมตาเท่านั้นไม่ใช่ข้อมูลดังนั้นกระบวนการจึงไม่ได้เขียนอะไรเลย อาจกำลังอ่านเนื้อหาไดเรกทอรีเพื่อแสดงรายการไฟล์ที่จะลบ แต่ก็มีขนาดเล็กพอที่จะเลื่อนดูโดยไม่สังเกตเห็น
ฉันไม่คิดว่า Linux เสนอวิธีใด ๆ ในการตรวจสอบการปรับปรุงข้อมูลเมตาของไฟล์ คุณสามารถตรวจสอบต่อระบบแฟ้ม I / O ผ่านรายการภายใต้/sys/fs
สำหรับ filesystems บาง ฉันไม่คิดว่าคุณสามารถบัญชี I / O เมตาดาต้ากับกระบวนการเฉพาะมันจะซับซ้อนมากที่จะทำในกรณีทั่วไปเนื่องจากกระบวนการหลายอาจทำให้เมตาดาต้าเดียวกันจะอ่านหรือเปลี่ยนแปลง