เหตุใด I / O ของดิสก์สูงจึงลดการตอบสนอง / ประสิทธิภาพของระบบ


19

ฉันไม่เคยเข้าใจเลยว่าทำไม I / O ของดิสก์สูงทำให้ระบบช้าลงมาก มันแปลกสำหรับฉันเพราะฉันคาดว่าการทำงานช้าลงจะส่งผลเฉพาะกระบวนการที่ขึ้นอยู่กับข้อมูลฮาร์ดไดรฟ์ / ออปติคัลไดรฟ์ ฉันหมายถึงiowait ที่นี่

เหตุใดโปรเซสเซอร์จึงรอแทนที่จะทำงานอื่น ใครสามารถอธิบายข้อ จำกัด นี้และทำไมมันไม่ได้รับการแก้ไขใน Linux kernel? มีเคอร์เนลที่ไม่มีปัญหานี้หรือไม่?

[ หมายเหตุ ] มีความคืบหน้าในส่วนของประสิทธิภาพนี้ สำหรับหนึ่งเมล็ดในภายหลัง (2.6.37 ในกรณีของฉัน) ตอบสนองได้ดีกว่ามาก


xeno ไม่ได้อธิบายอย่างชัดเจนว่าสิ่งนี้ได้รับการแก้ไขอย่างไรในเคอร์เนล Linux ครั้งล่าสุดที่คุณถาม?
Michael Mrozek

2
จากการแก้ไขฉันคิดว่าจุดประสงค์คือให้คำถามก่อนหน้าเกี่ยวกับความคืบหน้าในการแก้ไขปัญหาในขณะที่คำถามนี้เกี่ยวกับสาเหตุของปัญหา
Steven D

@mic Steven ถูกต้อง เราได้พูดคุยกันนานเกี่ยวกับสิ่งที่ฉันหมายถึงกับคำถามก่อนหน้า คำตอบของ xeno นั้นดีมากที่ฉันแก้ไขคำถามเพื่อให้พอดีและฉันก็ถามคำถามเดิมที่นี่อีกครั้ง
tshepang

ฉันเข้าใจ แต่คำถามของคุณดูเหมือนจะขัดแย้งกับคำถามอื่น ที่นี่คุณพูดว่า "ทุกคนสามารถอธิบายข้อ จำกัด นี้และทำไมมันไม่ได้รับการแก้ไขในเคอร์เนล Linux หรือไม่มีเคอร์เนลออกที่ไม่มีปัญหานี้หรือไม่" แต่คำตอบของ xeno เริ่มต้นด้วย "ฉันคิดว่าส่วนใหญ่มัน ได้รับการแก้ไขแล้ว "
Michael Mrozek

@mic ไม่จริง เคอร์เนลยังคงทำหน้าที่ iowaitซึ่งหมายความว่ามันยังคงรออยู่ ฉันดูคำตอบของ xeno เนื่องจากการตอบสนองของระบบได้รับการปรับปรุงมากขึ้น และฉันก็เห็นด้วยอย่างที่ฉันได้บันทึกคำถามไว้
tshepang

คำตอบ:


9

ระบบปฏิบัติการใช้หน่วยความจำเสมือนเพื่อให้สามารถใช้หน่วยความจำได้มากกว่าที่มีอยู่จริง RAM เมื่อเคอร์เนลตัดสินว่ามีการใช้งานที่ดีกว่าสำหรับเพจหน่วยความจำกายภาพเนื้อหานั้นอาจเป็น "เพจเอาต์" สำหรับจัดเก็บบนดิสก์ เมื่อมีการเข้าถึงหน้าหน่วยความจำเสมือนในขณะที่เพจเอาต์เพจจะสร้างข้อผิดพลาดของหน้าและย้ายกลับจากดิสก์ไปยัง RAM

ความผิดพลาดของหน้าเป็นหายนะสำหรับประสิทธิภาพการทำงานเนื่องจากเวลาในการตอบสนองของดิสก์เป็นมิลลิวินาทีในขณะที่เวลาในการตอบสนองของหน่วยความจำเป็นหน่วยนาโนวินาที (1 มิลลิวินาที = หนึ่งล้านนาโนวินาที!)

หน่วยความจำไม่เพียง แต่ใช้โดยกระบวนการของผู้ใช้ แต่ยังใช้เคอร์เนลสำหรับสิ่งต่าง ๆ เช่นการแคชระบบไฟล์ ระหว่างการทำงานของระบบไฟล์เคอร์เนลจะแคชข้อมูลที่ใช้ล่าสุด ข้อสันนิษฐานคือมีโอกาสที่ดีที่จะใช้ข้อมูลเดิมอีกครั้งในไม่ช้าดังนั้นการแคชควรปรับปรุงประสิทธิภาพ I / O

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


ฉันรู้ว่านี่เก่าแก่พอ ๆ กับสิ่งสกปรก แต่ขึ้นอยู่กับว่ามันเข้ามาในปริมาณที่สูงของ I / O อาจส่งผลให้เกิดการขัดจังหวะจำนวนมากและบริบทที่เกิดขึ้นจะทำให้เสียเวลาของ CPU
Bratchley

5

เท่าที่ฉันเข้าใจ IOwait หมายความว่ากระบวนการไม่ใช่ตัวประมวลผลกำลังรอให้ IO พร้อมใช้งาน หน่วยประมวลผลได้รับความเร็วมากกว่าฮาร์ดไดรฟ์ซึ่งหมายถึงรหัสจะเสร็จเร็วขึ้นจากนั้นจึงต้องอ่านดิสก์ เมื่อจำเป็นต้องอ่านมากกว่าหนึ่งไดรฟ์สามารถทำได้เร็วพอคุณจะต้องรอโปรเซสเซอร์ วิธีการตัดสินใจว่าใครจะอ่าน / เขียนข้อมูลลงในดิสก์นั้นจะถูกกำหนดโดยตัวจัดตารางเวลาบล็อกในกรณีส่วนใหญ่ตอนนี้ CFQ หากคุณกำลังใช้ CFQ และคุณต้องกระบวนการที่จะใช้น้อยกว่าของเวลา IO ionice -c3 <processid>โดยรวมที่จะเพิ่มการตอบสนองของระบบคุณสามารถใช้ สิ่งนี้บอกให้ระบบให้กระบวนการนี้ IO เฉพาะเมื่อไม่มีสิ่งอื่นใดที่ต้องการ

สิ่งนี้ยังน่าสนใจและอธิบายปัญหาของ iowait ได้ดีขึ้น

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