สมาร์ทโฟน Google Pixel เป็นหนึ่งในโทรศัพท์ Android ที่เร็วที่สุดในตลาด Energy Aware Scheduling (EAS) เป็นส่วนหนึ่งที่ทำให้โทรศัพท์มีความราบรื่นมาก
ย้อนกลับไปในอดีตเมื่อ Linux เป็นเพียงแนวคิดในใจของ Linus Torvalds CPU เป็นระบบแบบ single-core ซึ่งต้องใช้พลังงานจำนวนมหาศาลเพื่อใช้พลังงานเพียงเล็กน้อย โปรเซสเซอร์ตัวแรกที่วางจำหน่ายเชิงพาณิชย์ Intel 4004 ทำงานที่อัตรานาฬิกา 740kHz บนคอร์เดียว สมัยนั้นไม่จำเป็นต้องใช้ตัวกำหนดเวลาโหลด กำหนดเวลาการโหลดถูกสงวนไว้สำหรับ "ยักษ์ใหญ่" แบบดูอัลคอร์ เช่น IBM Power 4 ซึ่งออกมาไม่กี่ทศวรรษหลังจากนั้น สิ่งเหล่านี้ทำงานที่ความเร็ว 1.1GHz ถึง 1.9GHz และจำเป็นต้องมีโปรแกรมและระบบเพื่อใช้คอร์เหล่านี้อย่างถูกต้อง เรานำเครื่องเหล่านี้มาสู่อัลกอริธึมซอฟต์แวร์ที่ใช้หลายคอร์ได้อย่างไร คุณอาจเคยได้ยินเรื่อง Energy Aware Scheduling (EAS) ในฟอรัมของเรามาก่อน นี่เป็นส่วนหนึ่งของสาเหตุที่สมาร์ทโฟน Google Pixel ทำงานได้ดีมาก มีอะไรที่ยอดเยี่ยมเกี่ยวกับ EAS และเรามาถึงจุดนี้ได้อย่างไร? ก่อนที่เราจะสามารถอธิบายได้ เราต้องพูดถึงตัวกำหนดเวลาโหลดของ Linux ก่อน
วิวัฒนาการของ Linux Load Schedulers
การจัดตารางเวลาแบบ Round-Robin
การประมวลผลแบบ Round-robin เป็นแนวคิดง่ายๆ ที่จะอธิบายและทำความเข้าใจ และยังเป็นแนวคิดที่ง่ายกว่าในการเข้าใจข้อเสียอีกด้วย Round-robin ใช้การแบ่งเวลาเพื่อจัดสรรเวลาให้กับแต่ละกระบวนการ สมมติว่าเรามีสี่กระบวนการที่ทำงานอยู่บนคอมพิวเตอร์ของเรา
- กระบวนการ ก
- กระบวนการบี
- กระบวนการซี
- กระบวนการง
ตอนนี้ มาทำหน้าที่ของตัวกำหนดตารางเวลาแบบ Round-robin กันดีกว่า เราจะจัดสรร 100 มิลลิวินาที (การแบ่งเวลา) ให้กับแต่ละกระบวนการก่อนที่จะดำเนินการต่อไป ซึ่งหมายความว่ากระบวนการ A อาจใช้เวลา 100 มิลลิวินาทีในการประมวลผล จากนั้นจะย้ายไปยังกระบวนการ B และอื่นๆ หากงานของแอปพลิเคชันใช้เวลาดำเนินการ 250 มิลลิวินาที จะต้องผ่านกระบวนการนี้ 3 ครั้งจึงจะทำงานให้เสร็จ! ตอนนี้ปรับขนาดนี้ในคอร์ที่แตกต่างกัน เพื่อให้กระบวนการ A และกระบวนการ B ได้รับการจัดสรรให้กับคอร์ 1 และกระบวนการ C และกระบวนการ D ได้รับการจัดสรรให้กับคอร์ 2 สิ่งนี้ถูกแทนที่ด้วยการกำหนดเวลา O(n) (ซึ่งเหมือนกับการวนซ้ำ แต่ใช้ยุคและอนุญาตให้มีการจัดสรรแบบไดนามิกของ เวลา) จากนั้นจึงจัดกำหนดการ O(1) (ลดค่าใช้จ่าย การสนับสนุนกระบวนการไม่จำกัด) และสุดท้ายคือตัวกำหนดตารางเวลาที่ยุติธรรมโดยสมบูรณ์ (ซีเอฟเอส) CFS ถูกรวมเข้ากับเคอร์เนล Linux เวอร์ชัน 2.6.23 ในเดือนตุลาคม พ.ศ. 2550 ได้รับการแก้ไขตั้งแต่นั้นมาและยังคงเป็นตัวกำหนดตารางเวลาเริ่มต้นในระบบ Linux
กำหนดการที่ยุติธรรมโดยสมบูรณ์
The Completely Fair Scheduler มีอยู่ใน Android มาตั้งแต่เริ่มก่อตั้งและใช้กับอุปกรณ์ที่ไม่ใหญ่ อุปกรณ์เล็กๆ น้อยๆ ใช้อัลกอริธึมอัจฉริยะเพื่อกำหนดลำดับการประมวลผล การจัดสรรเวลา ฯลฯ เป็นตัวอย่างของการดำเนินการตามขั้นตอนวิธีการจัดตารางเวลาที่ได้รับการศึกษามาอย่างดีที่เรียกว่า "การจัดคิวแบบถ่วงน้ำหนักอย่างยุติธรรม" โดยพื้นฐานแล้วมุ่งเน้นไปที่การให้ความสำคัญกับกระบวนการของระบบและกระบวนการที่มีลำดับความสำคัญสูงอื่น ๆ ที่ทำงานบน เครื่องจักร. หากจะวิ่งบนทางใหญ่ๆ อุปกรณ์เล็กๆ คอร์ทั้งหมดจะถูกมองว่าเท่ากัน สิ่งนี้ไม่ดี เนื่องจากคอร์พลังงานต่ำอาจถูกบังคับให้รันแอพพลิเคชั่นที่เข้มข้น หรือแย่กว่านั้นคืออาจเกิดสิ่งที่ตรงกันข้าม การถอดรหัสเพื่อฟังเพลงอาจทำได้บนแกนหลักขนาดใหญ่ เช่น เพิ่มการใช้พลังงานโดยไม่จำเป็น นี่คือเหตุผลที่เราต้องการตัวกำหนดเวลาใหม่สำหรับงานใหญ่ LITTLE ซึ่งสามารถรับรู้และใช้ความแตกต่างในคอร์ในลักษณะประหยัดพลังงานได้จริง นั่นคือที่มาของ Heterogeneous Multi-Processing (HMP) ซึ่งเป็นตัวกำหนดเวลาโหลดมาตรฐานที่โทรศัพท์ Android ส่วนใหญ่ใช้งานอยู่ตอนนี้
การประมวลผลหลายแบบที่แตกต่างกัน
นี่คือตัวกำหนดเวลาการโหลดมาตรฐานสำหรับธุรกิจขนาดใหญ่ใดๆ อุปกรณ์เล็กๆ ที่เปิดตัวในช่วงไม่กี่ปีที่ผ่านมา นอกเหนือจาก Google Pixel HMP ใช้ประโยชน์จากสิ่งที่ยิ่งใหญ่ สถาปัตยกรรม LITTLE มอบหมายงานที่มีความสำคัญต่ำและมีความเข้มข้นน้อยกว่าให้กับคอร์เล็กๆ ที่ใช้พลังงานน้อยกว่า HMP นั้น "ปลอดภัย" โดยที่รู้ว่าอะไรควรไปที่แกนใหญ่ และอะไรควรไปที่แกนเล็ก โดยไม่ทำผิดพลาด มันใช้งานได้และต้องใช้ความพยายามน้อยกว่ามากในการตั้งค่าด้านการพัฒนามากกว่าอย่าง EAS ซึ่งเราจะพูดถึงในอีกสักครู่ HMP เป็นเพียงส่วนเสริมของ CFS เพื่อให้ทราบถึงพลังงาน
HMP ไม่มีการคาดเดาและไม่คาดการณ์กระบวนการในอนาคต นี่เป็นสิ่งที่ดี แต่เป็นสาเหตุที่อุปกรณ์ไม่สามารถลื่นไหลได้เหมือนกับอุปกรณ์ที่ใช้ EAS และเป็นสาเหตุที่ทำให้สิ้นเปลืองแบตเตอรี่มากกว่าเล็กน้อย ในที่สุดสิ่งนี้ก็นำเราไปสู่ Energy Aware Scheduling (EAS) ซึ่งฉันเชื่อมั่นอย่างยิ่งว่าจะเป็นอนาคตในการพัฒนา ROM และเคอร์เนล เนื่องจาก OEM จำนวนมากขึ้นนำมาใช้
กำหนดการตระหนักถึงพลังงาน
Energy Aware Scheduling (EAS) คือเรื่องสำคัญถัดไปที่ผู้ใช้ในฟอรัมของเรากำลังพูดถึง หากคุณใช้ OnePlus 3 (หรือ Google Pixel อย่างเห็นได้ชัด) คุณคงเคยได้ยินเรื่องนี้ในฟอรัมอย่างแน่นอน เปิดตัวสู่กระแสหลักด้วย Qualcomm Snapdragon 845 ดังนั้นหากคุณมีหนึ่งในอุปกรณ์เหล่านี้ แสดงว่าคุณมีสมาร์ทโฟนที่รองรับ EAS อยู่แล้ว EAS ในรูปแบบของเมล็ดพืช เช่น RenderZenith และ ROM เช่น VertexOS และ เพียวฟิวชั่น กำลังเข้าสู่ฟอรัม OnePlus 3 โดยพายุในช่วงที่สำคัญที่สุด แน่นอนว่า Google Pixel ก็มาพร้อมกับ EAS ด้วย ด้วยคำมั่นสัญญาว่าจะปรับปรุงอายุการใช้งานแบตเตอรี่และประสิทธิภาพที่ดีขึ้น อะไรจะเกิดขึ้น?
Energy Aware Scheduling นั้นไม่ง่ายอย่างที่คิด เพราะไม่ได้ใช้ได้กับทุกอุปกรณ์ เช่น CFS หรือ HMP EAS ต้องการความเข้าใจเกี่ยวกับโปรเซสเซอร์ที่กำลังทำงานอยู่ โดยอิงจากแบบจำลองพลังงาน แบบจำลองพลังงานเหล่านี้สร้างขึ้นโดยทีมวิศวกรที่ทำการทดสอบและทำงานอย่างต่อเนื่องเพื่อให้ได้ประสิทธิภาพสูงสุด เนื่องจากโดยพื้นฐานแล้ว Snapdragon 820 และ 821 เหมือนกัน เคอร์เนลแบบกำหนดเองบน OnePlus 3 จึงใช้โมเดลพลังงานของ Google Pixel อุปกรณ์ที่มี Snapdragon 845 สามารถใช้ EAS ได้และ OnePlus 6 ก็ทำได้ในระดับหนึ่ง ไม่ได้รับการปรับแต่งเหมือนอุปกรณ์ Google Pixel แต่จะทำให้งานสำเร็จ นี่คือตัวอย่างว่าแม้ว่า OnePlus 6 จะมีโปรเซสเซอร์ที่ดีกว่าด้วย EAS แต่ Pixel 2 XL ก็ยังคงเต้นได้อย่างราบรื่น ภาพทั้งสองนี้นำมาจากเรา การทบทวนที่เน้นความเร็ว ของ OnePlus 6
หากคุณมีปัญหาในการทำความเข้าใจกราฟ โปรดดูภาพด้านล่างเพื่อเป็นแนวทาง สิ่งใดที่เกินเส้นสีเขียวแสดงว่าเฟรมหลุด และในกรณีที่แย่ที่สุด อาจมีอาการกระตุกอย่างเห็นได้ชัด
การใช้งาน EAS ของ OnePlus 6 นั้นน่าสนใจ เนื่องจากดูเหมือนว่าจะไม่ใช่การใช้งานที่ครบครันเหมือนที่พบใน Google Pixel ที่มี SoC เดียวกัน การปรับตัวกำหนดตารางเวลาก็ไม่สมเหตุสมผลเช่นกัน ดังนั้นนั่นอาจอธิบายได้ว่าเหตุใดประสิทธิภาพจึงไม่มีประสิทธิภาพเท่าที่คุณคาดหวัง มีการอนุรักษ์พลังงานอย่างมาก โดยระบบจะจัดลำดับความสำคัญของคอร์ที่ใช้พลังงานต่ำสำหรับงานส่วนใหญ่
การปรับค่าเป็นเพียงชุดของพารามิเตอร์ที่ส่งผ่านไปยัง CPU Governor ซึ่งจะเปลี่ยนวิธีที่ Governor ตอบสนองต่อสถานการณ์บางอย่างในแง่ของความถี่ ตัวกำหนดเวลาจะตัดสินใจว่าจะวางงานไว้ที่ใดบนโปรเซสเซอร์ที่แตกต่างกัน การปรับแต่งของ OnePlus 6 ได้รับการตั้งค่าให้จัดลำดับความสำคัญการทำงานบนคอร์ที่ใช้พลังงานต่ำ นอกจากนี้ยังไม่ได้ช่วยให้ Google Pixel 2 มีอินพุตเพิ่มขึ้นอย่างมาก ทำให้ทั้ง 8 คอร์ออนไลน์อยู่ตลอดเวลา Google ยังใช้ไฟล์ ขัดจังหวะบาลานเซอร์ ซึ่งช่วยลบการตกของเฟรมและปรับปรุงประสิทธิภาพ
EAS ทำงานอย่างไร? เหตุใดจึงมีประสิทธิภาพเฉพาะในบางเงื่อนไขเท่านั้น
Energy Aware Scheduling นำเสนอความจำเป็นในการใช้แบบจำลองพลังงาน และตามที่กล่าวไว้ข้างต้นจำเป็นต้องมีการทดสอบและการทำงานอย่างมากเพื่อทำให้สมบูรณ์แบบ EAS พยายามที่จะรวมส่วนหลักที่แตกต่างกันสามส่วนของเคอร์เนลซึ่งทั้งหมดทำหน้าที่อย่างเป็นอิสระ และแบบจำลองพลังงานช่วยในการรวมส่วนเหล่านั้นเข้าด้วยกัน
- ตัวกำหนดเวลา Linux (CFS ที่กล่าวถึงข้างต้น)
- ซีพียู Linux
- ความถี่ซีพียูของลินุกซ์
การรวมทั้ง 3 ส่วนเข้าด้วยกันภายใต้ตัวกำหนดตารางเวลาและการคำนวณร่วมกันทำให้มีศักยภาพในการประหยัดพลังงาน เนื่องจากการคำนวณร่วมกันทำให้มีประสิทธิภาพมากที่สุดเท่าที่จะเป็นไปได้ CPUIdle พยายามตัดสินใจว่าเมื่อใดที่ CPU ควรเข้าสู่โหมดไม่ได้ใช้งาน ในขณะที่ CPUFreq พยายามตัดสินใจว่าเมื่อใดควรเพิ่มหรือลด CPU โมดูลทั้งสองนี้มีเป้าหมายหลักในการประหยัดพลังงาน ไม่เพียงเท่านั้น ยังแบ่งหมวดหมู่กระบวนการออกเป็นสี่กลุ่ม ได้แก่ แอปยอดนิยม พื้นหลังระบบ เบื้องหน้า และพื้นหลัง งานที่ถึงกำหนดจะถูกจัดอยู่ในหมวดหมู่ใดประเภทหนึ่งเหล่านี้ จากนั้นหมวดหมู่ดังกล่าวจะได้รับพลังของ CPU และงานจะถูกมอบหมายไปยังคอร์ CPU ที่แตกต่างกัน top-app คือลำดับความสำคัญสูงสุดของการทำให้เสร็จสมบูรณ์ ตามด้วยพื้นหน้า พื้นหลัง และพื้นหลังของระบบ ในทางเทคนิคแล้ว พื้นหลังจะมีลำดับความสำคัญเช่นเดียวกับพื้นหลังของระบบ แต่พื้นหลังของระบบมักจะมีสิทธิ์เข้าถึงคอร์ที่เล็กกว่าด้วย ผลที่ได้คือ Energy Aware Scheduling กำลังนำส่วนหลักของเคอร์เนล Linux และรวมทั้งหมดไว้ในกระบวนการเดียว
เมื่อปลุกอุปกรณ์ EAS จะเลือกแกนหลักที่อยู่ในสถานะไม่ได้ใช้งานที่ตื้นที่สุด ซึ่งจะช่วยลดพลังงานที่จำเป็นในการปลุกอุปกรณ์ ซึ่งจะช่วยลดพลังงานที่จำเป็นในการใช้อุปกรณ์ เนื่องจากจะไม่ปลุกคลัสเตอร์ขนาดใหญ่หากไม่จำเป็น การติดตามโหลดก็เป็นส่วนที่สำคัญอย่างยิ่งของ EAS และมีสองตัวเลือก โดยปกติแล้ว "การติดตามโหลดต่อเอนทิตี" (PELT) ใช้สำหรับการติดตามโหลด จากนั้นข้อมูลจะถูกนำมาใช้เพื่อตัดสินใจความถี่และวิธีมอบหมายงานทั่วทั้ง CPU "การติดตามโหลดแบบช่วยหน้าต่าง" (WALT) ก็สามารถใช้ได้เช่นกัน และเป็นสิ่งที่ใช้กับ Google Pixel EAS ROM จำนวนมากในฟอรัมของเรา เช่น VertexOS เลือกใช้ WALT ROM จำนวนมากจะปล่อยเคอร์เนลสองเวอร์ชันพร้อม WALT หรือ PELT ดังนั้นจึงขึ้นอยู่กับผู้ใช้ในการตัดสินใจ WALT มีความถี่มากขึ้น โดยมีความถี่ CPU สูงสุดในขณะที่ PELT พยายามที่จะคงความสม่ำเสมอมากขึ้น ตัวติดตามโหลดไม่ได้ส่งผลต่อความถี่ของ CPU จริงๆ เพียงแต่บอกระบบว่าการใช้งาน CPU อยู่ที่ใด การใช้งาน CPU ที่สูงขึ้นจำเป็นต้องมีความถี่ที่สูงขึ้น ดังนั้นลักษณะที่สอดคล้องกันของ PELT ก็คือทำให้ความถี่ของ CPU เพิ่มขึ้นหรือลดลงอย่างช้าๆ PELT มีแนวโน้มที่จะหันไปใช้การรายงานโหลด CPU ที่สูงขึ้น ดังนั้นจึงอาจให้ประสิทธิภาพที่สูงขึ้นโดยที่ต้นทุนแบตเตอรี่สูงขึ้น อย่างไรก็ตาม ณ จุดนี้ไม่มีใครสามารถพูดได้ว่าระบบติดตามโหลดแบบใดดีกว่ากัน เนื่องจากวิธีการติดตามโหลดทั้งสองวิธีได้รับการปรับปรุงและปรับปรุงอย่างต่อเนื่อง
ไม่ว่าจะด้วยวิธีใด เห็นได้ชัดว่าไม่ว่าจะใช้วิธีติดตามโหลดแบบใด ประสิทธิภาพก็เพิ่มขึ้น แทนที่จะแค่ประมวลผลงานบนโปรเซสเซอร์ใดๆ งานนั้นจะได้รับการวิเคราะห์และประมาณปริมาณพลังงานที่ต้องใช้ในการรัน การจัดวางงานที่ชาญฉลาดนี้หมายความว่างานต่างๆ จะเสร็จสมบูรณ์ได้อย่างมีประสิทธิภาพมากขึ้น ในขณะเดียวกันก็ทำให้ระบบโดยรวมเร็วขึ้นอีกด้วย EAS เป็นเรื่องเกี่ยวกับการทำให้ UI ราบรื่นที่สุดเท่าที่จะเป็นไปได้โดยใช้พลังงานน้อยที่สุด นี่คือจุดที่องค์ประกอบภายนอกอื่นๆ เช่น schedtune เข้ามามีบทบาท
Schedtune ถูกกำหนดไว้ในแต่ละกลุ่ม cgroup โดยสอง tunables ซึ่งช่วยให้ควบคุมงานที่จะเสร็จสมบูรณ์ได้ละเอียดยิ่งขึ้น มันไม่เพียงแค่ควบคุมการกระจายงานบน CPU หลายตัวเท่านั้น แต่ยังควบคุมว่าภาระที่รับรู้ควรเพิ่มขึ้นหรือไม่ เพื่อให้แน่ใจว่างานที่ต้องคำนึงถึงเวลาจะเสร็จเร็วขึ้น ด้วยวิธีนี้ แอปพลิเคชันและบริการเบื้องหน้าที่ผู้ใช้ใช้งานอยู่จะไม่ทำให้ช้าลงและทำให้เกิดปัญหาด้านประสิทธิภาพที่ไม่จำเป็น
แม้ว่าการจัดกำหนดการ Energy Aware จะเป็นประเด็นสำคัญถัดไป แต่ก็สามารถโต้แย้งได้ว่ามันเกิดขึ้นแล้วและดำเนินมาระยะหนึ่งแล้ว เนื่องจากมีอุปกรณ์จำนวนมากขึ้นเรื่อยๆ ที่เข้าสู่กระแสหลักด้วย Energy Aware Scheduling ยุคใหม่ของประสิทธิภาพการประมวลผลบนมือถือจึงมาถึงแล้ว
ข้อดีและข้อเสียของ Round-Robin, CFS, HMP และ EAS
แม้ว่าทักษะด้านกราฟิกของฉันจะด้อยกว่า แต่ฉันได้รวบรวมรูปภาพที่ควรสรุปว่าข้อดีและข้อเสียของตัวกำหนดเวลาแต่ละรายการคืออะไร
ฉันอยากจะขอขอบคุณเป็นพิเศษต่อ XDA Recognized Contributor มอสตาฟา เวล ซึ่งการอธิบายแง่มุมต่างๆ ของ EAS มีส่วนช่วยอย่างมากในการทำให้บทความนี้เกิดขึ้นได้ ฉันอยากจะขอบคุณ XDA Recognized Developer ด้วย ร่าเริง, XDA นักพัฒนาที่ได้รับการยอมรับ แสดงผลหัก และ Mostafa Wael สำหรับการเขียนของเขาบน EAS. สำหรับผู้ที่พบความสนใจในส่วนที่เกี่ยวข้องกับ EAS Linaro มีเอกสารมากมายเกี่ยวกับ EAS ที่คุณสามารถอ่านได้