Android 11 ขึ้นไปรองรับการสร้างโปรไฟล์ภาพสำหรับบูต ซึ่งจะรวมข้อมูลเกี่ยวกับโค้ดของคอมโพเนนต์ระดับระบบต่างๆ เช่น เซิร์ฟเวอร์ระบบและ classpath ของบูต 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 และปริมาณข้อมูลที่ได้จากการทดสอบ
หากต้องการรวบรวมข้อมูล classpath ของบูตจากโปรไฟล์แอปแต่ละรายการในอุปกรณ์ ให้เรียกใช้คำสั่ง adb shell cmd package snapshot-profile android
คุณสามารถใช้ข้อมูลที่รวบรวมไว้เป็นพื้นฐานในการประมวลผลและเลือกเมธอด/คลาสโดยไม่ต้องรวบรวมโปรไฟล์แต่ละรายการด้วยตนเอง (แต่คุณก็ทําได้หากต้องการ)
รูปที่ 1 กระบวนการรับโปรไฟล์อิมเมจการบูต
ข้อมูลโปรไฟล์ของอิมเมจบูต
โปรไฟล์ภาพสำหรับบูตประกอบด้วยไฟล์และข้อมูลต่อไปนี้
โปรไฟล์สำหรับเส้นทางการค้นหาของบูต (
frameworks/base/config/boot-image-profile.txt
) กำหนดว่าควรเพิ่มประสิทธิภาพเมธอดใดจากเส้นทางการค้นหาของบูต คลาสใดควรรวมอยู่ในรูปภาพ.art
ของบูต และวิธีจัดวางไฟล์ DEX ที่เกี่ยวข้องรายการคลาสที่โหลดล่วงหน้า กำหนดคลาสที่จะโหลดล่วงหน้าใน 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: …
ในตัวอย่างด้านบน
com.google.android.ext.services
และcom.android.systemui
ใช้core-oj.jar
แต่ละรายการจะแสดงแพ็กเกจ 2 รายการที่ใช้จากcore-oj.jar
ทั้ง 2 กระบวนการใช้เมธอดที่มีดัชนี DEX 520 แต่มีเพียง
systemui
กระบวนการที่ใช้เมธอดที่มีดัชนี DEX 521 เหตุผลเดียวกันนี้ใช้กับส่วนอื่นๆ ของโปรไฟล์ด้วย (เช่น คลาสเริ่มต้น)
ในระหว่างการประมวลผลข้อมูล ให้กรองเมธอด/คลาสตามการใช้งาน โดยให้ความสําคัญกับกระบวนการระดับระบบ (เช่น เซิร์ฟเวอร์ระบบหรือ systemui
) หรือเมธอดที่อาจไม่ได้ใช้กันโดยทั่วไปแต่ยังคงสําคัญ (เช่น เมธอดที่แอปกล้องใช้)
รูปแบบโปรไฟล์จะกำกับเนื้อหาแต่ละเมธอดด้วย Flag หลายรายการ (startup, post-startup, hotness, abi) ซึ่งมากกว่าที่แสดงในรูปแบบการดัมพ์เท่านั้น หากต้องการใช้สัญญาณทั้งหมด ให้แก้ไขสคริปต์ที่มี
คำแนะนำ
ใช้หลักเกณฑ์ต่อไปนี้เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด
ติดตั้งใช้งานการกำหนดค่าสำหรับการสร้างโปรไฟล์ภาพสำหรับบูตในอุปกรณ์ทดสอบหลายเครื่องและรวบรวมผลลัพธ์ก่อนที่จะสร้างโปรไฟล์ภาพสำหรับบูตขั้นสุดท้าย เครื่องมือ
profman
รองรับการรวมและเลือกโปรไฟล์ภาพสำหรับบูตหลายรายการ แต่ใช้ได้กับภาพสำหรับบูตเวอร์ชันเดียวกันเท่านั้น (คลาสพาธสำหรับบูตเดียวกัน)ให้ความสำคัญกับเมธอด/คลาสที่ระบบใช้ เมธอด/คลาสเหล่านี้อาจใช้โค้ดที่แอปอื่นๆ ไม่ได้ใช้บ่อยนัก แต่ยังคงมีความจำเป็นในการเพิ่มประสิทธิภาพ
รูปแบบข้อมูลจากอุปกรณ์เครื่องเดียวจะแตกต่างอย่างมากเมื่อเทียบกับอุปกรณ์ทดสอบที่ใช้ CUJ ในชีวิตจริง หากคุณไม่มีอุปกรณ์ทดสอบจํานวนมาก ให้ใช้อุปกรณ์เครื่องเดียวกันเพื่อเรียกใช้ CUJ หลายรายการเพื่อเพิ่มความมั่นใจว่าการเพิ่มประสิทธิภาพโปรไฟล์ภาพบูตจะทํางานได้ดีในเวอร์ชันที่ใช้งานจริง (สถานการณ์นี้อธิบายไว้ด้านล่าง)
กำหนดค่าอุปกรณ์
หากต้องการเปิดใช้การกำหนดค่าโปรไฟล์การบูตผ่านพร็อพเพอร์ตี้ของระบบ ให้ใช้วิธีใดวิธีหนึ่งต่อไปนี้
ตัวเลือกที่ 1: ตั้งค่าพร็อพด้วยตนเอง (ใช้งานได้จนกว่าจะรีบูต)
adb root
adb shell stop
adb shell setprop dalvik.vm.profilebootclasspath true
adb shell setprop dalvik.vm.profilesystemserver true
adb 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.prop
adb reboot
ตัวเลือกที่ 3: ใช้การกำหนดค่าอุปกรณ์เพื่อตั้งค่าพร็อพเพอร์ตี้ฝั่งเซิร์ฟเวอร์ต่อไปนี้
persist.device_config.runtime_native_boot.profilesystemserver persist.device_config.runtime_native_boot.profilebootclasspath`
สร้างโปรไฟล์รูปภาพสำหรับบูต
ทำตามวิธีการต่อไปนี้เพื่อสร้างโปรไฟล์ภาพสำหรับบูตพื้นฐานโดยใช้การทดสอบในอุปกรณ์เครื่องเดียว
ตั้งค่าอุปกรณ์
กำหนดค่าอุปกรณ์ตามที่อธิบายไว้ในการกำหนดค่าอุปกรณ์
(ไม่บังคับ) รูปแบบโปรไฟล์ใหม่ต้องใช้เวลาในการล้างและแทนที่โปรไฟล์อื่นๆ หากต้องการเพิ่มความเร็วในการรวบรวมโปรไฟล์ ให้รีเซ็ตโปรไฟล์ทั้งหมดในอุปกรณ์
adb shell stop
adb 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 ของ classpath ของบูตโดยใช้คำสั่งต่อไปนี้
m dist
ls $ANDROID_PRODUCT_OUT/boot.zip
สร้างโปรไฟล์อิมเมจสำหรับบูตโดยใช้คำสั่ง
profman
ต่อไปนี้profman --generate-boot-image-profile --profile-file=android.prof --out-profile-path=... --out-preloaded-classes-path=...
ใช้ข้อมูลเพื่อปรับแต่งคําสั่ง
profman
โดยใช้ Flag เกณฑ์การเลือกที่มี--method-threshold
--class-threshold
--clean-class-threshold
--preloaded-class-threshold
--upgrade-startup-to-hot
--special-package
หากต้องการดูรายการทั้งหมด โปรดไปที่หน้าความช่วยเหลือหรือซอร์สโค้ดของ
profman