เราคือทีมเครื่องมือ LLVM ของ Android สิ่งสำคัญอันดับต้นๆ ของเราคือการปรับปรุงประสิทธิภาพของ Android ผ่านเทคนิคการเพิ่มประสิทธิภาพในระบบนิเวศ LLVM เรามองหาวิธีทำให้ Android เร็วขึ้น ลื่นขึ้น และมีประสิทธิภาพมากขึ้นอยู่เสมอ แม้ว่าการเพิ่มประสิทธิภาพส่วนใหญ่จะเกิดขึ้นในพื้นที่ผู้ใช้ แต่เคอร์เนลยังคงเป็นหัวใจสำคัญของระบบ วันนี้เรายินดีที่จะแชร์วิธีที่เรานำ Automatic Feedback-Directed Optimization (AutoFDO) มาใช้กับเคอร์เนลของ Android เพื่อมอบประสิทธิภาพที่ดียิ่งขึ้นแก่ผู้ใช้
AutoFDO คืออะไร
ในระหว่างการสร้างซอฟต์แวร์มาตรฐาน คอมไพเลอร์จะตัดสินใจเล็กๆ น้อยๆ หลายพันครั้ง เช่น จะแทรกฟังก์ชันในบรรทัดหรือไม่ และมีแนวโน้มที่จะใช้กิ่งใดของเงื่อนไข โดยอิงตามคำแนะนำโค้ดแบบคงที่ แม้ว่าฮิวริสติกเหล่านี้จะมีประโยชน์ แต่ก็ไม่ได้คาดการณ์การดำเนินการโค้ดได้อย่างแม่นยำเสมอไปในระหว่างการใช้งานโทรศัพท์ในชีวิตจริง
AutoFDO จะเปลี่ยนแปลงสิ่งนี้โดยใช้รูปแบบการดำเนินการในชีวิตจริงเพื่อเป็นแนวทางให้คอมไพเลอร์ รูปแบบเหล่านี้แสดงเส้นทางการดำเนินการคำสั่งที่พบบ่อยที่สุดซึ่งโค้ดใช้ในระหว่างการใช้งานจริง โดยบันทึกประวัติการแยกสาขาของ CPU แม้ว่าข้อมูลนี้จะรวบรวมจากอุปกรณ์ของกองยานพาหนะได้ แต่สำหรับเคอร์เนล เราจะสังเคราะห์ข้อมูลในสภาพแวดล้อมของห้องทดลองโดยใช้ภาระงานที่เป็นตัวแทน เช่น การเรียกใช้แอปยอดนิยม 100 อันดับแรก เราใช้โปรไฟล์เลอร์แบบสุ่มตัวอย่างเพื่อบันทึกข้อมูลนี้ โดยจะระบุว่าส่วนใดของโค้ดที่ "ร้อน" (ใช้บ่อย) และส่วนใดที่ "เย็น" เมื่อสร้างเคอร์เนลใหม่ด้วยโปรไฟล์เหล่านี้ คอมไพเลอร์จะตัดสินใจเพิ่มประสิทธิภาพได้อย่างชาญฉลาดมากขึ้น ซึ่งปรับให้เหมาะกับปริมาณงานจริงของ Android
เพื่อให้เข้าใจผลกระทบของการเพิ่มประสิทธิภาพนี้ ให้พิจารณาข้อเท็จจริงสำคัญต่อไปนี้
- ใน Android เคอร์เนลใช้เวลา CPU ประมาณ 40%
- เราใช้ AutoFDO เพื่อเพิ่มประสิทธิภาพไฟล์ปฏิบัติการและไลบรารีแบบเนทีฟในพื้นที่ผู้ใช้ ซึ่งช่วยให้การเปิดแอปครั้งแรกดีขึ้นประมาณ 4% และลดเวลาในการบูตได้ 1%
การปรับปรุงประสิทธิภาพในสถานการณ์จริง
เราเห็นการปรับปรุงที่น่าประทับใจในเมตริกหลักของ Android โดยการใช้ประโยชน์จากโปรไฟล์จากสภาพแวดล้อมในห้องทดลองที่ควบคุมได้ โปรไฟล์เหล่านี้รวบรวมโดยใช้การ Crawl และการเปิดแอป และวัดผลในอุปกรณ์ Pixel ที่ใช้เคอร์เนล 6.1, 6.6 และ 6.12
การปรับปรุงที่เห็นได้ชัดที่สุดแสดงอยู่ด้านล่าง ดูรายละเอียดเกี่ยวกับโปรไฟล์ AutoFDO สำหรับเคอร์เนลเวอร์ชันเหล่านี้ได้ในที่เก็บเคอร์เนล Android ที่เกี่ยวข้องสำหรับเคอร์เนล android16-6.12 และ android15-6.6
ตัวเลขเหล่านี้ไม่ใช่แค่ตัวเลขทางทฤษฎี ซึ่งส่งผลให้มีอินเทอร์เฟซที่รวดเร็วขึ้น การสลับแอปที่เร็วขึ้น อายุการใช้งานแบตเตอรี่ที่นานขึ้น และอุปกรณ์โดยรวมที่ตอบสนองได้ดีขึ้นสำหรับผู้ใช้
วิธีการทำงาน: ไปป์ไลน์
กลยุทธ์การติดตั้งใช้งานของเราเกี่ยวข้องกับไปป์ไลน์ที่ซับซ้อนเพื่อให้มั่นใจว่าโปรไฟล์ยังคงมีความเกี่ยวข้องและประสิทธิภาพยังคงมีเสถียรภาพ
ขั้นตอนที่ 1: การรวบรวมโปรไฟล์
แม้ว่าเราจะใช้กลุ่มอุปกรณ์ทดสอบภายในเพื่อสร้างโปรไฟล์ไบนารีของพื้นที่ผู้ใช้ แต่เราได้เปลี่ยนไปใช้สภาพแวดล้อมในห้องทดลองที่มีการควบคุมสำหรับอิมเมจเคอร์เนลทั่วไป (GKI) การแยกการสร้างโปรไฟล์ออกจากรอบการเผยแพร่อุปกรณ์ช่วยให้สามารถอัปเดตได้อย่างยืดหยุ่นและทันทีโดยไม่ขึ้นอยู่กับเวอร์ชันเคอร์เนลที่ติดตั้งใช้งาน ที่สำคัญ การทดสอบยืนยันว่าข้อมูลในห้องทดลองนี้ให้ผลลัพธ์ด้านประสิทธิภาพเทียบเท่ากับข้อมูลจากกลุ่มยานพาหนะที่ใช้งานจริง
- เครื่องมือและสภาพแวดล้อม: เราจะแฟลชอุปกรณ์ทดสอบด้วยอิมเมจเคอร์เนลล่าสุดและใช้ simpleperf เพื่อบันทึกสตรีมการดำเนินการคำสั่ง กระบวนการนี้อาศัยความสามารถของฮาร์ดแวร์ในการบันทึกประวัติการแยกสาขา โดยเฉพาะการใช้ ส่วนขยายการติดตามแบบฝังของ ARM (ETE) และส่วนขยายบัฟเฟอร์การติดตามของ ARM (TRBE) ในอุปกรณ์ Pixel
- ภาระงาน: เราสร้างภาระงานที่เป็นตัวแทนโดยใช้แอปยอดนิยม 100 อันดับแรกจากชุดเครื่องมือทดสอบความเข้ากันได้ของแอป Android (C-Suite) เรามุ่งเน้นที่สิ่งต่อไปนี้เพื่อให้ได้ข้อมูลที่แม่นยำที่สุด
- การเปิดตัวแอป: การเพิ่มประสิทธิภาพเพื่อความล่าช้าของผู้ใช้ที่มองเห็นได้ชัดเจนที่สุด
- การ Crawl แอปที่ขับเคลื่อนด้วย AI: การจำลองการโต้ตอบของผู้ใช้ที่ต่อเนื่องและมีการพัฒนา
- การตรวจสอบทั้งระบบ: การบันทึกไม่เพียงแต่กิจกรรมของแอปที่ทำงานอยู่เบื้องหน้า แต่ยังรวมถึงภาระงานที่สำคัญในเบื้องหลังและการสื่อสารระหว่างกระบวนการด้วย
- การตรวจสอบ: ภาระงานที่สังเคราะห์นี้แสดงความคล้ายคลึง 85% กับรูปแบบการดำเนินการที่รวบรวมจากกลุ่มทรัพยากรภายในของเรา
- ข้อมูลเป้าหมาย: การทดสอบซ้ำๆ อย่างเพียงพอจะช่วยให้เราจับรูปแบบการดำเนินการที่มีความเที่ยงตรงสูง ซึ่งแสดงถึงการโต้ตอบของผู้ใช้ในโลกแห่งความเป็นจริงกับแอปพลิเคชันยอดนิยมได้อย่างแม่นยำ นอกจากนี้ เฟรมเวิร์กที่ขยายได้นี้ยังช่วยให้เราผสานรวมเวิร์กโหลดและเกณฑ์เปรียบเทียบเพิ่มเติมได้อย่างราบรื่นเพื่อขยายความครอบคลุม
ขั้นตอนที่ 2: การประมวลผลโปรไฟล์
เราจะประมวลผลข้อมูลการติดตามดิบหลังการประมวลผลเพื่อให้มั่นใจว่าข้อมูลสะอาด มีประสิทธิภาพ และพร้อมสำหรับคอมไพเลอร์
- การรวม: เรารวมข้อมูลจากการทดสอบหลายครั้งและอุปกรณ์หลายเครื่องไว้ในมุมมองระบบเดียว
- Conversion: We convert raw traces into the AutoFDO profile format, filtering out unwanted symbols as needed.
- การตัดแต่งโปรไฟล์: เราตัดแต่งโปรไฟล์เพื่อนำข้อมูลสำหรับฟังก์ชัน "โคลด์" ออก เพื่อให้ฟังก์ชันเหล่านั้นใช้การเพิ่มประสิทธิภาพมาตรฐานได้ ซึ่งจะช่วยป้องกันการถดถอยในโค้ดที่ใช้ไม่บ่อยและหลีกเลี่ยงการเพิ่มขนาดไบนารีโดยไม่จำเป็น
ขั้นตอนที่ 3: การทดสอบโปรไฟล์
ก่อนการติดตั้งใช้งาน โปรไฟล์จะผ่านการยืนยันอย่างเข้มงวดเพื่อให้มั่นใจว่าโปรไฟล์จะให้ประสิทธิภาพที่สม่ำเสมอโดยไม่มีความเสี่ยงด้านความเสถียร
- การวิเคราะห์โปรไฟล์และไบนารี: เราจะเปรียบเทียบเนื้อหาของโปรไฟล์ใหม่ (รวมถึงฟังก์ชันยอดนิยม จำนวนตัวอย่าง และขนาดโปรไฟล์) กับเวอร์ชันก่อนหน้าอย่างเข้มงวด นอกจากนี้ เรายังใช้โปรไฟล์เพื่อสร้างอิมเมจเคอร์เนลใหม่ โดยวิเคราะห์ไบนารีเพื่อให้แน่ใจว่าการเปลี่ยนแปลงในส่วนข้อความสอดคล้องกับที่คาดไว้
- การยืนยันประสิทธิภาพ: เราจะเรียกใช้การเปรียบเทียบที่กำหนดเป้าหมายในอิมเมจเคอร์เนลใหม่ ซึ่งเป็นการยืนยันว่าการทดสอบนี้ยังคงรักษาการปรับปรุงประสิทธิภาพที่กำหนดโดยค่าพื้นฐานก่อนหน้า
การอัปเดตอย่างต่อเนื่อง
โค้ดจะ "เปลี่ยน" ไปตามกาลเวลาโดยธรรมชาติ ดังนั้นโปรไฟล์แบบคงที่จะสูญเสียประสิทธิภาพในที่สุด เราเรียกใช้ไปป์ไลน์อย่างต่อเนื่องเพื่อขับเคลื่อนการอัปเดตเป็นประจำเพื่อรักษาประสิทธิภาพสูงสุด
- การรีเฟรชเป็นประจำ: เราจะรีเฟรชโปรไฟล์ในสาขา LTS ของเคอร์เนล Android ก่อนการเปิดตัว GKI แต่ละรุ่น เพื่อให้มั่นใจว่าทุกบิลด์จะมีข้อมูลโปรไฟล์ล่าสุด
- การขยายการรองรับในอนาคต: ขณะนี้เรากำลังส่งการอัปเดตเหล่านี้ไปยังสาขา
android16-6.12และandroid15-6.6และจะขยายการรองรับไปยัง GKI เวอร์ชันใหม่กว่า เช่นandroid17-6.18ที่กำลังจะเปิดตัว
การรับประกันความเสถียร
คำถามที่พบบ่อยเกี่ยวกับการเพิ่มประสิทธิภาพที่แนะนำโดยโปรไฟล์คือการเพิ่มประสิทธิภาพดังกล่าวจะทำให้เกิดความเสี่ยงด้านความเสถียรหรือไม่ เนื่องจาก AutoFDO ส่งผลต่อฮิวริสติกของคอมไพเลอร์เป็นหลัก เช่น การแทรกฟังก์ชันและการจัดวางโค้ด แทนที่จะเป็นการเปลี่ยนแปลงตรรกะของซอร์สโค้ด จึงช่วยรักษาความสมบูรณ์ของฟังก์ชันของเคอร์เนล เทคโนโลยีนี้ได้รับการพิสูจน์แล้วว่าสามารถปรับขนาดได้ โดยเป็นมาตรฐานการเพิ่มประสิทธิภาพสำหรับไลบรารีแพลตฟอร์ม Android, ChromeOS และโครงสร้างพื้นฐานของเซิร์ฟเวอร์ของ Google เองมาเป็นเวลาหลายปี
เราใช้กลยุทธ์ "ระมัดระวังโดยค่าเริ่มต้น" เพื่อรับประกันลักษณะการทำงานที่สอดคล้องกันต่อไป ฟังก์ชันที่ไม่ได้บันทึกไว้ในโปรไฟล์ที่มีความเที่ยงตรงสูงจะได้รับการเพิ่มประสิทธิภาพโดยใช้วิธีการคอมไพเลอร์มาตรฐาน ซึ่งจะช่วยให้มั่นใจได้ว่าส่วนที่ "ไม่ได้ใช้งาน" หรือส่วนที่ทำงานไม่บ่อยของเคอร์เนลจะทำงานเหมือนกับการสร้างมาตรฐานทุกประการ ซึ่งจะป้องกันการถดถอยของประสิทธิภาพหรือลักษณะการทำงานที่ไม่คาดคิดในกรณีที่พบได้ยาก
ในอนาคต
ปัจจุบันเรากำลังติดตั้งใช้งาน AutoFDO ในสาขา android16-6.12 และ android15-6.6 นอกเหนือจากการเปิดตัวครั้งแรกนี้ เรายังเห็นแนวทางที่มีแนวโน้มดีหลายอย่างในการปรับปรุงเทคโนโลยีเพิ่มเติม ดังนี้
- การเข้าถึงที่กว้างขึ้น: เราหวังว่าจะได้ทำให้โปรไฟล์ AutoFDO ใช้งานได้กับเวอร์ชันเคอร์เนล GKI ใหม่กว่าและเป้าหมายการสร้างเพิ่มเติม นอกเหนือจากการรองรับ
aarch64ในปัจจุบัน - การเพิ่มประสิทธิภาพโมดูล GKI: ปัจจุบันการเพิ่มประสิทธิภาพของเรามุ่งเน้นไปที่ไบนารีเคอร์เนลหลัก (
vmlinux) การขยาย AutoFDO ไปยังโมดูล GKI อาจทำให้ส่วนย่อยของเคอร์เนลมีประสิทธิภาพดียิ่งขึ้น - การรองรับโมดูลของผู้ให้บริการ: เรายังสนใจที่จะรองรับ AutoFDO สำหรับโมดูลของผู้ให้บริการที่สร้างขึ้นโดยใช้ชุดพัฒนาไดรเวอร์ (DDK) การสนับสนุนที่มีอยู่แล้วในระบบบิลด์ (Kleaf) และเครื่องมือสร้างโปรไฟล์ (simpleperf) ช่วยให้ผู้ให้บริการสามารถใช้เทคนิคการเพิ่มประสิทธิภาพเดียวกันนี้กับไดรเวอร์ฮาร์ดแวร์เฉพาะของตนได้
- ความครอบคลุมของโปรไฟล์ที่กว้างขึ้น: มีโอกาสที่จะรวบรวมโปรไฟล์จากเส้นทางของผู้ใช้ที่สําคัญ (CUJ) ที่หลากหลายมากขึ้นเพื่อเพิ่มประสิทธิภาพ
การนำ AutoFDO มาใช้ในเคอร์เนลของ Android จะช่วยให้มั่นใจได้ว่ารากฐานของระบบปฏิบัติการได้รับการเพิ่มประสิทธิภาพให้เหมาะกับวิธีที่คุณใช้อุปกรณ์ในทุกๆ วัน
อ่านต่อ
-
ข่าวสารผลิตภัณฑ์
เวิร์กโฟลว์และความต้องการด้าน AI ของนักพัฒนาซอฟต์แวร์แต่ละรายนั้นแตกต่างกันไป และคุณควรเลือกได้ว่าจะให้ AI ช่วยในการพัฒนาอย่างไร ในเดือนมกราคม เราได้เปิดตัวความสามารถในการเลือกโมเดล AI ในเครื่องหรือระยะไกลเพื่อขับเคลื่อนฟังก์ชันการทำงานของ AI ใน Android Studio
Matthew Warner • ใช้เวลาอ่าน 2 นาที
-
ข่าวสารผลิตภัณฑ์
Android Studio Panda 3 พร้อมให้คุณใช้ในเวอร์ชันที่ใช้งานจริงแล้ว การเปิดตัวนี้ช่วยให้คุณควบคุมและปรับแต่งเวิร์กโฟลว์ที่ทำงานด้วยระบบ AI ได้มากยิ่งขึ้น ทำให้การสร้างแอป Android คุณภาพสูงง่ายกว่าที่เคย
Matt Dyor • ใช้เวลาอ่าน 3 นาที
-
ข่าวสารผลิตภัณฑ์
ที่ Google เรามุ่งมั่นที่จะนำโมเดล AI ที่มากความสามารถที่สุดมาไว้ในอุปกรณ์ Android ในกระเป๋าของคุณโดยตรง วันนี้เรายินดีที่จะประกาศเปิดตัวโมเดลแบบเปิดที่ล้ำสมัยล่าสุดของเรา นั่นก็คือ Gemma 4
Caren Chang, David Chou • ใช้เวลาอ่าน 3 นาที
รับข่าวสาร
รับข้อมูลเชิงลึกด้านการพัฒนา Android ล่าสุดส่งตรงถึงกล่องจดหมายของคุณทุกสัปดาห์