বুট ইমেজ প্রোফাইল

অ্যান্ড্রয়েড 11 বা উচ্চতর বুট ইমেজ প্রোফাইল তৈরি করা সমর্থন করে, যা সিস্টেম সার্ভার এবং বুট ক্লাসপাথের মতো বিভিন্ন সিস্টেম-স্তরের উপাদানগুলির কোড সম্পর্কে তথ্য এনক্যাপসুলেট করে। অ্যান্ড্রয়েড রানটাইম (এআরটি) সিস্টেম-ব্যাপী অপ্টিমাইজেশানগুলি সম্পাদন করতে এই তথ্যগুলি ব্যবহার করে, যার মধ্যে কিছু Android এর কার্যকারিতার জন্য গুরুত্বপূর্ণ এবং সমস্ত নন-নেটিভ কোড (সিস্টেম বা অ্যাপ স্তর) কার্যকর করাকে প্রভাবিত করে৷ কিছু ক্ষেত্রে, বুট ইমেজ প্রোফাইল ডবল ডিজিট শতাংশ দ্বারা এক্সিকিউশন কর্মক্ষমতা এবং মেমরি খরচ প্রভাবিত করতে পারে।

বুট প্রোফাইল তথ্য পান

বুট ইমেজ প্রোফাইলগুলি ক্রিটিক্যাল ইউজার যাত্রার (CUJs) সময় এক্সিকিউট করা অ্যাপের প্রোফাইল থেকে নেওয়া হয়। একটি নির্দিষ্ট ডিভাইস কনফিগারেশনে, ART ক্যাপচার করে (JIT প্রোফাইলের অংশ হিসাবে) বুট ক্লাসপাথ পদ্ধতি এবং অ্যাপগুলির দ্বারা ব্যবহৃত ক্লাস, তারপর সেই তথ্যগুলি অ্যাপ প্রোফাইলে রেকর্ড করে (উদাহরণস্বরূপ, /data/misc/profiles/cur/0/com.android.chrome/primary.prof ), যেখানে এটি বুট ক্লাসপাথ ডালভিক এক্সিকিউটেবল (DEX) ফাইল দ্বারা সূচিত করা হয়েছে ( এআরটি প্রোফাইল বিন্যাস দেখুন)।

বুট ক্লাসপাথের কোন অংশটি সর্বাধিক ব্যবহৃত এবং অপ্টিমাইজ করার জন্য সবচেয়ে গুরুত্বপূর্ণ তা নির্ধারণ করতে CUJ-এর সময় রেকর্ড করা অ্যাপ প্রোফাইলগুলি পর্যালোচনা করুন (উদাহরণস্বরূপ, ART প্রোফাইল বিন্যাস দেখুন)। সমস্ত পদ্ধতি বা ক্লাসগুলি সহ নেতিবাচকভাবে কর্মক্ষমতা প্রভাবিত করে, তাই সর্বাধিক ব্যবহৃত কোড পাথগুলিতে ফোকাস করুন৷ উদাহরণস্বরূপ, যদি বুট ক্লাসপাথ থেকে একটি পদ্ধতি একটি একক অ্যাপ দ্বারা ব্যবহৃত হয় তবে এটি বুট প্রোফাইলের অংশ হওয়া উচিত নয়। প্রতিটি ডিভাইসের CUJ নির্বাচন এবং পরীক্ষার মাধ্যমে উত্পাদিত ডেটার পরিমাণের উপর ভিত্তি করে পদ্ধতি/শ্রেণী নির্বাচন কনফিগার করা উচিত।

ডিভাইসে সমস্ত পৃথক অ্যাপ প্রোফাইল থেকে বুট ক্লাসপাথ তথ্য একত্রিত করতে, adb shell cmd package snapshot-profile android কমান্ডটি চালান। আপনি ব্যক্তিগত প্রোফাইলগুলিকে ম্যানুয়ালি একত্রিত না করে প্রক্রিয়াকরণ এবং পদ্ধতি/শ্রেণী নির্বাচনের ভিত্তি হিসাবে সমষ্টিগত তথ্য ব্যবহার করতে পারেন (যদিও আপনি চাইলে তা করতে পারেন)।

বুট ইমেজ প্রোফাইল

চিত্র 1. বুট ইমেজ প্রোফাইল পাওয়ার প্রক্রিয়া

বুট ইমেজ প্রোফাইল ডেটা

বুট ইমেজ প্রোফাইলে নিম্নলিখিত ফাইল এবং ডেটা অন্তর্ভুক্ত।

  • বুট ক্লাসপথের জন্য প্রোফাইল ( frameworks/base/config/boot-image-profile.txt )। বুট ক্লাসপাথ থেকে কোন পদ্ধতি অপ্টিমাইজ করা হবে, বুট .art ইমেজে কোন ক্লাস অন্তর্ভুক্ত করা হয়েছে এবং সংশ্লিষ্ট DEX ফাইলগুলি কীভাবে সাজানো হয়েছে তা নির্ধারণ করে।

  • প্রিলোড করা ক্লাসের তালিকা। জাইগোটে কোন ক্লাস প্রিলোড করা হয়েছে তা নির্ধারণ করে।

  • সিস্টেম সার্ভার উপাদানগুলির জন্য প্রোফাইল ( 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 ) বা এমন পদ্ধতিগুলিকে অগ্রাধিকার দেয় যা সাধারণত ব্যবহৃত হয় না কিন্তু এখনও গুরুত্বপূর্ণ (উদাহরণস্বরূপ, পদ্ধতিগুলি দ্বারা ব্যবহৃত হয় ক্যামেরা অ্যাপ)।

প্রোফাইল বিন্যাস অভ্যন্তরীণভাবে একাধিক পতাকা (স্টার্টআপ, পোস্ট-স্টার্টআপ, হটনেস, এবি) সহ প্রতিটি পদ্ধতিকে টীকা করে, যা শুধুমাত্র ডাম্প বিন্যাসে প্রদর্শিত হওয়ার চেয়ে বেশি। সমস্ত সংকেত ব্যবহার করতে, উপলব্ধ স্ক্রিপ্টগুলি পরিবর্তন করুন।

সুপারিশ

সেরা ফলাফলের জন্য নিম্নলিখিত নির্দেশিকা ব্যবহার করুন.

  • বেশ কয়েকটি টেস্ট ডিভাইসে বুট ইমেজ প্রোফাইল তৈরি করার জন্য কনফিগারেশন স্থাপন করুন এবং চূড়ান্ত বুট ইমেজ প্রোফাইল তৈরি করার আগে ফলাফলগুলি একত্রিত করুন। profman টুল একাধিক বুট ইমেজ প্রোফাইল একত্রিত এবং নির্বাচন সমর্থন করে, কিন্তু এটি শুধুমাত্র বুট ইমেজের (একই বুট ক্লাসপথ) একই সংস্করণের সাথে কাজ করে।

  • সিস্টেম প্রসেস দ্বারা ব্যবহৃত পদ্ধতি/ক্লাসগুলিতে নির্বাচনকে অগ্রাধিকার দিন। এই পদ্ধতি/ক্লাসগুলি এমন কোড ব্যবহার করতে পারে যা প্রায়শই অন্যান্য অ্যাপ দ্বারা ব্যবহৃত হয় না তবে এটি অপ্টিমাইজ করার জন্য এখনও গুরুত্বপূর্ণ।

  • একটি একক ডিভাইস রান থেকে ডেটা আকৃতি বাস্তব-বিশ্ব CUJs চালানোর পরীক্ষা ডিভাইসের তুলনায় খুব আলাদা দেখায়। আপনার কাছে পরীক্ষামূলক ডিভাইসের একটি বড় বহর না থাকলে, বুট ইমেজ প্রোফাইল অপ্টিমাইজেশানগুলি উত্পাদনে ভালভাবে কাজ করবে এমন আত্মবিশ্বাস বাড়াতে একাধিক 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 সহায়তা পৃষ্ঠা বা উত্স কোড পড়ুন।