Android 11 หรือสูงกว่ารองรับการสร้างโปรไฟล์อิมเมจสำหรับบูต ซึ่งสรุปข้อมูลเกี่ยวกับโค้ดของส่วนประกอบระดับระบบต่างๆ เช่น เซิร์ฟเวอร์ระบบและคลาสพาธสำหรับบูต รันไทม์ของ Android (ART) ใช้ข้อมูลนี้เพื่อทำการเพิ่มประสิทธิภาพทั้งระบบ ซึ่งบางส่วนมีความสำคัญต่อประสิทธิภาพของ Android และส่งผลกระทบต่อการดำเนินการของโค้ดที่ไม่ใช่เจ้าของภาษาทั้งหมด (ระดับระบบหรือแอป) ในบางกรณี โปรไฟล์อิมเมจสำหรับบูตอาจส่งผลต่อประสิทธิภาพการทำงานและการใช้หน่วยความจำเป็นเปอร์เซ็นต์สองหลัก
รับข้อมูลโปรไฟล์การบูต
โปรไฟล์อิมเมจสำหรับบูตได้มาจากโปรไฟล์ของแอปที่ดำเนินการในระหว่างการเดินทางของผู้ใช้ที่สำคัญ (CUJ) ในการกำหนดค่าอุปกรณ์เฉพาะ ART จะจับ (เป็นส่วนหนึ่งของโปรไฟล์ JIT) วิธีบูตคลาสพาธและคลาสที่แอปใช้ จากนั้นบันทึกข้อมูลนั้นในโปรไฟล์แอป (เช่น /data/misc/profiles/cur/0/com.android.chrome/primary.prof
) ซึ่งจัดทำดัชนีโดยไฟล์ boot classpath Dalvik Executable (DEX) (ดู รูปแบบโปรไฟล์ ART )
ตรวจสอบโปรไฟล์แอปที่บันทึกไว้ระหว่าง CUJ เพื่อพิจารณาว่าส่วนใดของบูตคลาสพาธที่ใช้มากที่สุดและสำคัญที่สุดในการปรับให้เหมาะสมที่สุด (ตัวอย่าง ดูที่ รูปแบบโปรไฟล์ ART ) การรวมวิธีการหรือคลาสทั้งหมดส่งผลเสียต่อประสิทธิภาพ ดังนั้นให้มุ่งเน้นไปที่เส้นทางโค้ดที่ใช้บ่อยที่สุด ตัวอย่างเช่น หากแอปเดียวใช้เมธอดจาก boot classpath ก็ไม่ควรเป็นส่วนหนึ่งของโปรไฟล์การบูต อุปกรณ์แต่ละเครื่องควรกำหนดค่าการเลือกวิธีการ/คลาสตามการเลือก 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: …
ในตัวอย่างข้างต้น:
core-oj.jar
ถูกใช้โดยcom.google.android.ext.services
และcom.android.systemui
แต่ละรายการจะแสดงแพ็กเกจสองแพ็กเกจที่ใช้จากcore-oj.jar
ทั้งสองกระบวนการใช้วิธีการที่มีดัชนี DEX 520 แต่เฉพาะกระบวนการ
systemui
เท่านั้นที่ใช้วิธีการที่มีดัชนี DEX 521 เหตุผลเดียวกันนี้ใช้กับส่วนโปรไฟล์อื่นๆ (เช่น คลาสเริ่มต้น)
ในระหว่างการประมวลผลข้อมูล ให้กรองวิธีการ/คลาสตามการใช้งาน โดยให้ความสำคัญกับกระบวนการระดับระบบ (เช่น เซิร์ฟเวอร์ระบบหรือ systemui
) หรือวิธีการที่อาจไม่ได้ใช้โดยทั่วไปแต่ยังคงมีความสำคัญ (เช่น วิธีการที่ใช้โดย แอพกล้อง)
รูปแบบโปรไฟล์จะอธิบายแต่ละวิธีภายในด้วยแฟล็กหลายรายการ (การเริ่มต้น หลังการเริ่มต้น ความร้อนสูง 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 คลาสพาธสำหรับบูตโดยใช้คำสั่งต่อไปนี้:
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
หรือซอร์สโค้ด-