ART কনফিগার করা হচ্ছে

এই পৃষ্ঠাটি কীভাবে ART কনফিগার করতে হয় এবং এর সংকলন বিকল্পগুলি নিয়ে আলোচনা করে। এখানে সম্বোধন করা বিষয়গুলির মধ্যে রয়েছে সিস্টেম ইমেজের প্রাক-সংকলনের কনফিগারেশন, dex2oat কম্পাইলেশন অপশন, এবং কীভাবে সিস্টেম পার্টিশন স্পেস, ডেটা পার্টিশন স্পেস এবং পারফরম্যান্স ট্রেড করা যায়।

এআরটি এবং ডালভিক দেখুন, ডালভিক এক্সিকিউটেবল ফরম্যাট এবং source.android.com-এ ART-এর সাথে কাজ করার জন্য অবশিষ্ট পৃষ্ঠাগুলি। আপনার অ্যাপ্লিকেশানগুলি সঠিকভাবে কাজ করে তা নিশ্চিত করতে Android রানটাইম (ART) এ অ্যাপ আচরণ যাচাই করা দেখুন।

কিভাবে ART কাজ করে

ART এড-অফ-টাইম (AOT) সংকলন ব্যবহার করে এবং Android 7.0 (Nougat বা N) থেকে শুরু করে, এটি AOT, জাস্ট-ইন-টাইম (JIT) সংকলন এবং প্রোফাইল-গাইডেড কম্পাইলেশনের একটি হাইব্রিড সমন্বয় ব্যবহার করে। এই সমস্ত সংকলন মোডগুলির সমন্বয় কনফিগারযোগ্য এবং এই বিভাগে আলোচনা করা হবে। উদাহরণ হিসাবে, পিক্সেল ডিভাইসগুলি নিম্নলিখিত সংকলন প্রবাহের সাথে কনফিগার করা হয়েছে:

  1. একটি অ্যাপ্লিকেশন প্রাথমিকভাবে কোনো AOT সংকলন ছাড়াই ইনস্টল করা হয়। প্রথম কয়েকবার অ্যাপ্লিকেশন চালানো হবে, এটি ব্যাখ্যা করা হবে, এবং প্রায়শই চালানো পদ্ধতিগুলি JIT কম্পাইল করা হবে।
  2. যখন ডিভাইসটি নিষ্ক্রিয় থাকে এবং চার্জ করা হয়, একটি সংকলন ডেমন প্রথম রানের সময় উত্পন্ন একটি প্রোফাইলের উপর ভিত্তি করে ঘন ঘন ব্যবহৃত কোড AOT-কম্পাইলে চলে।
  3. একটি অ্যাপ্লিকেশনের পরবর্তী পুনঃসূচনা প্রোফাইল-নির্দেশিত কোড ব্যবহার করবে এবং ইতিমধ্যে সংকলিত পদ্ধতিগুলির জন্য রানটাইমে JIT সংকলন করা এড়াবে। নতুন রানের সময় JIT-সংকলিত পদ্ধতিগুলি প্রোফাইলে যোগ করা হবে, যা পরে কম্পাইলেশন ডেমন দ্বারা বাছাই করা হবে।

ART-এ একটি কম্পাইলার ( dex2oat টুল) এবং একটি রানটাইম ( libart.so ) রয়েছে যা জাইগোট শুরু করার জন্য লোড করা হয়। dex2oat টুলটি একটি APK ফাইল নেয় এবং রানটাইম লোড হওয়া এক বা একাধিক সংকলন আর্টিফ্যাক্ট ফাইল তৈরি করে। ফাইলের সংখ্যা, তাদের এক্সটেনশন এবং নাম রিলিজ জুড়ে পরিবর্তন সাপেক্ষে, কিন্তু Android O রিলিজ হিসাবে, ফাইলগুলি তৈরি করা হচ্ছে:

  • .vdex : যাচাইকরণের গতি বাড়ানোর জন্য কিছু অতিরিক্ত মেটাডেটা সহ APK-এর অসঙ্কোচিত DEX কোড রয়েছে।
  • .odex : APK-এ পদ্ধতির জন্য AOT সংকলিত কোড রয়েছে।
  • .art (optional) : এপিকে তালিকাভুক্ত কিছু স্ট্রিং এবং ক্লাসের ART অভ্যন্তরীণ উপস্থাপনা রয়েছে, অ্যাপ্লিকেশন স্টার্টআপের গতি বাড়াতে ব্যবহৃত।

সংকলন বিকল্প

ART-এর জন্য সংকলন বিকল্প দুটি বিভাগে রয়েছে:

  1. সিস্টেম রম কনফিগারেশন: সিস্টেম ইমেজ তৈরি করার সময় কোন কোড AOT-সংকলিত হয়।
  2. রানটাইম কনফিগারেশন: এআরটি কীভাবে একটি ডিভাইসে অ্যাপ্লিকেশন কম্পাইল করে এবং চালায়।

এই দুটি বিভাগ কনফিগার করার জন্য একটি মূল ART বিকল্প হল কম্পাইলার ফিল্টার । কম্পাইলার ফিল্টারগুলি চালায় কিভাবে ART DEX কোড কম্পাইল করে এবং এটি dex2oat টুলে পাস করা একটি বিকল্প। অ্যান্ড্রয়েড ও থেকে শুরু করে, চারটি আনুষ্ঠানিকভাবে সমর্থিত ফিল্টার রয়েছে:

  • যাচাই করুন : শুধুমাত্র DEX কোড যাচাইকরণ চালান।
  • দ্রুত করুন : DEX কোড যাচাইকরণ চালান এবং আরও ভাল দোভাষী কর্মক্ষমতা পেতে কিছু DEX নির্দেশাবলী অপ্টিমাইজ করুন।
  • গতি : DEX কোড যাচাইকরণ চালান এবং AOT-সমস্ত পদ্ধতি কম্পাইল করুন।
  • স্পিড-প্রোফাইল : প্রোফাইল ফাইলে তালিকাভুক্ত DEX কোড যাচাইকরণ এবং AOT-কম্পাইল পদ্ধতি চালান।

সিস্টেম রম কনফিগারেশন

সিস্টেম রম কনফিগার করার জন্য অনেকগুলি ART বিল্ড বিকল্প উপলব্ধ রয়েছে। এই বিকল্পগুলি কীভাবে কনফিগার করবেন তা নির্ভর করে /system জন্য উপলব্ধ সঞ্চয়স্থান এবং পূর্বে ইনস্টল করা অ্যাপ্লিকেশনের সংখ্যার উপর। একটি সিস্টেম রমে সংকলিত JARs/APK গুলিকে চারটি বিভাগে ভাগ করা যেতে পারে:

  • বুট ক্লাসপাথ কোড: ডিফল্টভাবে স্পিড কম্পাইলার ফিল্টার দিয়ে কম্পাইল করা হয়।
  • সিস্টেম সার্ভার কোড: ডিফল্টরূপে গতি কম্পাইলার ফিল্টার দিয়ে সংকলিত।
  • পণ্য-নির্দিষ্ট মূল অ্যাপ্লিকেশন: ডিফল্টরূপে গতি কম্পাইলার ফিল্টার দিয়ে সংকলিত।
  • অন্যান্য সমস্ত অ্যাপ্লিকেশন: ডিফল্টরূপে দ্রুত কম্পাইলার ফিল্টার দিয়ে সংকলিত

মেকফাইল অপশন

  • WITH_DEXPREOPT
  • সিস্টেম ইমেজে ইনস্টল করা DEX কোডে dex2oat আহ্বান করা হয়েছে কিনা। ডিফল্টরূপে সক্রিয়.

  • DONT_DEXPREOPT_PREBUILTS (অ্যান্ড্রয়েড এল থেকে)
  • DONT_DEXPREOPT_PREBUILTS সক্ষম করা প্রি-অপ্টিমাইজ হওয়া থেকে DONT_DEXPREOPT_PREBUILTS বাধা দেয়৷ এগুলি এমন অ্যাপ যা তাদের Android.mk এ উল্লেখ করা include $(BUILD_PREBUILT) করে, যেমন Gmail। Google Play-এর মাধ্যমে আপডেট হতে পারে এমন প্রি-অপ্টিমাইজেশন এড়িয়ে যাওয়া /system স্পেস বাঁচায় কিন্তু প্রথম বুট টাইম যোগ করে।

  • PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER (Android 9 থেকে)
  • PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER পূর্ব-অপ্টিমাইজ করা অ্যাপ্লিকেশনগুলির জন্য ডিফল্ট কম্পাইলার ফিল্টার নির্দিষ্ট করে৷ এগুলি এমন অ্যাপ যা তাদের Android.mk এ উল্লেখ করা include $(BUILD_PREBUILT) করে, যেমন Gmail। অনির্দিষ্ট থাকলে, ডিফল্ট মান দ্রুত হয়।

  • WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY (Android O MR1 এ নতুন)
  • WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY সক্ষম করা শুধুমাত্র বুট ক্লাসপথ এবং সিস্টেম সার্ভার WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY প্রাক-অপ্টিমাইজ করে৷

  • LOCAL_DEX_PREOPT
  • মডিউল সংজ্ঞায় LOCAL_DEX_PREOPT বিকল্পটি নির্দিষ্ট করে একটি পৃথক অ্যাপের ভিত্তিতে প্রাক-অপ্টিমাইজেশন সক্ষম বা নিষ্ক্রিয় করা যেতে পারে। এটি এমন অ্যাপগুলির প্রাক-অপ্টিমাইজেশন নিষ্ক্রিয় করার জন্য কার্যকর হতে পারে যেগুলি অবিলম্বে Google Play আপডেটগুলি পেতে পারে কারণ আপডেটগুলি সিস্টেমের চিত্রে প্রাক-অপ্টিমাইজ করা কোডটিকে অপ্রচলিত করে দেবে৷ এটি প্রধান সংস্করণ আপগ্রেড OTA-তে স্থান বাঁচাতেও দরকারী কারণ ব্যবহারকারীদের ইতিমধ্যে ডেটা পার্টিশনে অ্যাপগুলির নতুন সংস্করণ থাকতে পারে।

    LOCAL_DEX_PREOPT যথাক্রমে প্রাক-অপ্টিমাইজেশন সক্ষম বা নিষ্ক্রিয় করতে 'সত্য' বা 'মিথ্যা' মানগুলিকে সমর্থন করে। উপরন্তু, 'নস্ট্রিপিং' নির্দিষ্ট করা যেতে পারে যদি প্রি-অপ্টিমাইজেশানটি APK বা JAR ফাইল থেকে classes.dex ফাইলটি ছিনিয়ে না নেয়। সাধারণত এই ফাইলটি ছিনতাই করা হয় কারণ প্রাক-অপ্টিমাইজেশনের পরে এটির আর প্রয়োজন নেই, তবে তৃতীয় পক্ষের APK স্বাক্ষরগুলিকে বৈধ রাখার অনুমতি দেওয়ার জন্য এই শেষ বিকল্পটি প্রয়োজনীয়।

  • PRODUCT_DEX_PREOPT_BOOT_FLAGS
  • বুট ইমেজ কিভাবে কম্পাইল করা হয় তা নিয়ন্ত্রণ করতে dex2oat এ অপশন পাস করে। এটি কাস্টমাইজড ইমেজ ক্লাস লিস্ট, কম্পাইল করা ক্লাস লিস্ট এবং কম্পাইলার ফিল্টার নির্দিষ্ট করতে ব্যবহার করা যেতে পারে।

  • PRODUCT_DEX_PREOPT_DEFAULT_FLAGS
  • বুট ইমেজ ছাড়াও সবকিছু কীভাবে সংকলিত হয় তা নিয়ন্ত্রণ করতে dex2oat এ বিকল্পগুলি পাস করে।

  • PRODUCT_DEX_PREOPT_MODULE_CONFIGS
  • একটি নির্দিষ্ট মডিউল এবং পণ্য কনফিগারেশনের জন্য dex2oat বিকল্পগুলি পাস করার ক্ষমতা প্রদান করে। এটি একটি পণ্যের device.mk ফাইলে $(call add-product-dex-preopt-module-config,<modules>,<option>) দ্বারা সেট করা হয় যেখানে <modules> JAR এবং APK-এর জন্য LOCAL_MODULE এবং LOCAL_PACKAGE নামের একটি তালিকা ফাইল, যথাক্রমে।

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

  • PRODUCT_SYSTEM_SERVER_APPS (New in Android O)
  • সিস্টেম সার্ভার দ্বারা লোড করা অ্যাপ্লিকেশনের তালিকা। এই অ্যাপ্লিকেশনগুলি স্পীড কম্পাইলার ফিল্টার দিয়ে ডিফল্টরূপে কম্পাইল করা হবে।

  • PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD(Post Android O)
  • ডিভাইসে ART এর একটি ডিবাগ সংস্করণ অন্তর্ভুক্ত করা হবে কিনা। ডিফল্টরূপে, এটি userdebug এবং eng বিল্ডের জন্য সক্রিয় করা আছে। আচরণটি স্পষ্টভাবে সত্য বা মিথ্যাতে বিকল্প সেট করে ওভাররাইড করা যেতে পারে।

    ডিফল্টরূপে, ডিভাইসটি অ-ডিবাগ সংস্করণ ব্যবহার করবে ( libart.so )। স্যুইচ করতে, সিস্টেম প্রপার্টি persist.sys.dalvik.vm.lib.2 সেট করুন।

  • WITH_DEXPREOPT_PIC (Removed in Android O)
  • Android 5.1.0 থেকে Android 6.0.1-এ, WITH_DEXPREOPT_PIC পজিশন-ইনডিপেনডেন্ট কোড (PIC) সক্ষম করতে নির্দিষ্ট করা যেতে পারে। এর সাথে, ইমেজ থেকে সংকলিত কোডকে /সিস্টেম থেকে /ডাটা/ডালভিক-ক্যাশে স্থানান্তর করতে হবে না, ডেটা পার্টিশনে স্থান বাঁচাতে হবে। যাইহোক, একটি সামান্য রানটাইম প্রভাব আছে কারণ এটি একটি অপ্টিমাইজেশন অক্ষম করে যা অবস্থান-নির্ভর কোডের সুবিধা নেয়। সাধারণত, /ডেটাতে স্থান বাঁচাতে চায় এমন ডিভাইসগুলিকে PIC সংকলন সক্ষম করা উচিত।

    Android 7.0-এ, PIC সংকলন ডিফল্টরূপে সক্ষম ছিল।

  • WITH_DEXPREOPT_BOOT_IMG_ONLY (Android O MR1 এ সরানো হয়েছে)
  • এই বিকল্পটি WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY দিয়ে প্রতিস্থাপিত হয়েছে যা সিস্টেম সার্ভার জারগুলিকেও প্রিঅপ্ট করে৷

বুট ক্লাসপাথ কনফিগারেশন

  • প্রিলোড করা ক্লাসের তালিকা
  • প্রিলোড করা ক্লাসের তালিকা হল ক্লাসের একটি তালিকা যা জাইগোট স্টার্টআপে শুরু করে। এটি প্রতিটি অ্যাপকে এই ক্লাস ইনিশিয়ালাইজারগুলিকে আলাদাভাবে চালানো থেকে বাঁচায়, তাদের দ্রুত শুরু করতে এবং মেমরিতে পৃষ্ঠাগুলি ভাগ করার অনুমতি দেয়। প্রিলোড করা ক্লাসের তালিকা ফাইলটি ডিফল্টরূপে frameworks/base/config/preloaded-classes অবস্থিত এবং এটিতে একটি তালিকা রয়েছে যা সাধারণ ফোন ব্যবহারের জন্য টিউন করা হয়েছে। এটি পরিধানযোগ্য অন্যান্য ডিভাইসের জন্য আলাদা হতে পারে এবং সেই অনুযায়ী টিউন করতে হবে। এই টিউন করার সময় সতর্ক থাকুন; অব্যবহৃত ক্লাস লোড হয়ে গেলে অনেকগুলি ক্লাস যোগ করা মেমরি নষ্ট করে। খুব কম ক্লাস যোগ করার ফলে প্রতিটি অ্যাপের নিজস্ব কপি থাকতে হবে, যা আবার মেমরি নষ্ট করে।

    উদাহরণ ব্যবহার (পণ্যের device.mk এ):

    PRODUCT_COPY_FILES += <filename>:system/etc/preloaded-classes
    

    দ্রষ্টব্য: কোনো পণ্য কনফিগারেশন মেকফাইল উত্তরাধিকারসূত্রে নেওয়ার আগে এই লাইনটি স্থাপন করা আবশ্যক যেগুলি থেকে ডিফল্ট একটি পাওয়া যায়: build/target/product/base.mk

  • চিত্র ক্লাস তালিকা
  • ইমেজ ক্লাসের তালিকা হল ক্লাসের একটি তালিকা যা dex2oat সময়ের আগে শুরু করে এবং boot.art ফাইলে সঞ্চয় করে। এটি জাইগোটকে প্রিলোড করার সময় এই ক্লাসগুলির জন্য ইনিশিয়ালাইজার চালানোর পরিবর্তে স্টার্টআপে boot.art ফাইলের বাইরে এই ফলাফলগুলি লোড করার অনুমতি দেয়। এর একটি মূল বৈশিষ্ট্য হল যে চিত্র থেকে লোড করা এবং প্রক্রিয়াগুলির মধ্যে ভাগ করা পৃষ্ঠাগুলি পরিষ্কার হতে পারে, যাতে সেগুলি কম মেমরির পরিস্থিতিতে সহজেই অদলবদল করা যায়। L-এ, ডিফল্টরূপে ইমেজ ক্লাসের তালিকা প্রিলোড করা ক্লাসের তালিকার মতো একই তালিকা ব্যবহার করে। AOSP-তে পোস্ট-এল শুরু করে, একটি কাস্টম ইমেজ ক্লাস তালিকা ব্যবহার করে নির্দিষ্ট করা যেতে পারে:

    PRODUCT_DEX_PREOPT_BOOT_FLAGS
    

    উদাহরণ ব্যবহার (পণ্যের device.mk ):

    PRODUCT_DEX_PREOPT_BOOT_FLAGS += --image-classes=<filename>
    
  • সংকলিত ক্লাসের তালিকা
  • পোস্ট-এল AOSP-এ, কম্পাইল করা ক্লাসের তালিকা ব্যবহার করে প্রাক-অপ্টিমাইজেশনের সময় কম্পাইল করার জন্য বুট ক্লাসপথ থেকে ক্লাসের একটি উপসেট নির্দিষ্ট করা যেতে পারে। এটি এমন ডিভাইসগুলির জন্য একটি দরকারী বিকল্প হতে পারে যেগুলি স্থানের উপর খুব আঁটসাঁট এবং সম্পূর্ণ প্রাক-অপ্টিমাইজ করা বুট চিত্রের সাথে ফিট করতে পারে না। যাইহোক, এই তালিকার দ্বারা নির্দিষ্ট নয় এমন নোট ক্লাসগুলি কম্পাইল করা হবে না - এমনকি ডিভাইসেও নয় - এবং অবশ্যই ব্যাখ্যা করতে হবে, সম্ভাব্য রানটাইম কর্মক্ষমতা প্রভাবিত করে৷ ডিফল্টরূপে, dex2oat $OUT/system/etc/compiled-classes-এ একটি সংকলিত ক্লাসের তালিকা খুঁজবে, তাই একটি কাস্টম একটিকে device.mk দ্বারা সেই অবস্থানে অনুলিপি করা যেতে পারে। একটি নির্দিষ্ট ফাইলের অবস্থান ব্যবহার করেও নির্দিষ্ট করা যেতে পারে:

    PRODUCT_DEX_PREOPT_BOOT_FLAGS
    

    উদাহরণ ব্যবহার (পণ্যের device.mk ):

    PRODUCT_COPY_FILES += <filename>:system/etc/compiled-classes
    

    দ্রষ্টব্য: কোনো পণ্য কনফিগারেশন মেকফাইল উত্তরাধিকারসূত্রে নেওয়ার আগে এই লাইনটি স্থাপন করা আবশ্যক যেগুলি থেকে ডিফল্ট একটি পাওয়া যায়: build/target/product/base.mk

রানটাইম কনফিগারেশন

জিট বিকল্প

নিম্নলিখিত বিকল্পগুলি শুধুমাত্র Android রিলিজগুলিকে প্রভাবিত করে যেখানে ART JIT কম্পাইলার উপলব্ধ।

  • dalvik.vm.usejit: JIT সক্ষম হোক বা না হোক।
  • dalvik.vm.jitinitialsize (ডিফল্ট 64K): কোড ক্যাশের প্রাথমিক ক্ষমতা। কোড ক্যাশে নিয়মিত GC এবং প্রয়োজন হলে বৃদ্ধি হবে.
  • dalvik.vm.jitmaxsize (ডিফল্ট 64M): কোড ক্যাশের সর্বোচ্চ ক্ষমতা।
  • dalvik.vm.jitthreshold: (ডিফল্ট 10000) - এটি সেই থ্রেশহোল্ড যা একটি পদ্ধতির "হটনেস" কাউন্টারকে পাস করতে হবে যাতে পদ্ধতিটি JIT কম্পাইল করা যায়। "হটনেস" কাউন্টারটি রানটাইমের একটি মেট্রিক অভ্যন্তরীণ। এতে কলের সংখ্যা, অনগ্রসর শাখা এবং অন্যান্য বিষয় অন্তর্ভুক্ত রয়েছে।
  • dalvik.vm.usejitprofiles: JIT প্রোফাইল সক্রিয় আছে কি না; dalvik.vm.usejit মিথ্যা হলেও এটি ব্যবহার করা যেতে পারে। মনে রাখবেন যে এটি মিথ্যা হলে, কম্পাইলার ফিল্টার স্পিড-প্রোফাইল কোনো পদ্ধতি AOT-সংকলন করে না এবং এটি quicken- এর সমতুল্য।
  • dalvik.vm.jitprithreadweight (ডিফল্ট থেকে dalvik.vm.jitthreshold / 20) - অ্যাপ্লিকেশন UI থ্রেডের জন্য JIT "নমুনা" (জিটথ্রেশহোল্ড দেখুন) এর ওজন। অ্যাপের সাথে ইন্টারঅ্যাক্ট করার সময় ব্যবহারকারীদের অভিজ্ঞতাকে সরাসরি প্রভাবিত করে এমন পদ্ধতির সংকলন দ্রুত করতে ব্যবহার করুন।
  • dalvik.vm.jittransitionweight: (ডিফল্ট থেকে dalvik.vm.jitthreshold / 10) পদ্ধতি আহ্বানের ওজন যা কম্পাইল কোড এবং ইন্টারপ্রেটারের মধ্যে স্থানান্তরিত হয়। এটি নিশ্চিত করতে সাহায্য করে যে জড়িত পদ্ধতিগুলি ট্রানজিশনগুলি কমানোর জন্য সংকলিত হয়েছে (যা ব্যয়বহুল)।

প্যাকেজ ম্যানেজার বিকল্প

অ্যান্ড্রয়েড 7.0 থেকে, বিভিন্ন পর্যায়ে সংকলন/যাচাইয়ের স্তর নির্দিষ্ট করার একটি সাধারণ উপায় রয়েছে। সংকলন স্তরগুলি ডিফল্টগুলি সহ সিস্টেম বৈশিষ্ট্যগুলির মাধ্যমে কনফিগার করা যেতে পারে:

  • pm.dexopt.install=speed-profile
  • এটি Google Play এর মাধ্যমে অ্যাপ্লিকেশন ইনস্টল করার সময় ব্যবহৃত সংকলন ফিল্টার। ডেক্স মেটাডেটা ফাইল থেকে প্রোফাইলের ব্যবহার সক্ষম করার জন্য আমরা ইনস্টল ফিল্টারটিকে গতি-প্রোফাইলে সেট করার পরামর্শ দিই। নোট করুন যে যদি একটি প্রোফাইল প্রদান করা না হয় বা যদি এটি খালি হয় তবে গতি-প্রোফাইল দ্রুত করার সমতুল্য।

  • pm.dexopt.bg-dexopt=speed-profile
  • যখন ডিভাইসটি নিষ্ক্রিয়, চার্জিং এবং সম্পূর্ণরূপে চার্জ করা হয় তখন এটি ব্যবহার করা সংকলন ফিল্টার। প্রোফাইল-নির্দেশিত সংকলনের সুবিধা নিতে এবং স্টোরেজ সংরক্ষণ করতে স্পিড-প্রোফাইল কম্পাইলার ফিল্টারটি ব্যবহার করে দেখুন।

  • pm.dexopt.boot=verify
  • একটি ওভার-দ্য-এয়ার আপডেটের পরে ব্যবহৃত সংকলন ফিল্টার। খুব দীর্ঘ বুট সময় এড়াতে আমরা দৃঢ়ভাবে এই বিকল্পের জন্য যাচাই কম্পাইলার ফিল্টার সুপারিশ.

  • pm.dexopt.first-boot=quicken
  • প্রথমবার ডিভাইস বুট করার জন্য সংকলন ফিল্টার। এখানে ব্যবহৃত ফিল্টার শুধুমাত্র কারখানা পরে বুট সময় প্রভাবিত করবে. কোনো ব্যবহারকারী প্রথমবার ফোন ব্যবহার করার আগে দীর্ঘ সময় এড়াতে আমরা ফিল্টার দ্রুত করার পরামর্শ দিই। মনে রাখবেন যে /system সমস্ত অ্যাপ্লিকেশনগুলি যদি ইতিমধ্যেই দ্রুত কম্পাইলার ফিল্টার দিয়ে কম্পাইল করা হয় বা স্পিড বা স্পিড-প্রোফাইল কম্পাইলার ফিল্টার দিয়ে কম্পাইল করা হয়, তাহলে pm.dexopt.first pm.dexopt.first-boot এর কোনো প্রভাব নেই।

Dex2oat বিকল্প

মনে রাখবেন যে এই বিকল্পগুলি dex2oat কে ডিভাইসে সংকলনের সময় এবং প্রাক-অপ্টিমাইজেশনের সময় প্রভাবিত করে, যেখানে উপরে আলোচনা করা বেশিরভাগ বিকল্পগুলি শুধুমাত্র প্রাক-অপ্টিমাইজেশনকে প্রভাবিত করে।

বুট ইমেজ কম্পাইল করার সময় dex2oat নিয়ন্ত্রণ করতে:

  • dalvik.vm.image-dex2oat-Xms: প্রাথমিক হিপ সাইজ
  • dalvik.vm.image-dex2oat-Xmx: সর্বোচ্চ হিপ সাইজ
  • dalvik.vm.image-dex2oat-filter: কম্পাইলার ফিল্টার বিকল্প
  • dalvik.vm.image-dex2oat-threads: ব্যবহার করার জন্য থ্রেডের সংখ্যা

বুট ইমেজ ছাড়াও সবকিছু কম্পাইল করার সময় dex2oat নিয়ন্ত্রণ করতে:

  • dalvik.vm.dex2oat-Xms: প্রাথমিক হিপ সাইজ
  • dalvik.vm.dex2oat-Xmx: সর্বোচ্চ হিপ সাইজ
  • dalvik.vm.dex2oat-filter: কম্পাইলার ফিল্টার বিকল্প

Android 6.0 এর মাধ্যমে রিলিজে, বুট ইমেজ ছাড়াও সবকিছু কম্পাইল করার জন্য একটি অতিরিক্ত বিকল্প প্রদান করা হয়:

  • dalvik.vm.dex2oat-থ্রেড: ব্যবহার করার জন্য থ্রেডের সংখ্যা

অ্যান্ড্রয়েড 6.1 দিয়ে শুরু করে, বুট ইমেজ ছাড়াও সবকিছু কম্পাইল করার জন্য এটি দুটি অতিরিক্ত বিকল্প হয়ে ওঠে:

  • dalvik.vm.boot-dex2oat-threads: বুট করার সময় ব্যবহার করার জন্য থ্রেডের সংখ্যা
  • dalvik.vm.dex2oat-threads: বুট সময়ের পরে ব্যবহার করার জন্য থ্রেডের সংখ্যা

Android 7.1 দিয়ে শুরু করে, বুট ইমেজ ছাড়াও সবকিছু কম্পাইল করার সময় মেমরি কীভাবে ব্যবহার করা হয় তা নিয়ন্ত্রণ করার জন্য দুটি বিকল্প দেওয়া হয়েছে:

  • dalvik.vm.dex2oat-very-large: AOT সংকলন নিষ্ক্রিয় করতে বাইটে ন্যূনতম মোট ডেক্স ফাইলের আকার
  • dalvik.vm.dex2oat-swap: dex2oat সোয়াপ ফাইল ব্যবহার করুন (লো-মেমরি ডিভাইসের জন্য)

dex2oat জন্য প্রারম্ভিক এবং সর্বাধিক হিপ সাইজ নিয়ন্ত্রণ করে এমন বিকল্পগুলি কমানো উচিত নয় কারণ তারা কোন অ্যাপ্লিকেশনগুলিকে কম্পাইল করা যেতে পারে তা সীমিত করতে পারে।

অ্যান্ড্রয়েড 11 দিয়ে শুরু করে, কম্পাইলার থ্রেডগুলিকে একটি নির্দিষ্ট গ্রুপের CPU-তে সীমাবদ্ধ করার অনুমতি দেওয়ার জন্য তিনটি CPU অ্যাফিনিটি বিকল্প সরবরাহ করা হয়েছে:

  • dalvik.vm.boot-dex2oat-cpu-set: CPU গুলি বুট করার সময় dex2oat থ্রেড চালায়
  • dalvik.vm.image-dex2oat-cpu-set: বুট ইমেজ কম্পাইল করার সময় dex2oat চালিত CPU
  • dalvik.vm.dex2oat-cpu-set: বুট সময়ের পরে dex2oat থ্রেড চালানোর CPU

CPU গুলিকে CPU ids-এর একটি কমা-বিভক্ত তালিকা হিসাবে উল্লেখ করা উচিত। উদাহরণস্বরূপ CPUs 0-3 এ dex2oat চালানোর জন্য, সেট করুন:

dalvik.vm.dex2oat-cpu-set=0,1,2,3

সিপিইউ অ্যাফিনিটি বৈশিষ্ট্যগুলি সেট করার সময়, আমরা অপ্রয়োজনীয় মেমরি এবং আই/ও বিতর্ক এড়াতে নির্বাচিত নম্বর সিপিইউগুলির সাথে মেলে ডেক্স2ওট থ্রেডের সংখ্যার জন্য সংশ্লিষ্ট সম্পত্তির সাথে মিল করার পরামর্শ দিই:

dalvik.vm.dex2oat-cpu-set=0,1,2,3
dalvik.vm.dex2oat-threads=4

অ্যান্ড্রয়েড 12 দিয়ে শুরু করে, নিম্নলিখিত বিকল্পগুলি যোগ করা হয়েছিল:

  • dalvik.vm.ps-min-first-save-ms: অ্যাপ্লিকেশনটির একটি প্রোফাইল তৈরি করার জন্য রানটাইমের জন্য অপেক্ষা করার সময়, প্রথমবার অ্যাপ্লিকেশনটি চালু করার সময়
  • dalvik.vm.ps-min-save-period-ms: একটি অ্যাপের প্রোফাইল আপডেট করার আগে অপেক্ষা করার ন্যূনতম সময়
  • dalvik.vm.systemservercompilerfilter: কম্পাইলার ফিল্টার যা ডিভাইসটি সিস্টেম সার্ভার পুনরায় কম্পাইল করার সময় ব্যবহার করবে

A/B নির্দিষ্ট কনফিগারেশন

রম কনফিগারেশন

Android 7.0 থেকে শুরু করে, ডিভাইসগুলি A/B সিস্টেম আপডেটগুলি সক্ষম করতে দুটি সিস্টেম পার্টিশন ব্যবহার করতে পারে৷ সিস্টেম পার্টিশনের আকার সংরক্ষণ করতে, অব্যবহৃত দ্বিতীয় সিস্টেম পার্টিশনে প্রি-অপটেড ফাইলগুলি ইনস্টল করা যেতে পারে। সেগুলি প্রথম বুটে ডেটা পার্টিশনে কপি করা হয়।

উদাহরণ ব্যবহার ( device-common.mk এ):

PRODUCT_PACKAGES += \
     cppreopts.sh
PRODUCT_PROPERTY_OVERRIDES += \
     ro.cp_system_other_odex=1

এবং ডিভাইসের BoardConfig.mk :

BOARD_USES_SYSTEM_OTHER_ODEX := true

নোট করুন যে বুট ক্লাসপাথ কোড, সিস্টেম সার্ভার কোড এবং পণ্য-নির্দিষ্ট মূল অ্যাপ্লিকেশনগুলি সর্বদা সিস্টেম পার্টিশনে কম্পাইল করে। ডিফল্টরূপে, অন্যান্য সমস্ত অ্যাপ্লিকেশন অব্যবহৃত দ্বিতীয় সিস্টেম পার্টিশনে কম্পাইল করা হয়। এটি SYSTEM_OTHER_ODEX_FILTER এর মাধ্যমে নিয়ন্ত্রিত হতে পারে, যার ডিফল্টরূপে একটি মান রয়েছে:

SYSTEM_OTHER_ODEX_FILTER ?= app/% priv-app/%

পটভূমি dexopt OTA

A/B সক্ষম ডিভাইসগুলির সাথে, নতুন সিস্টেম ইমেজে আপডেট করার জন্য অ্যাপ্লিকেশনগুলিকে পটভূমিতে কম্পাইল করা যেতে পারে। ঐচ্ছিকভাবে সিস্টেম ইমেজে সংকলন স্ক্রিপ্ট এবং বাইনারি অন্তর্ভুক্ত করতে পটভূমিতে অ্যাপ সংকলন দেখুন। এই সংকলনের জন্য ব্যবহৃত সংকলন ফিল্টার নিয়ন্ত্রিত হয়:

pm.dexopt.ab-ota=speed-profile

আমরা প্রোফাইল নির্দেশিত সংকলনের সুবিধা নিতে এবং সঞ্চয়স্থান সংরক্ষণ করতে স্পিড-প্রোফাইল ব্যবহার করার পরামর্শ দিই।