โปรไฟล์อิมเมจบูต

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

    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: ใช้การกำหนดค่าอุปกรณ์เพื่อตั้งค่าพร็อพเพอร์ตี้ฝั่งเซิร์ฟเวอร์ต่อไปนี้

    adb shell device_config put runtime_native_boot profilebootclasspath true
    adb shell device_config put runtime_native_boot profilesystemserver true
    

สร้างโปรไฟล์รูปภาพการบูต

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

  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 ของ classpath การบูตโดยใช้คำสั่งต่อไปนี้

    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หน้าความช่วยเหลือหรือซอร์สโค้ด