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 และปริมาณข้อมูลที่เกิดจากการทดสอบ
หากต้องการรวมข้อมูลคลาสพาธการเปิดเครื่องจากโปรไฟล์แอปทั้งหมดในอุปกรณ์ ให้เรียกใช้คำสั่ง 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
) หรือเมธอดที่อาจไม่ได้ใช้กันโดยทั่วไปแต่ยังคงสําคัญ (เช่น เมธอดที่แอปกล้องใช้)
รูปแบบโปรไฟล์จะทำคำอธิบายประกอบภายในแต่ละเมธอดด้วยแฟล็กหลายรายการ (startup, post-startup, hotness, abi) ซึ่งมากกว่าที่แสดงในรูปแบบ Dump เท่านั้น หากต้องการใช้สัญญาณทั้งหมด ให้แก้ไขสคริปต์ที่มี
คำแนะนำ
ใช้หลักเกณฑ์ต่อไปนี้เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด
ติดตั้งใช้งานการกำหนดค่าสำหรับการสร้างโปรไฟล์อิมเมจการบูตในอุปกรณ์ทดสอบหลายเครื่องและรวบรวมผลลัพธ์ก่อนที่จะสร้างโปรไฟล์อิมเมจการบูตสุดท้าย เครื่องมือ
profman
รองรับการรวมและการเลือกโปรไฟล์อิมเมจการเปิดเครื่องหลายรายการ แต่จะใช้งานได้กับอิมเมจการเปิดเครื่องเวอร์ชันเดียวกันเท่านั้น (Classpath ในการเปิดเครื่องเดียวกัน)ให้ความสำคัญกับเมธอด/คลาสที่ระบบใช้ วิธีการ/ชั้นเรียนเหล่านี้อาจใช้โค้ดที่แอปอื่นๆ ไม่ค่อยได้ใช้แต่ก็ยังคงจำเป็นต่อการเพิ่มประสิทธิภาพ
รูปแบบข้อมูลจากอุปกรณ์เครื่องเดียวจะแตกต่างอย่างมากเมื่อเทียบกับอุปกรณ์ทดสอบที่ใช้ 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
โดยใช้แฟล็กเกณฑ์การเลือกที่มีอยู่--method-threshold
--class-threshold
--clean-class-threshold
--preloaded-class-threshold
--upgrade-startup-to-hot
--special-package
หากต้องการดูรายการทั้งหมด โปรดดูที่หน้าความช่วยเหลือหรือซอร์สโค้ด
profman