โปรไฟล์รูปภาพสำหรับบูต

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 (มีผลถาวรจนกว่าไฟล์จะถูกลบ) โดยทำดังนี้:

    1. สร้างไฟล์ local.prop ที่มีเนื้อหา:

      dalvik.vm.profilebootclasspath=true
      dalvik.vm.profilesystemserver=true
      
    2. รันคำสั่งต่อไปนี้:

      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`
    

สร้างโปรไฟล์อิมเมจสำหรับบูต

ใช้คำแนะนำต่อไปนี้เพื่อสร้างโปรไฟล์อิมเมจสำหรับบูตพื้นฐานโดยใช้การทดสอบบนอุปกรณ์เครื่องเดียว

  1. ตั้งค่าอุปกรณ์

    1. กำหนดค่าอุปกรณ์ตามที่อธิบายไว้ใน การกำหนดค่าอุปกรณ์

    2. (ไม่บังคับ) ต้องใช้เวลาเพื่อให้รูปแบบโปรไฟล์ใหม่สะอาดและแทนที่โปรไฟล์อื่น หากต้องการเพิ่มความเร็วในการรวบรวมโปรไฟล์ ให้รีเซ็ตโปรไฟล์ทั้งหมดบนอุปกรณ์

      adb shell stop
      adb shell find "/data/misc/profiles -name *.prof -exec truncate -s 0 {} \;"
      adb shell start
      
    3. เรียกใช้ CUJ บนอุปกรณ์

  2. จับภาพโปรไฟล์โดยใช้คำสั่งต่อไปนี้:

    adb shell cmd package snapshot-profile android
    
  3. แยกโปรไฟล์โดยใช้คำสั่งต่อไปนี้:

    adb pull /data/misc/profman/android.prof
    
  4. นำทางไปยังไฟล์ JAR คลาสพาธสำหรับบูตโดยใช้คำสั่งต่อไปนี้:

    m dist
    ls $ANDROID_PRODUCT_OUT/boot.zip
    
  5. สร้างโปรไฟล์อิมเมจสำหรับบูตโดยใช้คำสั่ง profman ต่อไปนี้

    profman --generate-boot-image-profile --profile-file=android.prof --out-profile-path=... --out-preloaded-classes-path=...
    
  6. การใช้ข้อมูล ปรับแต่งคำสั่ง profman โดยใช้แฟล็กเกณฑ์การเลือกที่มีอยู่

    • --method-threshold
    • --class-threshold
    • --clean-class-threshold
    • --preloaded-class-threshold
    • --upgrade-startup-to-hot
    • --special-package

    หากต้องการดูรายการทั้งหมด โปรดดูที่หน้าวิธีใช้ของ profman หรือซอร์สโค้ด