Linux จัดการกับดิสก์ที่ทำงานพร้อมกัน IO ได้อย่างไร


12

เมื่อเซิร์ฟเวอร์ Linux ให้บริการการร้องขอพร้อมกันจำนวนมากเพื่ออ่านไฟล์ที่แตกต่างกันให้ทำดังนี้

  1. หา File_1 อ่านไฟล์ทั้งหมดแล้วหา File_2 อ่านไฟล์ทั้งหมดแล้วหา File_3 ฯลฯ

  2. หา File_1 อ่านส่วนหนึ่งของมัน (มากถึงค่า readahead?) จากนั้นหา File_2 อ่านส่วนหนึ่งแล้วหากลับไปที่ File_1 ที่เหลือทิ้งอ่านเพิ่มเติมจากนั้นลองหา File_3 ฯลฯ ฯลฯ

หากเป็นกรณีที่ 2 เซิร์ฟเวอร์จะทำการค้นหามากกว่าที่จำเป็นซึ่งจะทำให้ช้าลงอย่างมาก ในกรณีนั้นมีการปรับแต่งอะไรที่ฉันสามารถทำได้?

คำตอบ:


14

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

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

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

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


5

ใน Linux คุณสามารถกำหนดวิธีการตั้งเวลาของคุณเองคุณมีความเป็นไปได้ที่แตกต่างกันที่ผมต้องทำชิ้นในนั้นที่โรงเรียนและนี้บทความจาก Red Hat ช่วยฉันมาก แม้ว่ามันจะเป็นเฉพาะสำหรับ Red Hat คุณสามารถค้นหา schedulers เหล่านี้ในทุก distro linux

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