เมื่อใช้ซอฟต์แวร์ RAID และ LVM บน Linux การตั้งค่าตัวกำหนดตารางเวลา IO และ readahead ใดที่ให้เกียรติ


28

ในกรณีที่มีหลายเลเยอร์ (ฟิสิคัลไดรฟ์ -> md -> dm -> lvm) ตัวตั้งเวลาการตั้งค่า readahead และการตั้งค่าดิสก์อื่น ๆ จะทำงานอย่างไร

ลองนึกภาพคุณมีหลายดิสก์ (/ dev / sda - / dev / sdd) ทุกส่วนของอุปกรณ์ RAID ซอฟต์แวร์ (/ dev / md0) สร้างขึ้นด้วย mdadm แต่ละอุปกรณ์ (รวมถึงดิสก์ที่มีอยู่จริงและ / dev / md0) มีการตั้งค่าของตัวเองสำหรับตัวจัดกำหนดการ IO ( เปลี่ยนเช่นนั้น ) และ readahead ( เปลี่ยนโดยใช้ blockdev ) เมื่อคุณโยนสิ่งต่าง ๆ เช่น dm (crypto) และ LVM คุณจะเพิ่มเลเยอร์มากขึ้นด้วยการตั้งค่าของพวกเขาเอง

ตัวอย่างเช่นหากอุปกรณ์ทางกายภาพมีการอ่านล่วงหน้า 128 บล็อกและ RAID มี readahead 64 บล็อกซึ่งเป็นเกียรติเมื่อฉันอ่านจาก / dev / md0? ไดรเวอร์ md พยายามอ่าน 64 บล็อกซึ่งไดรเวอร์อุปกรณ์ฟิสิคัลแปลเป็น 128 บล็อกแล้วหรือไม่? หรือ RAID readahead "ส่งผ่าน" ไปยังอุปกรณ์อ้างอิงทำให้ 64 บล็อกอ่านหรือไม่

คำถามแบบเดียวกันนี้มีไว้สำหรับตัวกำหนดเวลาหรือไม่ ฉันต้องกังวลเกี่ยวกับตัวกำหนดเวลา IO หลายเลเยอร์และวิธีการโต้ตอบหรือไม่หรือ / dev / md0 มีผลแทนที่ตัวกำหนดเวลาพื้นฐานอย่างมีประสิทธิภาพหรือไม่

ในความพยายามของฉันที่จะตอบคำถามนี้ฉันได้ขุดข้อมูลที่น่าสนใจเกี่ยวกับ schedulers และเครื่องมือที่อาจช่วยให้เข้าใจสิ่งนี้:

คำตอบ:


7

หากคุณอ่านจาก md0 จะใช้ readahead สำหรับ md0 หากคุณทำการอ่านจาก sda ซึ่งเป็นองค์ประกอบของ md0 มันจะใช้การตั้งค่า sda ตัวทำแผนที่อุปกรณ์แยก I / O ขึ้นเป็นหลาย ๆ การอ่านและเขียนเพื่อทำ RAID แต่นั่นคือทั้งหมดที่อยู่ด้านล่างของชั้นแคชบล็อกที่ readahead เกิดขึ้น สแตกที่จัดเก็บดูเหมือนว่า:

ระบบไฟล์ - ข้ามแคชเมื่อคุณเปิดด้วย O_DIRECT

block cache - อ่านแล้วเขียนแคชตัวกำหนดตารางเวลา

อุปกรณ์ mapper - dm, lvm, RAID ซอฟต์แวร์, สแน็ปช็อต ฯลฯ

sd - ไดรเวอร์ดิสก์

SCSI - การจัดการข้อผิดพลาดการกำหนดเส้นทางอุปกรณ์

ไดรเวอร์ฮาร์ดแวร์ - การ์ด scsi, การ์ด FC, อีเธอร์เน็ต

โปรดทราบว่าเมื่อคุณทำ

dd if=/dev/sda of=foo

คุณกำลังอ่าน sda เป็นไฟล์ดังนั้นคุณจะผ่านบล็อกแคช หากต้องการไปยังดิสก์โดยตรงให้ทำ

dd if=/dev/sda of=foo iflag=direct

สำหรับ I / O ตัวกำหนดเวลาลิฟท์จะมีเฉพาะในไดรเวอร์ดิสก์ (sd) เท่านั้น ไม่มีไดเร็กทอรีคิวภายใต้ / sys / block / md หรือ / sys / block / dm คุณผ่านการจัดเรียงดิสก์ลิฟท์ครั้งเดียวเท่านั้น


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