Android 11 ขึ้นไปรองรับการสร้างโปรไฟล์อิมเมจบูต ซึ่งจะสรุปข้อมูลเกี่ยวกับโค้ดของคอมโพเนนต์ระดับระบบต่างๆ เช่น เซิร์ฟเวอร์ระบบและคลาสพาธบูต Android Runtime (ART) ใช้ข้อมูลนี้เพื่อทำการเพิ่มประสิทธิภาพทั่วทั้งระบบ ซึ่งบางส่วนมีความสำคัญต่อประสิทธิภาพของ Android และส่งผลต่อการดำเนินการโค้ดที่ไม่ใช่โค้ดดั้งเดิมทั้งหมด (ระดับระบบหรือแอป) ในบางกรณี โปรไฟล์อิมเมจบูตอาจส่งผลต่อประสิทธิภาพการดำเนินการและการใช้หน่วยความจำในระดับเปอร์เซ็นต์ที่เป็นเลข 2 หลัก
รับข้อมูลโปรไฟล์การบูต
โปรไฟล์อิมเมจบูตได้มาจากโปรไฟล์ของแอปที่ดำเนินการระหว่างเส้นทางของผู้ใช้ที่สำคัญ (CUJ) ในการกำหนดค่าอุปกรณ์ที่เฉพาะเจาะจง ART จะบันทึก
(เป็นส่วนหนึ่งของโปรไฟล์ JIT) เมธอดและคลาสเส้นทางคลาสบูตที่แอปใช้
จากนั้นบันทึกข้อมูลดังกล่าวในโปรไฟล์แอป (เช่น
/data/misc/profiles/cur/0/com.android.chrome/primary.prof) โดยจะจัดทำดัชนีตามไฟล์ Dalvik EXecutable (DEX) ของเส้นทางคลาสบูต (ดูรูปแบบโปรไฟล์
ART)
ตรวจสอบโปรไฟล์แอปที่บันทึกไว้ระหว่าง CUJ เพื่อกำหนดส่วนของคลาสพาธบูตที่ใช้มากที่สุดและสำคัญที่สุดในการเพิ่มประสิทธิภาพ (ดูตัวอย่างในรูปแบบโปรไฟล์ ART) การรวมเมธอดหรือคลาสทั้งหมดจะส่งผลเสียต่อประสิทธิภาพ ดังนั้นให้มุ่งเน้นไปที่เส้นทางโค้ดที่ใช้กันโดยทั่วไปมากที่สุด ตัวอย่างเช่น หากแอปเดียวใช้เมธอดจากเส้นทางคลาสบูต เมธอดนั้นไม่ควรเป็นส่วนหนึ่งของโปรไฟล์การบูต อุปกรณ์แต่ละเครื่องควรกำหนดค่าการเลือกเมธอด/คลาสตามการเลือก CUJ และปริมาณข้อมูลที่ได้จากการทดสอบ
หากต้องการรวบรวมข้อมูลคลาสพาธสำหรับบูตจากโปรไฟล์แอปแต่ละรายการในอุปกรณ์ ให้เรียกใช้คำสั่ง adb shell cmd package snapshot-profile android คุณสามารถใช้ข้อมูลที่รวบรวมเป็นพื้นฐานสำหรับการประมวลผลและการเลือกเมธอด/คลาสได้โดยไม่ต้องรวบรวมโปรไฟล์แต่ละรายการด้วยตนเอง (แม้ว่าคุณจะทำเช่นนั้นได้หากต้องการ)
รูปที่ 1 กระบวนการรับโปรไฟล์อิมเมจบูต
ข้อมูลโปรไฟล์อิมเมจบูต
โปรไฟล์อิมเมจบูตมีไฟล์และข้อมูลต่อไปนี้
โปรไฟล์สำหรับเส้นทางคลาสบูต (
frameworks/base/config/boot-image-profile.txt. กำหนดเมธอดจากเส้นทางคลาสบูตที่จะได้รับการเพิ่มประสิทธิภาพและคลาส ที่จะรวมอยู่ในอิมเมจ.artของการบูตรายการคลาสที่โหลดล่วงหน้า กำหนดคลาสที่จะโหลดล่วงหน้าใน Zygote
โปรไฟล์สำหรับคอมโพเนนต์เซิร์ฟเวอร์ระบบ (
frameworks/base/services/art-profile) กำหนดเมธอดจากเซิร์ฟเวอร์ระบบที่จะได้รับการเพิ่มประสิทธิภาพ/คอมไพล์, คลาสที่จะรวมอยู่ในอิมเมจ.artของการบูต และวิธีจัดวางไฟล์ DEX ที่เกี่ยวข้อง
รูปแบบโปรไฟล์ ART
โปรไฟล์ ART จะบันทึกข้อมูลจากไฟล์ DEX ที่โหลดแต่ละไฟล์ ซึ่งรวมถึงข้อมูลเกี่ยวกับเมธอดที่ควรได้รับการเพิ่มประสิทธิภาพและคลาสที่ใช้ระหว่างการเริ่มต้น เมื่อเปิดใช้การสร้างโปรไฟล์อิมเมจดิสก์บูต ART จะรวมไฟล์ JAR ของเส้นทางคลาสบูตและเซิร์ฟเวอร์ระบบไว้ในโปรไฟล์ด้วย และใส่คำอธิบายประกอบในไฟล์ DEX แต่ละไฟล์ด้วยชื่อแพ็กเกจที่ใช้ไฟล์นั้น
ตัวอย่างเช่น ดัมพ์โปรไฟล์อิมเมจบูตดิบด้วยคำสั่งต่อไปนี้
adb shell profman --dump-only --profile-file=/data/misc/profman/android.profซึ่งจะสร้างเอาต์พุตที่คล้ายกับเอาต์พุตต่อไปนี้
=== Dex files ===
=== profile ===
ProfileInfo [012]
core-oj.jar:com.google.android.ext.services [index=0] [checksum=e4e3979a]
hot methods: 520[], 611[] …
startup methods: …
classes: …
...
core-oj.jar:com.android.systemui [index=94] [checksum=e4e3979a]
hot methods: 520[], 521[]…
startup methods: …
classes: …
ในตัวอย่างข้างต้น
core-oj.jarใช้โดยcom.google.android.ext.servicesและcom.android.systemuiแต่ละรายการจะแสดงแพ็กเกจ 2 รายการที่ใช้จากcore-oj.jarทั้ง 2 กระบวนการใช้เมธอดที่มีดัชนี DEX 520 แต่มีเพียงกระบวนการ
systemuiเท่านั้นที่ใช้เมธอดที่มีดัชนี DEX 521 เหตุผลเดียวกันนี้ใช้กับส่วนโปรไฟล์อื่นๆ (เช่น คลาสเริ่มต้น)
ระหว่างการประมวลผลข้อมูล ให้กรองเมธอด/คลาสตามการใช้งาน โดยให้ความสำคัญกับกระบวนการระดับระบบ (เช่น เซิร์ฟเวอร์ระบบหรือ systemui) หรือเมธอดที่อาจไม่ได้ใช้กันโดยทั่วไปแต่ยังคงมีความสำคัญ (เช่น เมธอดที่แอปกล้องใช้)
รูปแบบโปรไฟล์จะใส่คำอธิบายประกอบในแต่ละเมธอดด้วยแฟล็กหลายรายการ (เริ่มต้น, หลังเริ่มต้น, ความถี่, abi) ภายใน ซึ่งมีมากกว่าที่แสดงในรูปแบบการทิ้งข้อมูลเท่านั้น หากต้องการใช้สัญญาณทั้งหมด ให้แก้ไขสคริปต์ที่มีอยู่
คำแนะนำ
ใช้หลักเกณฑ์ต่อไปนี้เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด
ติดตั้งใช้งานการกำหนดค่าสำหรับการสร้างโปรไฟล์อิมเมจบูตในอุปกรณ์ทดสอบหลายเครื่องและรวบรวมผลลัพธ์ก่อนสร้างโปรไฟล์อิมเมจบูตสุดท้าย เครื่องมือ
profmanรองรับการรวบรวมและเลือกโปรไฟล์อิมเมจดิสก์บูตหลายรายการ แต่จะทำงานกับอิมเมจดิสก์บูตเวอร์ชันเดียวกันเท่านั้น (เส้นทางคลาสบูตเดียวกัน)ให้ความสำคัญกับการเลือกเมธอด/คลาสที่กระบวนการของระบบใช้ เมธอด/คลาสเหล่านี้อาจใช้โค้ดที่แอปอื่นๆ ไม่ได้ใช้บ่อย แต่ยังคงมีความสำคัญในการเพิ่มประสิทธิภาพ
รูปร่างข้อมูลจากการเรียกใช้ในอุปกรณ์เครื่องเดียวจะแตกต่างอย่างมากเมื่อเทียบกับอุปกรณ์ทดสอบที่เรียกใช้ CUJ ในโลกจริง หากคุณไม่มีอุปกรณ์ทดสอบจำนวนมาก ให้ใช้อุปกรณ์เครื่องเดียวกันเพื่อเรียกใช้ CUJ หลายรายการเพื่อเพิ่มความมั่นใจว่าการเพิ่มประสิทธิภาพโปรไฟล์อิมเมจดิสก์บูตจะทำงานได้ดีในสภาพแวดล้อมจริง (สถานการณ์นี้อธิบายไว้ด้านล่าง)
กำหนดค่าอุปกรณ์
หากต้องการเปิดใช้การกำหนดค่าโปรไฟล์การบูตผ่านพร็อพเพอร์ตี้ของระบบ ให้ใช้วิธีใดวิธีหนึ่งต่อไปนี้
ตัวเลือกที่ 1: ตั้งค่าพร็อพด้วยตนเอง (ใช้ได้จนกว่าจะรีบูต)
adb rootadb shell stopadb shell setprop dalvik.vm.profilebootclasspath trueadb shell setprop dalvik.vm.profilesystemserver trueadb shell startตัวเลือกที่ 2: ใช้
local.prop(มีผลถาวรจนกว่าจะลบไฟล์) โดยมีวิธีการดังนี้สร้างไฟล์
local.propที่มีเนื้อหาต่อไปนี้dalvik.vm.profilebootclasspath=true dalvik.vm.profilesystemserver=trueเรียกใช้คำสั่งต่อไปนี้
adb push local.prop /data/adb shell chmod 0750 /data/local.propadb reboot
ตัวเลือกที่ 3: ใช้การกำหนดค่าอุปกรณ์เพื่อตั้งค่าพร็อพเพอร์ตี้ฝั่งเซิร์ฟเวอร์ต่อไปนี้
adb shell device_config put runtime_native_boot profilebootclasspath true adb shell device_config put runtime_native_boot profilesystemserver true
สร้างโปรไฟล์อิมเมจบูต
ใช้คำแนะนำต่อไปนี้เพื่อสร้างโปรไฟล์อิมเมจบูตพื้นฐานโดยใช้การทดสอบในอุปกรณ์เครื่องเดียว
ตั้งค่าอุปกรณ์
กำหนดค่าอุปกรณ์ตามที่อธิบายไว้ใน การกำหนดค่า อุปกรณ์
(ไม่บังคับ) รูปแบบโปรไฟล์ใหม่ต้องใช้เวลาในการล้างและแทนที่โปรไฟล์อื่นๆ หากต้องการเร่งการรวบรวมโปรไฟล์ ให้รีเซ็ตโปรไฟล์ทั้งหมดในอุปกรณ์
adb shell stopadb shell find "/data/misc/profiles -name *.prof -exec truncate -s 0 {} \;"adb shell startเรียกใช้ CUJ ในอุปกรณ์
บันทึกโปรไฟล์โดยใช้คำสั่งต่อไปนี้
adb shell cmd package snapshot-profile androidแยกโปรไฟล์โดยใช้คำสั่งต่อไปนี้
adb pull /data/misc/profman/android.profไปที่ไฟล์ JAR ของคลาสพาธสำหรับบูตโดยใช้คำสั่งต่อไปนี้
m distls $ANDROID_PRODUCT_OUT/boot.zipสร้างโปรไฟล์อิมเมจบูตโดยใช้คำสั่ง
profmanต่อไปนี้profman --generate-boot-image-profile --profile-file=android.prof --out-profile-path=... --out-preloaded-classes-path=...ใช้ข้อมูลเพื่อปรับแต่งคำสั่ง
profmanโดยใช้แฟล็กเกณฑ์การเลือกที่มีอยู่--method-threshold--class-threshold--clean-class-threshold--preloaded-class-threshold--upgrade-startup-to-hot--special-package
หากต้องการดูรายการทั้งหมด โปรดดูหน้าความช่วยเหลือหรือซอร์สโค้ดของ
profman