การเพิ่มประสิทธิภาพ Android: ขอแนะนำ AutoFDO สำหรับเคอร์เนล
ใช้เวลาอ่าน 4 นาที
เราคือทีม Android LLVM Toolchain สิ่งสำคัญอันดับต้นๆ ของเราคือการปรับปรุงประสิทธิภาพของ Android ผ่านเทคนิคการเพิ่มประสิทธิภาพในระบบนิเวศ LLVM เราพยายามหาวิธีทำให้ Android ทำงานได้เร็วขึ้น ราบรื่นขึ้น และมีประสิทธิภาพมากขึ้นอยู่เสมอ แม้ว่างานเพิ่มประสิทธิภาพส่วนใหญ่จะเกิดขึ้นในพื้นที่ผู้ใช้ แต่เคอร์เนลยังคงเป็นหัวใจสำคัญของระบบ วันนี้เรายินดีที่จะแชร์วิธีที่เรานำการเพิ่มประสิทธิภาพโดยอัตโนมัติที่อิงตามความคิดเห็น (AutoFDO) มาใช้กับเคอร์เนล Android เพื่อมอบประสิทธิภาพที่ดียิ่งขึ้นอย่างมากให้แก่ผู้ใช้
AutoFDO คืออะไร
ในระหว่างการสร้างซอฟต์แวร์มาตรฐาน คอมไพเลอร์จะทำการตัดสินใจเล็กๆ น้อยๆ หลายพันครั้ง เช่น จะแทรกฟังก์ชันในบรรทัดหรือไม่ และจะใช้สาขาใดของเงื่อนไข โดยอิงตามคำแนะนำโค้ดแบบคงที่ แม้ว่าการวิเคราะห์พฤติกรรมเหล่านี้จะมีประโยชน์ แต่ก็ไม่ได้คาดการณ์การเรียกใช้โค้ดระหว่างการใช้งานโทรศัพท์ในชีวิตจริงได้อย่างถูกต้องเสมอไป
AutoFDO จะเปลี่ยนสิ่งนี้โดยใช้รูปแบบการเรียกใช้ในชีวิตจริงเพื่อเป็นแนวทางให้คอมไพเลอร์ รูปแบบเหล่านี้แสดงเส้นทางการดำเนินการตามคำสั่งที่พบบ่อยที่สุดที่โค้ดใช้ในระหว่างการใช้งานจริง ซึ่งบันทึกโดยการบันทึกประวัติการแยกสาขาของ CPU แม้ว่าข้อมูลนี้จะรวบรวมได้จากอุปกรณ์ในกลุ่ม แต่สำหรับเคอร์เนล เราจะสังเคราะห์ข้อมูลในสภาพแวดล้อมของห้องปฏิบัติการโดยใช้ภาระงานที่เป็นตัวแทน เช่น การเรียกใช้แอปยอดนิยม 100 อันดับแรก เราใช้เครื่องมือสร้างโปรไฟล์แบบสุ่มเพื่อบันทึกข้อมูลนี้ โดยระบุว่าส่วนใดของโค้ดเป็น "ฮอต" (ใช้บ่อย) และส่วนใดเป็น "โคลด์" เมื่อเราสร้างเคอร์เนลใหม่ด้วยโปรไฟล์เหล่านี้ คอมไพเลอร์จะตัดสินใจเพิ่มประสิทธิภาพได้อย่างชาญฉลาดมากขึ้นโดยปรับให้เหมาะกับภาระงานจริงของ Android
หากต้องการทำความเข้าใจผลกระทบของการเพิ่มประสิทธิภาพนี้ โปรดพิจารณาข้อเท็จจริงที่สำคัญต่อไปนี้
- ใน Android เคอร์เนลจะใช้เวลา CPU ประมาณ 40%
- เราใช้ AutoFDO เพื่อเพิ่มประสิทธิภาพไฟล์ปฏิบัติการและไลบรารีแบบเนทีฟในพื้นที่ผู้ใช้อยู่แล้ว ซึ่งช่วยปรับปรุงการเปิดแอปแบบ Cold ได้ประมาณ 4% และลดเวลาเปิดเครื่องได้ 1%
ประสิทธิภาพที่เพิ่มขึ้นในสถานการณ์จริง
เราได้เห็นการปรับปรุงที่น่าประทับใจในเมตริก Android ที่สำคัญโดยใช้ประโยชน์จากโปรไฟล์จากสภาพแวดล้อมในห้องปฏิบัติการที่มีการควบคุม โปรไฟล์เหล่านี้รวบรวมโดยใช้การ Crawl และการเปิดแอป และวัดในอุปกรณ์ Pixel ในเคอร์เนล 6.1, 6.6 และ 6.12
การปรับปรุงที่เห็นได้ชัดที่สุดมีดังนี้ ดูรายละเอียดเกี่ยวกับโปรไฟล์ AutoFDO สำหรับเคอร์เนลเวอร์ชันเหล่านี้ได้ในที่เก็บเคอร์เนล Android ที่เกี่ยวข้องสำหรับเคอร์เนล android16-6.12 และ android15-6.6
ตัวเลขเหล่านี้ไม่ใช่แค่ตัวเลขทางทฤษฎี ซึ่งจะช่วยให้อินเทอร์เฟซทำงานได้เร็วขึ้น สลับแอปได้เร็วขึ้น ยืดอายุการใช้งานแบตเตอรี่ และทำให้อุปกรณ์ตอบสนองได้ดีขึ้นโดยรวมสำหรับผู้ใช้ปลายทาง
วิธีการทำงาน: ไปป์ไลน์
กลยุทธ์การติดตั้งใช้งานของเราเกี่ยวข้องกับไปป์ไลน์ที่ซับซ้อนเพื่อให้มั่นใจว่าโปรไฟล์จะยังคงมีความเกี่ยวข้องและประสิทธิภาพยังคงเสถียร
ขั้นตอนที่ 1: การรวบรวมโปรไฟล์
แม้ว่าเราจะใช้กลุ่มทดสอบภายในเพื่อสร้างโปรไฟล์ไบนารีของพื้นที่ผู้ใช้ แต่เราได้เปลี่ยนไปใช้สภาพแวดล้อมห้องทดลองที่มีการควบคุมสำหรับ Generic Kernel Image (GKI) การแยกการทำโปรไฟล์ออกจากรอบการเผยแพร่อุปกรณ์ช่วยให้สามารถอัปเดตได้อย่างยืดหยุ่นและทันที โดยไม่ขึ้นอยู่กับเวอร์ชันเคอร์เนลที่ติดตั้งใช้งาน ที่สำคัญคือ การทดสอบยืนยันว่าข้อมูลที่ได้จากห้องปฏิบัติการนี้ช่วยเพิ่มประสิทธิภาพได้เทียบเท่ากับข้อมูลที่ได้จากกลุ่มยานพาหนะในโลกแห่งความเป็นจริง
- เครื่องมือและสภาพแวดล้อม: เราแฟลชอุปกรณ์ทดสอบด้วยอิมเมจเคอร์เนลล่าสุดและใช้ simpleperf เพื่อบันทึกสตรีมการดำเนินการตามคำสั่ง กระบวนการนี้อาศัยความสามารถของฮาร์ดแวร์ในการบันทึกประวัติการแยกสาขา โดยเฉพาะการใช้ ARM Embedded Trace Extension (ETE) และ ARM Trace Buffer Extension (TRBE) ในอุปกรณ์ Pixel
- ภาระงาน: เราสร้างภาระงานที่เป็นตัวแทนโดยใช้แอปยอดนิยม 100 อันดับแรกจากชุดเครื่องมือทดสอบความเข้ากันได้ของแอป Android (C-Suite) เรามุ่งเน้นที่สิ่งต่อไปนี้เพื่อบันทึกข้อมูลที่แม่นยำที่สุด
- การเปิดแอป: การเพิ่มประสิทธิภาพเพื่อลดความล่าช้าที่ผู้ใช้เห็นได้ชัดที่สุด
- การ Crawl แอปที่ขับเคลื่อนด้วย AI: การจำลองการโต้ตอบของผู้ใช้ที่ต่อเนื่องและมีการพัฒนา
- การตรวจสอบทั้งระบบ: บันทึกไม่เพียงกิจกรรมของแอปที่ทำงานอยู่เบื้องหน้าเท่านั้น แต่ยังรวมถึงเวิร์กโหลดที่สำคัญในเบื้องหลังและการสื่อสารระหว่างกระบวนการด้วย
- การตรวจสอบความถูกต้อง: ภาระงานที่สังเคราะห์ขึ้นนี้แสดงความคล้ายคลึงกัน 85% กับรูปแบบการดำเนินการที่รวบรวมจากกลุ่มภายในของเรา
- ข้อมูลที่กำหนดเป้าหมาย: การทำซ้ำการทดสอบเหล่านี้อย่างเพียงพอช่วยให้เราบันทึกรูปแบบการดำเนินการที่มีความแม่นยำสูง ซึ่งแสดงถึงการโต้ตอบของผู้ใช้ในชีวิตจริงกับแอปพลิเคชันยอดนิยมได้อย่างถูกต้อง นอกจากนี้ เฟรมเวิร์กที่ขยายได้นี้ยังช่วยให้เราผสานรวมภาระงานและเกณฑ์มาตรฐานเพิ่มเติมได้อย่างราบรื่นเพื่อขยายความครอบคลุมของเรา
ขั้นตอนที่ 2: การประมวลผลโปรไฟล์
เราจะประมวลผลข้อมูลการติดตามดิบหลังการรวบรวมเพื่อให้มั่นใจว่าข้อมูลสะอาด มีประสิทธิภาพ และพร้อมสำหรับคอมไพเลอร์
- การรวม: เรารวมข้อมูลจากการทดสอบหลายครั้งและอุปกรณ์หลายเครื่องไว้ในมุมมองระบบเดียว
- การแปลง: เราแปลงการติดตามดิบเป็นรูปแบบโปรไฟล์ AutoFDO โดยกรองสัญลักษณ์ที่ไม่ต้องการออกตามความจำเป็น
- การตัดแต่งโปรไฟล์: เราตัดแต่งโปรไฟล์เพื่อนำข้อมูลสำหรับฟังก์ชัน "Cold" ออก ซึ่งจะช่วยให้ฟังก์ชันดังกล่าวใช้การเพิ่มประสิทธิภาพมาตรฐานได้ ซึ่งจะช่วยป้องกันการถดถอยในโค้ดที่ใช้ไม่บ่อยและหลีกเลี่ยงการเพิ่มขนาดไบนารีโดยไม่จำเป็น
ขั้นตอนที่ 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 ช่วยให้มั่นใจได้ว่ารากฐานของระบบปฏิบัติการได้รับการเพิ่มประสิทธิภาพให้เหมาะกับวิธีที่คุณใช้อุปกรณ์ทุกวัน
-
ข่าวสารเกี่ยวกับผลิตภัณฑ์แอปที่กำหนดเป้าหมายเป็น Android รุ่นที่กำลังจะเปิดตัวจะไม่สามารถเขียนลงในรายชื่อติดต่อโดยตรงด้วยสิทธิ์ WRITE_CONTACTS ได้อีกต่อไป
Roxanna Aliabadi Walker • ใช้เวลาอ่าน 6 นาที -
ข่าวสารเกี่ยวกับผลิตภัณฑ์เมื่อการพัฒนา Agent เร็วขึ้น วิศวกรรม Android กำลังก้าวเข้าสู่พรมแดนใหม่ที่น่าตื่นเต้น นั่นคือการเปลี่ยนจากการเติมโค้ดแบบช่วยเหลือไปเป็น Agent ที่ดำเนินการตั้งแต่ต้นจนจบภายใต้คำสั่งของคุณ คุณมีตัวเลือกและความยืดหยุ่นอย่างเต็มที่ในโมเดลและ Agent ที่ใช้
Jason Buchel • ใช้เวลาอ่าน 3 นาที -
ข่าวสารเกี่ยวกับผลิตภัณฑ์วันนี้เราได้แชร์วิธีที่เรากำลังนำวิสัยทัศน์ "เป็นมากกว่าร้านค้า" ไปสู่บทถัดไป Google Play ตอบสนองความต้องการของผู้ใช้ได้ทุกที่ทุกเวลา ตั้งแต่แท็บ "คุณ" ซึ่งปัจจุบันเป็นศูนย์กลางส่วนตัวสำหรับผู้ใช้ที่ใช้งานอยู่รายเดือนกว่า 250 ล้านคน ไปจนถึงแพลตฟอร์มเกมแบบรวมที่เชื่อมต่อโปรไฟล์เกมเมอร์กว่า 700 ล้านโปรไฟล์
Paul Feng • ใช้เวลาอ่าน 3 นาที
รับข้อมูลเชิงลึกเกี่ยวกับการพัฒนา Android ล่าสุดที่ส่งไปยังกล่องจดหมายของคุณทุกสัปดาห์