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: …
ในตัวอย่างด้านบน
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: ใช้การกำหนดค่าอุปกรณ์เพื่อตั้งค่าพร็อพเพอร์ตี้ฝั่งเซิร์ฟเวอร์ต่อไปนี้
adb shell device_config put runtime_native_boot profilebootclasspath true adb shell device_config put runtime_native_boot profilesystemserver true
สร้างโปรไฟล์รูปภาพการบูต
ใช้คำสั่งต่อไปนี้เพื่อสร้างโปรไฟล์อิมเมจการบูตพื้นฐานโดยใช้ การทดสอบในอุปกรณ์เครื่องเดียว
ตั้งค่าอุปกรณ์
กำหนดค่าอุปกรณ์ตามที่อธิบายไว้ในการกำหนดค่า อุปกรณ์
(ไม่บังคับ) รูปแบบโปรไฟล์ใหม่ต้องใช้เวลาในการล้างและแทนที่โปรไฟล์อื่นๆ หากต้องการเร่งการรวบรวมโปรไฟล์ ให้รีเซ็ตโปรไฟล์ทั้งหมดในอุปกรณ์
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
หน้าความช่วยเหลือหรือซอร์สโค้ด