ทำไม Ubuntu 16.04 จึงตั้งค่า IO schedulers ทั้งหมดเป็น“ กำหนดเวลา”?


17

ฉันเพิ่งติดตั้ง Xubuntu 16.04-64 บิตไปยังพาร์ติชันที่สองในแล็ปท็อปของฉัน ฉันสังเกตุว่ามันช้าในบางครั้งดังนั้นฉันจึงตรวจสอบว่าตัวกำหนดตารางเวลา IO ที่ใช้กับไดรฟ์นั้นซึ่งกลายเป็นdeadlineไดรฟ์ทั้งหมด ฉันมี SSD และฮาร์ดไดรฟ์อยู่สองตัวดังนั้นฉันจึงรู้ว่า "กำหนดเวลา" ดีที่สุดสำหรับ SSD และcfqฮาร์ดไดรฟ์

ฉันบูทเข้าไปใน 14.04 บนพาร์ติชั่นอื่นและใช้cfqสำหรับไดรฟ์หมุนและdeadlineSSD ตามที่ควรจะเป็น ฉันก็มองไปที่/etc/udev/rules.dเพื่อดูว่า 14.04 ใช้กฎเพื่อกำหนดประเภทของไดรฟ์ แต่มันไม่ได้อยู่ที่นั่นดังนั้นฉันคิดว่าเคอร์เนลกำลังทำอยู่

ดังนั้นฉันสงสัยว่านี่เป็นข้อผิดพลาดหรือพวกเขากำลังใช้ "กำหนดเวลา" สำหรับทุกสิ่งตอนนี้หรือไม่

อัปเดต:ความคิดเห็นที่ฉันเขียนเกี่ยวกับ /etc/udev/rules.d เป็นข้อผิดพลาด ในความเป็นจริงฉันใช้กฎ udev เพื่อเปลี่ยนตัวกำหนดตารางเวลา (เช่นเดียวกับคำตอบด้านล่าง) ตามประเภทการหมุนตั้งแต่ฉันเริ่มใช้ SSD ย้อนหลังไม่กี่ปี ฉันเดาว่าฉันลืม ... แก่แล้ว อย่างไรก็ตามหนึ่งของการอ้างอิงที่ผมใช้เป็นDebian SSD เพิ่มประสิทธิภาพของวิกิพีเดีย

มันจะไม่เป็นความคิดที่ดีถ้ามันรวมอยู่? เพียงข้อเสนอแนะ!

คำตอบ:


6

ด้วยการเปิดตัวที่ 14.04 ตารางเวลาเริ่มต้นสำหรับ 3.13 เคอร์เนลก็เปลี่ยนจาก CFQ การกำหนดเส้นตาย

ไม่มีใครอีกแล้วเคอร์เนลเซิร์ฟเวอร์ที่แยกต่างหากและ sheduler CFQ จะไม่เหมาะกับสถานการณ์การใช้งานเซิร์ฟเวอร์จำนวนมากเช่นหมดเวลา KVM เขียน มีประสิทธิภาพการทำงานที่ถดถอยแม้กระทั่งบนเดสก์ทอปกับมีอุปกรณ์ USB


1
ขอบคุณสำหรับการอ่านที่ให้ความกระจ่างมาก! ปัญหา USB ที่ฉันเคยมีกับการ์ด SD และแท็บเล็ต Android ใน TWRP ในระยะหลังมันจะวางสายในตอนท้ายเป็นเวลาหลายนาที ปัญหา KVM ไม่เคยปรากฏบนแขก VB ของฉันเนื่องจากพวกเขาอยู่ใน SSD ด้วยเส้นตายของฉัน
curt54

32

ทีมงานเคอร์เนลของ Ubuntu ทำการวิเคราะห์ปริมาณงานจำลองต่าง ๆ เป็นประจำบนระบบไฟล์และ I / O schedulers เพื่อรับทราบแนวคิดของตัวเลือกกำหนดการทั่วไป I / O ที่ดีที่สุด คำตอบทั่วไปคือไม่มีตัวเลือกตัวกำหนดตารางเวลา I / O ที่สมบูรณ์แบบสำหรับการกำหนดค่าทั่วไปในการติดตั้งชนิดต่าง ๆ สำหรับสื่อประเภทต่าง ๆ ทั้งหมด จุดสำคัญที่ควรจำคือ:

  1. ระบบกำลังเคลื่อนย้ายไปยัง SSD ดังนั้น noop หรือกำหนดเวลาดีที่สุดสำหรับสิ่งเหล่านี้ noop มีค่าใช้จ่ายของ CPU น้อยกว่ากำหนด

  2. CFQ vs Deadline เป็นการเรียกที่ยาก CFQ ช่วยให้มีความยืดหยุ่นมากขึ้น อย่างไรก็ตามเราพบว่าสำหรับการดำเนินการจำลอง I / O ที่กว้างขึ้นกำหนดเวลาส่งมอบเวลาแฝงที่ต่ำกว่าและปริมาณงานที่สูงกว่า CFQ เล็กน้อย

  3. ฉันวัดมาตรฐานเมล็ดอย่างสม่ำเสมอ (การทดสอบเคอร์เนลแต่ละครั้งใช้เวลามากกว่า 3 วัน) สำหรับช่วงของระบบไฟล์และ I / O schedulers จากข้อมูลนี้และข้อมูลอื่น ๆ ที่หลากหลายเราพยายามทำการตัดสินใจอย่างชาญฉลาดเกี่ยวกับตัวเลือกที่ดีที่สุดโปรดดู:

http://kernel.ubuntu.com/~cking/fs-tests/

มีข้อดีข้อเสียของ I / O schedulers ทั้งหมดดังนั้นค่าเริ่มต้นใด ๆ ที่ไม่สมบูรณ์และทีมเคอร์เนลของ Ubuntu ยินดีที่จะป้อนข้อมูลให้กับตัวเลือกเริ่มต้นเสมอหากข้อมูลที่น่าสนใจและเหตุผลแสดงให้เราเห็นการเปลี่ยนแปลงเป็นอย่างอื่น


5
เราได้ย้ายไปใช้ CFQ เป็นค่าเริ่มต้นสำหรับเคอร์เนล Ubuntu Zesty และยังเปิดใช้งาน CONFIG_BLK_WBT_MQ ใหม่ (การควบคุมปริมาณการเขียนย้อนกลับแบบหลายค่า) เนื่องจากจะช่วยแก้ไขปัญหาการเขียนแคชสกปรกด้วยอุปกรณ์ช้าเช่นอุปกรณ์แฟลช
โคลินเอียนคิง

1
บางทีเราอาจจะเห็นว่า BFQ เป็นค่าเริ่มต้นในขณะนี้ที่อยู่ในเคอร์เนล 4.12?
JauntyDoe

เราจะประเมินสิ่งนี้สำหรับ 4.12 / 4.13 ฉันได้ทำการทดสอบเบื้องต้นกับ kyber ด้วย แต่ฉันจะกลับมาตรวจสอบอีกครั้งเมื่อ 4.12 หมดในสัปดาห์นี้
โคลินเอียนคิง

ในหลักการคำถามนี้เป็นเพียงเกี่ยวกับเคอร์เนล 16.04 แต่ก็ยังมาในการค้นหา :-) ดังนั้นนี่คือการปรับปรุงเพิ่มเติมล่าสุด: อูบุนตูได้เปลี่ยนกลับไป CFQ จับคู่เริ่มต้นต้นน้ำใน Ubuntu 17.04 (zesty)ถึง18.10 (จักรวาล)
sourcejedi

1
อัปเดตเพิ่มเติม: Linux ปิดการใช้งาน WBT เมื่อใช้ CFQ หรือ BFQ (อย่างน้อยที่สุดก็เป็นค่าเริ่มต้น) เพราะมันทำงานได้ไม่ดีนัก 2) หากคุณต้องการประเมินปัญหาที่แก้ไขโดย WBT ฉันคิดว่าคุณต้องระวังปัญหาที่แตกต่างกันระหว่างอุปกรณ์ (เฟิร์มแวร์ที่แตกต่างกัน) ในผลลัพธ์การวัดประสิทธิภาพของคุณฉันไม่สามารถแม้แต่จะค้นหาว่ามีการใช้อุปกรณ์ประเภทใด 3) ฉันอยากรู้เกี่ยวกับคำอธิบายของคุณเกี่ยวกับสิ่งที่ WBT แก้ไข ถ้าคุณดูจดหมายปะหน้าใน v2 ของชุดแพตช์ WBT WBT ถูกออกแบบมาเพื่อจัดการบัฟเฟอร์ที่เขียนบนแฟลชเร็วซึ่งอาจมีคิวที่ลึกมากและหลีกเลี่ยงผู้อ่านที่อดอยากบนอุปกรณ์เดียวกัน
sourcejedi

9

ฉันไม่รู้ว่าทำไมนักพัฒนาตัดสินใจเลือกdeadlineเป็นตัวกำหนดตารางเวลาเริ่มต้นอาจเป็นเพราะคอมพิวเตอร์ส่วนใหญ่มาพร้อมกับ SSD ซึ่งโดยปกติระบบจะติดตั้ง คุณสามารถตั้งตัวกำหนดตารางเวลาด้วยตนเองได้ด้วยวิธีนี้ในกรณีที่คุณยังไม่ได้ติดตั้ง ... ติดตั้งgksu:

เปิดเทอร์มินัลแล้วดำเนินการ:

sudo apt install gksu  

จากนั้นดำเนินการคำสั่งนี้:

gksudo gedit /etc/udev/rules.d/60-schedulers.rules  

วางข้อความต่อไปนี้ลงในไฟล์เปล่าแล้วบันทึกไฟล์ที่เปลี่ยนแปลง

# set cfq scheduler for rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="cfq"

# set deadline scheduler for non-rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"  

รีบูทระบบปฏิบัติการและตอนนี้คุณกำลังใช้ตัวกำหนดเวลาที่ดีที่สุดสำหรับ HDD และ SSD


ใช่นี่คือสิ่งที่ฉันได้ใช้ตามการปรับปรุงของฉันในคำถาม แต่ฉันคิดว่าเนื่องจากเป็นเรื่องธรรมดาในปัจจุบันที่มีไดรฟ์ทั้งสองประเภทพวกเขาจึงมีกฎนี้รวมอยู่ในการกระจาย Linux ทั้งหมด
curt54
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.