iotop แสดงการเขียนดิสก์ 1.5 MB / s แต่โปรแกรมทั้งหมดมี 0.00 B / s


18

ฉันไม่เข้าใจiotopผลลัพธ์: มันแสดง ~ 1.5 MB / s การเขียนดิสก์ (ด้านบนขวา) แต่โปรแกรมทั้งหมดมี 0.00 B / s ทำไม?

ป้อนคำอธิบายรูปภาพที่นี่

วิดีโอถูกถ่ายเมื่อฉันลบเนื้อหาของโฟลเดอร์ที่มีไฟล์จำนวนไม่กี่ล้านไฟล์ที่ใช้ perl -e 'for(<*>){((stat)[9]<(unlink))}'บน Kubuntu 14.04.3 LTS x64

iotopsudo iotopถูกเปิดใช้

คำตอบ:


22

ข้อมูลที่แสดงโดยไอโซโทปจะไม่ถูกรวบรวมในลักษณะเดียวกันสำหรับแต่ละกระบวนการและสำหรับระบบโดยรวม ตัวเลขทั่วโลก“ จริง” ไม่ใช่ผลรวมของตัวเลขต่อกระบวนการ (นั่นคือสิ่งที่“ รวม”)

ข้อมูลทั้งหมดจะถูกรวบรวมจากระบบแฟ้ม proc

  • สำหรับแต่ละกระบวนการไอโซโทปจะอ่านข้อมูลจากค่าเฉพาะและค่าต่างๆ เหล่านี้เป็นจำนวนไบต์ผ่านในและสายระบบ (รวมทั้งสายพันธุ์เช่น, , , ฯลฯ )/proc/PID/iorcharwcharreadwritereadvwritevrecvsend
  • ค่าที่แท้จริงของโลกนั้นอ่านได้จากค่า/proc/vmstatเฉพาะpgpginและpgpgoutค่า สิ่งเหล่านี้วัดการแลกเปลี่ยนข้อมูลระหว่างเคอร์เนลและฮาร์ดแวร์ (แม่นยำยิ่งขึ้นนี่คือข้อมูลที่สับโดยอุปกรณ์บล็อกเลเยอร์ในเคอร์เนล)

มีหลายสาเหตุที่ข้อมูลต่อกระบวนการและข้อมูลเลเยอร์อุปกรณ์บล็อกแตกต่างกัน โดยเฉพาะอย่างยิ่ง:

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

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

ฉันไม่คิดว่า Linux เสนอวิธีใด ๆ ในการตรวจสอบการปรับปรุงข้อมูลเมตาของไฟล์ คุณสามารถตรวจสอบต่อระบบแฟ้ม I / O ผ่านรายการภายใต้/sys/fsสำหรับ filesystems บาง ฉันไม่คิดว่าคุณสามารถบัญชี I / O เมตาดาต้ากับกระบวนการเฉพาะมันจะซับซ้อนมากที่จะทำในกรณีทั่วไปเนื่องจากกระบวนการหลายอาจทำให้เมตาดาต้าเดียวกันจะอ่านหรือเปลี่ยนแปลง


1
คำตอบที่ดีมากขอบคุณ คุณจะแนะนำวิธีที่เชื่อถือได้มากขึ้นในการติดตามวิวัฒนาการของผลลัพธ์หรือไม่
Rui F Ribeiro

1
@RuiFRibeiro คุณสามารถดูไฟล์ที่rm -rกำลังประมวลผลอยู่ในขณะนี้straceแต่จะไม่ให้การประมาณเปอร์เซ็นต์ความสมบูรณ์ที่เป็นประโยชน์กับคุณมากนักเนื่องจากลำดับของการแวะผ่านในแต่ละไดเรกทอรีนั้นค่อนข้างไม่แน่นอน หากมีการดำเนินการขนาดใหญ่เพียงครั้งเดียวที่เกิดขึ้นในระบบไฟล์นั้นและไม่มีการเชื่อมโยงที่เกี่ยวข้องกับฮาร์ดมากเกินไปการดูdf -iจะบอกคุณว่ามีการประมวลผลไฟล์กี่ไฟล์
Gilles 'หยุดความชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.