প্রোডাক্ট সংক্রান্ত খবর

Android-এর পারফর্ম্যান্স বুস্ট করা: কার্নেলের জন্য AutoFDO চালু করা হচ্ছে

৪ মিনিট লাগবে
চার্লস মুঙ্গারের প্রোফাইল দেখুন
Yabin Cui সফ্টওয়্যার ইঞ্জিনিয়ার

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

AutoFDO কী?

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

AutoFDO, কম্পাইলারকে গাইড করার জন্য বাস্তব-জগতের এক্সিকিউশন প্যাটার্ন ব্যবহার করে এটি পরিবর্তন করে। এই প্যাটার্নগুলি সবচেয়ে সাধারণ নির্দেশ কার্যকর করার পাথকে দেখায় যা আসল ব্যবহারের সময় কোড গ্রহণ করে, CPU-এর ব্রাঞ্চিং ইতিহাস রেকর্ড করার মাধ্যমে ক্যাপচার করা হয়। এই ডেটা ফ্লিট ডিভাইস থেকে সংগ্রহ করা যেতে পারে, কার্নেলের জন্য আমরা এটি ল্যাব এনভায়রনমেন্টে সিন্থেসাইজ করি, যেমন সবচেয়ে জনপ্রিয় ১০০টি অ্যাপ চালানো। এই ডেটা ক্যাপচার করার জন্য আমরা স্যাম্পলিং প্রোফাইলার ব্যবহার করি, যা কোডের কোন অংশ 'হট' (ঘন ঘন ব্যবহার করা হয়) এবং কোন অংশ 'কোল্ড' তা শনাক্ত করে। আমরা যখন এইসব প্রোফাইলের সাথে কার্নেল আবার তৈরি করি, তখন কম্পাইলার প্রকৃত Android ওয়ার্কলোড অনুযায়ী আরও স্মার্ট অপ্টিমাইজেশন সিদ্ধান্ত নিতে পারে।

এই অপ্টিমাইজেশনের প্রভাব বুঝতে, এইসব মূল তথ্য বিবেচনা করুন:

  • Android-এ, কার্নেল সিপিইউ (CPU) টাইমের প্রায় ৪০% ব্যবহার করে।
  • আমরা ইতিমধ্যেই ইউজারস্পেসে নেটিভ এক্সিকিউটেবল এবং লাইব্রেরি অপ্টিমাইজ করতে AutoFDO ব্যবহার করছি, যার ফলে কোল্ড অ্যাপ লঞ্চের ক্ষেত্রে প্রায় ৪% উন্নতি এবং বুট টাইম ১% হ্রাস পেয়েছে।

বাস্তব-জগতের পারফর্ম্যান্স জয়

আমরা কন্ট্রোল করা ল্যাব এনভায়রনমেন্ট থেকে প্রোফাইল ব্যবহার করে Android-এর মূল মেট্রিক জুড়ে উল্লেখযোগ্য উন্নতি দেখেছি। অ্যাপ ক্রল ও লঞ্চ করার মাধ্যমে এইসব প্রোফাইল সংগ্রহ করা হয়েছে এবং ৬.১, ৬.৬ ও ৬.১২ কার্নেল জুড়ে Pixel ডিভাইসে পরিমাপ করা হয়েছে।

সবচেয়ে উল্লেখযোগ্য উন্নতি নিচে তালিকাভুক্ত করা হয়েছে। এইসব কার্নেল ভার্সনের জন্য AutoFDO প্রোফাইলের বিবরণ android16-6.12 এবং android15-6.6 কার্নেলের জন্য সংশ্লিষ্ট Android কার্নেল রিপোজিটরিতে পাওয়া যাবে।

boosting_2.png

এগুলি শুধু তাত্ত্বিক সংখ্যা নয়। এগুলি আরও দ্রুত ইন্টারফেস, দ্রুত অ্যাপ পরিবর্তন, ব্যাটারির আয়ু বৃদ্ধি এবং ব্যবহারকারীর জন্য সামগ্রিকভাবে আরও বেশি রেসপন্সিভ ডিভাইসে অনুবাদ করে।

কীভাবে এটি কাজ করে: পাইপলাইন

আমাদের ডিপ্লয়মেন্ট স্ট্র্যাটেজিতে একটি অত্যাধুনিক পাইপলাইন রয়েছে যা প্রোফাইল প্রাসঙ্গিক এবং পারফর্ম্যান্স স্থিতিশীল থাকা নিশ্চিত করে।

boosting_3.png

ধাপ ১: প্রোফাইল সংগ্রহ

ইউজারস্পেস বাইনারি প্রোফাইল করার জন্য আমরা ইন্টার্নাল টেস্ট ফ্লিটের উপর নির্ভর করলেও, জেনেরিক কার্নেল ইমেজ (GKI)-এর জন্য আমরা কন্ট্রোল করা ল্যাব এনভায়রনমেন্টে শিফট করেছি। ডিভাইস রিলিজ সাইকেল থেকে প্রোফাইলিং ডিকাপল করলে, ডিপ্লয় করা কার্নেল ভার্সন নির্বিশেষে নমনীয়, তাৎক্ষণিক আপডেট করা যায়। গুরুত্বপূর্ণভাবে, পরীক্ষাগুলি নিশ্চিত করে যে এই ল্যাব-ভিত্তিক ডেটা বাস্তব-জগতের ফ্লিট থেকে প্রাপ্ত পারফর্ম্যান্সের সাথে তুলনীয় পারফর্ম্যান্স প্রদান করে।

  • টুল ও এনভায়রনমেন্ট: আমরা লেটেস্ট কার্নেল ইমেজ সহ টেস্ট ডিভাইস ফ্ল্যাশ করি এবং নির্দেশ এক্সিকিউশন স্ট্রিম ক্যাপচার করতে simpleperf ব্যবহার করি। এই প্রসেস ব্রাঞ্চিং ইতিহাস রেকর্ড করতে হার্ডওয়্যার ক্ষমতার উপর নির্ভর করে, বিশেষত Pixel ডিভাইসে  ARM Embedded Trace Extension (ETE) এবং ARM Trace Buffer Extension (TRBE) ব্যবহার করে।
  • ওয়ার্কলোড: আমরা Android অ্যাপ কম্প্যাটিবিলিটি টেস্ট স্যুট (C-Suite) থেকে সেরা ১০০টি সবচেয়ে জনপ্রিয় অ্যাপ ব্যবহার করে একটি প্রতিনিধিত্বমূলক ওয়ার্কলোড তৈরি করি। সবচেয়ে সঠিক ডেটা ক্যাপচার করতে, আমরা এগুলির উপর ফোকাস করি:
    • অ্যাপ লঞ্চ করা: সবচেয়ে বেশি দৃশ্যমান ব্যবহারকারীর বিলম্বের জন্য অপ্টিমাইজ করা হচ্ছে
    • AI-চালিত অ্যাপ ক্রলিং: ক্রমাগত, পরিবর্তনশীল ব্যবহারকারীর ইন্টার‍্যাকশন সিমুলেট করা
    • সিস্টেম-ওয়াইড মনিটরিং: শুধু ফোরগ্রাউন্ড অ্যাপ অ্যাক্টিভিটি নয়, তার সাথে গুরুত্বপূর্ণ ব্যাকগ্রাউন্ড ওয়ার্কলোড এবং ইন্টার-প্রসেস কমিউনিকেশন ক্যাপচার করা
  • যাচাইকরণ: এই সিন্থেসাইজ করা ওয়ার্কলোড আমাদের ইন্টার্নাল ফ্লিট থেকে সংগ্রহ করা এক্সিকিউশন প্যাটার্নের সাথে ৮৫% মিল দেখায়।
  • টার্গেট করা ডেটা: এই পরীক্ষাগুলি পর্যাপ্ত পরিমাণে পুনরাবৃত্তি করার মাধ্যমে, আমরা হাই-ফিডেলিটি এক্সিকিউশন প্যাটার্ন ক্যাপচার করি যা সবচেয়ে জনপ্রিয় অ্যাপ্লিকেশনগুলির সাথে বাস্তব-জগতের ব্যবহারকারীর ইন্টার‍্যাকশনকে সঠিকভাবে উপস্থাপন করে। এছাড়াও, এই এক্সটেনসিবল ফ্রেমওয়ার্ক আমাদের কভারেজ আরও বাড়ানোর জন্য অতিরিক্ত ওয়ার্কলোড ও বেঞ্চমার্ক নির্বিঘ্নে ইন্টিগ্রেট করতে দেয়।

ধাপ ২: প্রোফাইল প্রসেস করা

আমরা প্রসেস না করা ট্রেস ডেটা পোস্ট-প্রসেস করি যাতে এটি পরিষ্কার, কার্যকর এবং কম্পাইলারের জন্য প্রস্তুত থাকে।

  • এগ্রিগেশন: আমরা একাধিক টেস্ট রান ও ডিভাইস থেকে পাওয়া ডেটা একত্রিত করে একটি সিস্টেম ভিউতে দেখাই।
  • কনভার্সন: আমরা প্রয়োজন অনুযায়ী অবাঞ্ছিত চিহ্ন ফিল্টার করে, র' ট্রেস AutoFDO প্রোফাইল ফর্ম্যাটে কনভার্ট করি।
  • প্রোফাইল ট্রিম করা: "কোল্ড" ফাংশনের জন্য ডেটা সরাতে আমরা প্রোফাইল ট্রিম করি, যাতে সেগুলি স্ট্যান্ডার্ড অপ্টিমাইজেশন ব্যবহার করতে পারে। এটি খুব কম ব্যবহৃত কোডে রিগ্রেশন প্রতিরোধ করে এবং বাইনারি সাইজের অপ্রয়োজনীয় বৃদ্ধি এড়ায়।

ধাপ ৩: প্রোফাইল টেস্টিং

ডেপ্লয় করার আগে, প্রোফাইলগুলি কঠোরভাবে যাচাই করা হয় যাতে সেগুলি স্থায়িত্বের ঝুঁকি ছাড়াই ধারাবাহিকভাবে পারফর্ম্যান্স প্রদান করে।

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

ক্রমাগত আপডেট

সময়ের সাথে সাথে কোড স্বাভাবিকভাবেই "পরিবর্তিত" হয়, তাই স্ট্যাটিক প্রোফাইল শেষ পর্যন্ত তার কার্যকারিতা হারাবে। সর্বোচ্চ পারফর্ম্যান্স বজায় রাখতে, নিয়মিত আপডেট পেতে আমরা ক্রমাগত পাইপলাইন চালাই:

  • নিয়মিত রিফ্রেশ: প্রতিটি GKI রিলিজের আগে আমরা Android কার্নেল LTS ব্রাঞ্চে প্রোফাইল রিফ্রেশ করি, যাতে প্রতিটি বিল্ডে লেটেস্ট প্রোফাইল ডেটা অন্তর্ভুক্ত থাকে।
  • ভবিষ্যতে আরও আপডেট: আমরা বর্তমানে android16-6.12 ও android15-6.6 ব্রাঞ্চে এইসব আপডেট ডেলিভার করছি এবং আরও নতুন GKI ভার্সনে সহায়তা প্রদান করব, যেমন আসন্ন android17-6.18।

স্থায়িত্ব নিশ্চিত করা

প্রোফাইল-গাইডেড অপ্টিমাইজেশন সম্পর্কে একটি সাধারণ প্রশ্ন হল, এটি স্থিতিশীলতার ঝুঁকি তৈরি করে কিনা। যেহেতু AutoFDO মূলত কম্পাইলার হিউরিস্টিকসকে প্রভাবিত করে, যেমন ফাংশন ইনলাইনিং এবং কোড লেআউট, সোর্স কোডের লজিক পরিবর্তন করার পরিবর্তে, এটি কার্নেলের ফাংশনাল ইন্টিগ্রিটি বজায় রাখে। এই প্রযুক্তিটি ইতিমধ্যেই স্কেলে প্রমাণিত হয়েছে, যা Android প্ল্যাটফর্ম লাইব্রেরি, ChromeOS এবং Google-এর নিজস্ব সার্ভার পরিকাঠামোর জন্য বছরের পর বছর ধরে একটি স্ট্যান্ডার্ড অপ্টিমাইজেশন হিসেবে কাজ করছে।

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

ভবিষ্যতের দিকে তাকানো

আমরা বর্তমানে android16-6.12 এবং android15-6.6 ব্রাঞ্চ জুড়ে AutoFDO ডেপ্লয় করছি। এই প্রাথমিক রোল-আউটের পরে, আমরা এই প্রযুক্তিকে আরও উন্নত করার জন্য বেশ কয়েকটি আশাব্যঞ্জক উপায় দেখতে পাচ্ছি:

  • আরও বেশি ডিভাইসে ব্যবহার: আমরা নতুন GKI কার্নেল ভার্সন এবং বর্তমান aarch64-এর বাইরে অতিরিক্ত বিল্ড টার্গেটে AutoFDO প্রোফাইল ব্যবহার করার জন্য অপেক্ষা করছি।
  • GKI মডিউল অপ্টিমাইজেশন: বর্তমানে, আমাদের অপ্টিমাইজেশন মূল কার্নেল বাইনারির (vmlinux) উপর ফোকাস করে। GKI মডিউলে AutoFDO প্রসারিত করলে কার্নেল সাবসিস্টেমের একটি বড় অংশে পারফর্ম্যান্সের সুবিধা পাওয়া যেতে পারে।
  • ভেন্ডর মডিউল সাপোর্ট: আমরা ড্রাইভার ডেভেলপমেন্ট কিট (DDK) ব্যবহার করে তৈরি করা ভেন্ডর মডিউলের জন্য AutoFDO-কে সাপোর্ট করতেও আগ্রহী। আমাদের বিল্ড সিস্টেম (Kleaf) এবং প্রোফাইলিং টুলে (simpleperf) আগে থেকেই সহায়তা উপলভ্য থাকায়, এটি ভেন্ডরদের তাদের নির্দিষ্ট হার্ডওয়্যার ড্রাইভারগুলিতে একই অপ্টিমাইজেশন কৌশল প্রয়োগ করতে দেয়।
  • আরও বেশি প্রোফাইল কভারেজ: আরও বেশি ক্রিটিকাল ইউজার জার্নি (CUJ) থেকে প্রোফাইল সংগ্রহ করে সেগুলি অপ্টিমাইজ করার সম্ভাবনা আছে।

Android কার্নেলে AutoFDO নিয়ে আসার মাধ্যমে আমরা নিশ্চিত করছি যে OS-এর মূল ভিত্তিটি আপনার প্রতিদিনের ডিভাইস ব্যবহারের ধরন অনুযায়ী অপ্টিমাইজ করা হয়েছে।

লিখেছেন:
পড়া চালিয়ে যান