หลังจากติดตั้ง Ubuntu Studio 12.04 ฉันพบว่าใช้เคอร์เนล latency ต่ำ ฉันค้นหาสาเหตุและวิธีการเปลี่ยนกลับเป็นเรียลไทม์หรือทั่วไป แต่ดูเหมือนว่าส่วนนี้ของ Linux จะไม่ครอบคลุมมาก
ถาม:เหตุใดจึงต้องเลือกเคอร์เนลเวลาแฝงต่ำกับเคอร์เนลทั่วไปหรือเรียลไทม์
หลังจากติดตั้ง Ubuntu Studio 12.04 ฉันพบว่าใช้เคอร์เนล latency ต่ำ ฉันค้นหาสาเหตุและวิธีการเปลี่ยนกลับเป็นเรียลไทม์หรือทั่วไป แต่ดูเหมือนว่าส่วนนี้ของ Linux จะไม่ครอบคลุมมาก
ถาม:เหตุใดจึงต้องเลือกเคอร์เนลเวลาแฝงต่ำกับเคอร์เนลทั่วไปหรือเรียลไทม์
คำตอบ:
คำแนะนำง่ายๆเหล่านี้มีไว้เพื่อช่วยให้คุณเข้าใจว่าเคอร์เนลใดและในลำดับใดคุณควรทดสอบเพื่อให้เหมาะกับกรณีการใช้งานของคุณ
- หากคุณไม่ต้องการเวลาแฝงต่ำสำหรับระบบของคุณโปรดใช้ -generic kernel
- หากคุณต้องการระบบ latency ต่ำ (เช่นสำหรับการบันทึกเสียง) โปรดใช้ -preempt kernel เป็นตัวเลือกแรก สิ่งนี้ช่วยลดเวลาในการตอบสนอง แต่ไม่ลดทอนคุณสมบัติการประหยัดพลังงาน มันสามารถใช้ได้เฉพาะกับระบบ 64 บิต (หรือที่เรียกว่า amd64)
- หากเคอร์เนล -preempt ไม่ได้ให้เวลาแฝงที่ต่ำเพียงพอสำหรับความต้องการของคุณ (หรือคุณมีระบบ 32 บิต) ดังนั้นคุณควรลองใช้ -lowlatency kernel
- หากเคอร์เนล -lowlatency ไม่เพียงพอคุณควรลองใช้ -rt kernel
- หากเคอร์เนล -rt ไม่เสถียรพอสำหรับคุณคุณควรลองใช้ -realtime kernel
ดังนั้นขึ้นอยู่กับว่าคุณจะทำอย่างไรกับสตูดิโอ distro ของคุณ สำหรับผู้ใช้ส่วนใหญ่ที่ต้องการเวลาตอบสนองผู้ใช้อย่างรวดเร็วทั่วไปจะทำได้ดีสำหรับผู้อื่นที่ต้องทำการตัดต่อวิดีโอระดับมืออาชีพที่แม้แต่การวางเฟรมแบบธรรมดาก็ไม่สามารถยอมรับได้เคอร์เนลแบบเรียลไทม์จำเป็นต้องใช้
สำหรับโพสต์บล็อกที่เข้าใจง่ายกว่านี้ให้อ่านลิงค์นี้
-preempt
, -rt
และ-realtime
เมล็ดไม่มีอีกต่อไป
ฉันเป็นผู้เขียนบล็อกโพสต์ที่เชื่อมโยงกับแฟน ๆ ของ ubuntu: http://sevencapitalsins.wordpress.com/2007/08/10/low-latency-kernel-wtf/
บล็อกโพสต์ที่ไม่ได้นำเสนอความเป็นจริงใด ๆ ก็เป็นเพียงทฤษฎี เป็นวิธีที่ใช้งานได้จริง: โปรเซสเซอร์ "หยุด" บ่อยขึ้นเพื่อดูว่ามีบางกระบวนการที่ต้องให้ความสนใจทันที นั่นหมายความว่ากระบวนการเหล่านั้นจะถูกดำเนินการก่อนกระบวนการอื่นดังนั้นคุณจะไม่ข้ามเฟรมขณะเข้ารหัสหรือมีเวลาหน่วงอย่างมากระหว่างการคลิกเมาส์และการเสียชีวิตของศัตรู ไม่ได้หมายความว่ากระบวนการทั้งหมดจะสิ้นสุดเร็วกว่า: จริง ๆ แล้ว CPU กำลังสูญเสียส่วนใหญ่ในการตัดสินใจว่ากระบวนการใดที่จะถูกประมวลผลถัดไปและทำการสลับบริบท ดังนั้นเวลาในการดำเนินการทั้งหมดจึงนานกว่าและนั่นคือสาเหตุที่ไม่มีใครสามารถใช้งานเคอร์เนลที่สามารถจองได้บนเว็บเซิร์ฟเวอร์หรือเครื่องฐานข้อมูล แต่เคอร์เนล 300Hz (หรือแม้แต่ 1,000 เฮิร์ตซ์) ที่สามารถครอบครองได้นั้นดีที่สุดสำหรับเซิร์ฟเวอร์เกม
แต่ทุกวันนี้โปรเซสเซอร์มีคอร์มากมายดังนั้นเมื่อมีกระบวนการไม่กี่กระบวนการที่ต้องให้ความสนใจพวกเขาสามารถจัดสรรได้อย่างง่ายดายบนแกนที่แตกต่างกันแทนที่จะรอแกนที่จะเอามัน
(stackexchange กำหนดให้ฉันอ้างอิง / ประสบการณ์ส่วนตัว: ฉันเป็นวิศวกรอิเล็กทรอนิกส์, noobgamer กระหายเลือดที่ต้องดูแลเซิร์ฟเวอร์เกมหลายตัวที่http://www.gamezoo.it )
ดังนั้นตามกฎทั่วไปแล้วฉันจะพูดว่า: หากโปรเซสเซอร์ของคุณเป็นควอดคอร์ความถี่สูงที่ทรงพลังจำนวนมากและคุณไม่ได้เปิดเว็บเพจเป็นจำนวนมากในขณะที่เข้ารหัส / ถอดรหัส / เล่นเกม (huh) คุณสามารถทำได้ เพียงแค่ลองใช้เคอร์เนลทั่วไป (หรือ i686 หรือ amd64 ถ้ามี) เคอร์เนลและมีปริมาณงานที่เป็นไปได้สูงสุด (เช่นจำนวนดิบที่ทำให้หน่วยประมวลผลสามารถทำงานได้) หากคุณประสบปัญหา (ควรเป็นเรื่องเล็กน้อยจริง ๆ ) หรือเครื่องของคุณมีพลังน้อยกว่าด้านบนของตลาดเล็กน้อยให้ไปที่ -preempt
หากคุณอยู่ในเครื่องต่ำสุดที่มีเพียงหนึ่งหรือสองแกนแล้วลอง -lowlatency คุณสามารถลองใช้ - เรียลไทม์ แต่คุณจะพบว่ามันมีแนวโน้มที่จะบล็อกกระบวนการจนกว่า "เรียลไทม์" จะเสร็จสิ้นงานของพวกเขา ฉันเชื่อว่าเคอร์เนลเรียลไทม์ไม่ใช่ "วานิลลา" อันใดอันหนึ่ง แต่มีการใช้โปรแกรมแก้ไข CONFIG_PREEMPT_RT ฉันคิดว่าเมล็ดเรียลไทม์มีไว้สำหรับผู้ที่ต้องสร้างแอปพลิเคชันเดียวบนระบบฝังตัวดังนั้นผู้ใช้เดสก์ท็อปทั่วไปจึงไม่ควรได้รับประโยชน์ที่แท้จริงเพราะพวกเขามักจะเรียกใช้แอพพลิเคชั่นจำนวนมากในเวลาเดียวกัน
ในที่สุดตัวเลือกเคอร์เนลที่เกี่ยวข้องมากที่สุดหากคุณต้องการคอมไพล์เคอร์เนลของคุณเองเพื่อให้มีเดสก์ท็อปเวลาแฝงต่ำคือ:
PREEMPT=y
และ:
CONFIG_1000_HZ=y
หากต้องการเพิ่มพลังบางอย่างคุณสามารถเลือกตัวเลือกนี้:
CONFIG_NO_HZ=y
จากเอกสารที่อ้างถึงข้างต้น ( http://www.versalogic.com/mediacenter/whitepapers/wp_linux_rt.asp )
บทความกล่าวว่าเคอร์เนลแบบเรียลไทม์ที่ตอบสนองหรือ จำกัด เวลาเป็นคุณสมบัติที่สำคัญที่สุดดังนั้นบางครั้งพวกเขาก็เลื่อนกิจกรรมที่ไม่สำคัญซึ่งนำไปสู่ความล่าช้า แต่สำหรับ lowlatency หรือเคอร์เนลแบบเรียลไทม์อื่น ๆ พยายามลดเวลาแฝงทั่วไป เนื่องจากเวลาแฝงที่ลดลงระบบจึงดูเหมือนรวดเร็ว อ่านบทความอย่างละเอียด
ฉันมีแล็ปท็อปเครื่องเก่าที่มี dual AMD A6-4400M ที่ 1600MHz ซึ่งฉันใช้อย่างไม่ จำกัด เมื่อฉันไม่อยู่ที่สำนักงานส่วนใหญ่จะอ่านอีเมลและเรียกดูเว็บไซต์ทั่วไป มีบางอย่างอาจเชื่อมต่อกับการอัปเดตซอฟต์แวร์ซึ่งทำให้ไม่ตอบสนอง บางอย่างเช่นการพิมพ์ตัวละครโหลโดยไม่เห็นตัวแรก วิดเจ็ตมักถามว่าฉันควรบังคับให้ออกจากกระบวนการหรือไม่
หลังจากsudo apt-get install linux-lowlatency
รีบูตเครื่องมันก็ราบรื่นและตอบสนองได้ดี (uname -r 5.0.0-20-lowlatency.) ยอดเยี่ยมฉันควรเปลี่ยนไปหลายปีแล้ว ให้ฉันเน้นคำตอบของเซเว่น: ถ้าคุณไม่ต้องการบีบเซิร์ฟเวอร์ออกมาให้ได้จำนวนสูงสุดให้ไปที่ -preempt !
-realtime
เป็นเรียลไทม์แล้วอะไรจะเกิด-rt
ขึ้น? แล้วเกิดอะไรขึ้นกับ-preempt
เคอร์เนล? ฉันจะขอบคุณ gemue2010 เขาทำได้ดีมากอธิบาย แต่มันก็ยังไม่อธิบายทุกอย่าง