โปรไฟล์รูปภาพเปิดเครื่อง

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

    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 ของ 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