ทำไม CPU ถึงใช้เวลากับ IO (wa)


18

ฉันรู้ว่าwa(ในtop) วัดเวลาของ CPU ในการรอ I / O หลายบทความบอกว่า

แต่ฉันสับสนว่าตามคะแนนความรู้ 2 จุด:

  1. หากกระบวนการใช้การเรียกของระบบเพื่ออ่านดิสก์กระบวนการจะถูกบล็อก
  2. หากกระบวนการถูกบล็อกจะไม่สามารถกำหนดเวลาทำงานบน CPU ได้

ขวา?

ดูเหมือนว่าไม่มีเวลาสำหรับ CPU ที่รอ I / O ... จะเกิดอะไรขึ้น

ถ้าฉันแนะนำหนังสือหรือบทความให้ฉันอ่านเพิ่มเติมก็ดีกว่ามาก


ฉันก้าวเข้ามาและเขียนคำตอบที่เหมาะสม ขออภัยฉันไม่ได้อยู่ที่นั่นเมื่อคุณต้องการฉัน ;-)
Alec Teal

คำตอบ:


22

สถานะของ CPU ไม่ได้ใช้งานจะแบ่งออกเป็นสองแตกต่างกัน "ย่อย" -states: และiowaitidle

หาก CPU ไม่ได้ใช้งานเคอร์เนลจะพิจารณาว่าขณะนี้มี I / O อย่างน้อยหนึ่งรายการที่กำลังดำเนินการกับดิสก์ภายในเครื่องหรือดิสก์ที่ติดตั้งแบบรีโมต (NFS) ซึ่งเริ่มต้นจาก CPU นั้น ถ้ามีแล้ว CPU iowaitอยู่ในสถานะ หากไม่มี I / O ระหว่างดำเนินการที่เริ่มต้นจาก CPU นั้น CPU จะอยู่ในidleสถานะ

ดังนั้นiowaitเป็นเปอร์เซ็นต์ของเวลาที่ CPU ไม่ทำงานและมี I / O อย่างน้อยหนึ่งรายการที่เริ่มต้นจาก CPU นั้น

ตัวiowaitนับระบุว่าระบบสามารถจัดการงานคำนวณได้มากขึ้น เพียงเพราะ CPU อยู่ในiowaitสถานะไม่ได้หมายความว่ามันไม่สามารถรันเธรดหรือกระบวนการอื่นบน CPU นั้นได้

ดังนั้นiowaitเป็นเพียงรูปแบบของเวลาว่าง


นี่มันผิดจริง นอกจากนี้ NFS - ซีพียูยังไม่มีแนวคิดเรื่องนั้น โดยทั่วไปแล้วเวลาที่ CPU ใช้ไม่สามารถทำอย่างอื่นได้เพราะมันเกี่ยวข้องกับสิ่ง IO ระดับต่ำในแง่ของการเข้าถึงสิ่งที่เชื่อมต่อกับมันไม่ได้ประมวลผล I / O ซึ่งโดยปกติแล้วจะอ่านไฟล์และอะไรก็ตาม ตัวอย่างเช่นใน Raspberry Pi ไม่มีคอนโทรลเลอร์ DMA ดังนั้นซีพียูจึงไม่สามารถไปได้ "เฮ้มาเธอร์บอร์ดอ่านฉันมากมายหลายไบเริ่มต้นที่นี่จากการ์ดและวางไว้ใน ram เริ่มต้นที่นี่" มันต้องทำด้วยตนเอง
Alec Teal

ดังนั้นจึงใช้เวลานานมากรออย่างต่อเนื่องเพื่อรอ io ในการอ่านการ์ดให้เสร็จสมบูรณ์ คุณทำให้มันฟังดูเหมือนว่ามิสแคลสามารถวัดได้จาก "io wait" (ซึ่งแน่นอนว่าไม่นับ), IO wait จะถูกกำหนดดังนี้:เวลาที่เคอร์เนลใช้ในอุปกรณ์ I / O ระดับต่ำเช่นรูทีน RPi นั้นจะต้องทำตามขั้นตอนการอ่านจากการ์ดและ CPU (เป็น DMA-less chump) เพื่อรอข้อมูลบนบัส IO ด้วยคอนโทรลเลอร์ DMA มันจะพูดกับคอนโทรลเลอร์และบอกว่า "บอกฉันเมื่อคุณทำเสร็จแล้ว" - ปล่อยให้มันทำอย่างอื่นในขณะที่คอนโทรลเลอร์ DMA ทำอุปกรณ์ IO
Alec Teal

ใช้ dstat เพื่อดู IOwaiting BTW เช่นกันกับ iowait และเวลาที่ใช้ทำสิ่งเคอร์เนลไม่สามารถวัดได้จริงต่อกระบวนการ เช่นเดียวกับการพูดว่ามีสองกระบวนการ "การเขียน" เป็น "ไฟล์" กระบวนการแรกดำเนินการอย่างรวดเร็ว FS เลือกที่จะแคชการเขียนไม่ว่าด้วยเหตุผลใดกระบวนการที่สองทำให้แคชล้างข้อมูลไม่ยุติธรรมที่จะนับเวลานานกว่าในการส่งคืน จากการเขียนไปยังกระบวนการที่ทำให้เกิดการเขียน เช่นเดียวกันกับการรอ I / O ซึ่งเป็นสาเหตุที่ไม่ได้ทำการวัดต่อกระบวนการ
Alec Teal

4
@AlecTeal: ไม่ถูกต้องและความคิดเห็นของคุณเป็นเท็จ iowait นับเวลาที่ถูกบล็อกใน I / O ไม่ใช่การให้บริการ I / O หากคุณไม่ต้องการยืนยันสิ่งนี้โดยการอ่านแหล่งเคอร์เนลลองทำการทดลอง: ติดตั้งระบบไฟล์เครือข่ายเริ่มอ่านไฟล์แล้วปิดไฟร์วอลล์จากเครื่องระยะไกล เวลา iowait จะยังคงสูงแม้ว่าตัวประมวลผลจะไม่ได้ทำงานอย่างสมบูรณ์
เดวิด

1
ฉันทำแบบทดสอบกับคำตอบนี้ ที่จะทำให้สูงdd if=/dev/sda of=/dev/null waจากนั้นเรียกใช้รหัสในขณะที่ความจริง, เป็นแทนwa usขอบคุณความวุ่นวาย
HUA Di

-2

ฉันไม่แน่ใจ 100% ว่าฉันเข้าใจคำถาม แต่มีความคิดบางอย่าง

มีอีกคำถามที่ถามคำถามนี้และมีคำตอบที่ดี: ใครสามารถอธิบายได้อย่างแม่นยำว่า IOWait คืออะไร?

มีบทความที่ดีอยู่ที่นี่: http://veithen.github.io/2013/11/18/iowait-linux.html


7
ไมค์เป็นที่ต้องการคำตอบที่มีเนื้อหาไม่ใช่แค่ลิงก์ไปยังเนื้อหา ด้วยการให้เนื้อหาที่นี่คุณจะมั่นใจได้ว่าคำตอบของคุณยังคงมีคุณค่าเมื่อลิงก์เหล่านั้นหายไป
EEAA

1
@EEAA แล้วคำตอบจะต้องมีการแก้ไขไม่ downvote triply? หรือมันสามารถถูกย้ายไปเป็นความคิดเห็น มันยังมีข้อมูลที่เป็นประโยชน์ Downvotes หมายถึงชนิดของข้อมูลนั้นไร้ประโยชน์เช่นกัน ฉันไม่ได้บอกว่าคุณได้ลงคะแนนฉันแค่สงสัยเกี่ยวกับวิธีการที่ผู้คนมีที่นี่
Roland Pihlakas

3
@RolandPihlakas มันเป็นเรื่องของแรงจูงใจ Downvote + ความคิดเห็นในสถานการณ์นี้ให้แรงจูงใจแก่ผู้ใช้ในการแก้ไขคำตอบ ฉันยินดีที่จะลบ dv ของฉันหลังจากแก้ไขคำตอบแล้ว การแก้ไขสิ่งเหล่านี้มีผลในทางตรงกันข้ามเพราะจะทำให้เกิดพฤติกรรมที่ไม่ดี เรามีผู้ใช้หลายคนในช่วงหลายปีที่มีการโพสต์คำตอบเฉพาะลิงก์เท่านั้นที่เคยถูกถามว่าจะไม่ทำเช่นนั้น หากผู้ใช้ไม่สามารถใส่ใจในคำตอบของพวกเขาฉันจะไม่ช่วยพวกเขาโดยแก้ไขงานของพวกเขา
EEAA

@EEAA ขอบคุณสำหรับคำตอบที่บรรจง วิธีการของคุณเป็นที่เข้าใจและผ่านความคิดเห็นของคุณคุณส่งแรงบันดาลใจสะกิดแรงจูงใจสำหรับผู้เขียนคำตอบด้วย ในทางตรงกันข้ามฉันกลัวว่าความเงียบในการลงคะแนนเสียงส่วนใหญ่จะไม่ได้ให้แรงจูงใจในทางปฏิบัติใด ๆ เนื่องจากไม่ชัดเจน แต่ฉันไม่แน่ชัด - ฉันสงสัยว่าทำไมคำตอบจึงลดลงมากจนกลายเป็นสีเทา ความคิดเห็นของคุณที่มีหนึ่งหรือสอง downvote ควรจะพอเพียง?
Roland Pihlakas

2
@RolandPihlakas ผู้คนคิดว่าคำตอบนั้นไม่มีประโยชน์ดังนั้นพวกเขาจึงลงคะแนน พวกเขาลงคะแนนเพราะเป็นวันอังคาร พวกเขาลงคะแนนเพราะหิมะตกในมินนิอาโปลิสวันนี้ (จริง ๆ แล้วมันเป็นและมันไม่ควรจะเป็นช่วงปลายฤดูใบไม้ผลิ) ใครจะรู้.
EEAA
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.