ডিভাইসের সাবসিস্টেমের শক্তি প্রায়শই পরিমাপ করা হয় এবং বিভিন্ন স্থিতিশীল অবস্থার জন্য ল্যাব পরিবেশে রেকর্ড করা হয়, যেমন যখন স্ক্রীন চালু থাকে, বা ডিভাইসটি নিষ্ক্রিয় অবস্থায় থাকে। এটি একটি ধ্রুবক পাওয়ার ড্র সহ সাবসিস্টেমের জন্য কাজ করে, বা ল্যাব পরিবেশে সহজে পরিমাপ করা যায় এমন পরিস্থিতিতে, কিন্তু নির্দিষ্ট ব্যবহারের ক্ষেত্রে নয়, যেমন যখন একটি স্ক্রীন একটি ভিডিও প্রদর্শন করে।
IPower.hal 1.0
পাওয়ার ইঙ্গিত পাস করার জন্য এবং সাবসিস্টেম স্লিপ-স্টেট মেট্রিক্সে ক্রমবর্ধমান ডেটা রিপোর্ট করার জন্য একটি ইন্টারফেস প্রদান করে। Android 10 এবং উচ্চতর সংস্করণে, ক্রমবর্ধমান পরিসংখ্যান-রিপোর্টিং ফাংশন IPowerStats.hal
পাওয়ার-স্ট্যাট সংগ্রহ API-এ থাকে এবং ডিভাইসে শক্তি-ব্যবহারের ডেটা পুনরুদ্ধার করার উপায় প্রদান করে। এটি IPower.hal
ইন্টারফেসের ক্রমবর্ধমান পরিসংখ্যান সংগ্রহের অংশকে প্রতিস্থাপন করে, কার্যকারিতার একটি পরিষ্কার বিভাজনের জন্য।
IPowerStats
পরিষেবা রিডিং পর্যায়ক্রমিক নয়। এগুলি গুরুত্বপূর্ণ মুহুর্তে ঘটে, যেমন যখন 1% ব্যাটারি ড্রপ হয়। ব্যাটারি ড্রেন কম হলে রিডিং কম হয়, এবং বেশি হলে বেশি হয়। ডেটা সার্ভারে ফেরত পাঠানো হতে পারে, এবং বিশ্লেষণ এবং ট্রাইজের জন্য বাগ রিপোর্টে ব্যবহার করা যেতে পারে। এটি বিদ্যুৎ খরচ কমাতে এবং ব্যাটারির আয়ু বাড়ানোর চলমান প্রচেষ্টাকে সমর্থন করে।
IPower.hal এবং IPowerStats.hal
IPower.hal
এবং IPowerStats.hal
উভয় ইন্টারফেস Android 10 এ উপলব্ধ, কিন্তু IPower.hal
পরিসংখ্যান সংগ্রহ কার্যকারিতা শুধুমাত্র IPowerStats.hal
ইন্টারফেস থেকে উপলব্ধ। IPowerStats.hal
কার্যকারিতা সমর্থিত ডিভাইসগুলির জন্য অন-ডিভাইস পাওয়ার পরিমাপ থেকে সংগৃহীত ডেটা অর্জন এবং ব্যবহার করার জন্য API অন্তর্ভুক্ত করে:
- কম ফ্রিকোয়েন্সি (
getRailInfo
) এবং উচ্চ-ফ্রিকোয়েন্সি (streamEnergyData
) ক্লায়েন্ট উভয়ের জন্যই রেল-স্তরের শক্তি পরিমাপ করে এবং বুট হওয়ার পর থেকে সঞ্চিত শক্তি রিপোর্ট করে৷ - প্রতিটি সমর্থিত
PowerEntity
সম্পর্কিত তথ্য রিপোর্ট করে যার জন্য ডেটা উপলব্ধ। একটিPowerEntity
হল একটি প্ল্যাটফর্ম সাবসিস্টেম, পেরিফেরাল বা পাওয়ার ডোমেন যা মোট ডিভাইস-পাওয়ার খরচকে প্রভাবিত করে। - পাওয়ার এন্টিটি স্টেটের সেটের রিপোর্ট করে (
getPowerEntityStateInfo
) যার জন্য নির্দিষ্ট এন্টিটি রেসিডেন্সি ডেটা প্রদান করে, তারপর প্রতিটি নির্দিষ্টPowerEntity
জন্য জমা হওয়া ডেটা রিপোর্ট করে।
IPowerStats.hal
API গুলি নিম্নলিখিত ক্লায়েন্টদের দ্বারা ব্যবহৃত হয়:
-
Statsd
, প্রতি-রেল বিদ্যুৎ খরচ মেট্রিক্স সংগ্রহ করতে। -
Perfetto
, সিপিইউ কার্যকলাপের সাথে বিদ্যুতের ব্যবহারকে সম্পর্কযুক্ত করতে। -
Batterystats
,power_profile.xml.
Android 10 এবং উচ্চতর সংস্করণের সাথে, একটি ডিভাইস প্রস্তুতকারক IPower.hal
এবং IPowerStats.hal
ফাংশনগুলির মধ্যে বেছে নিতে পারে, কিন্তু যদি IPowerStats.hal
বাস্তবায়িত না হয় তবে সমস্ত ক্লায়েন্টকে অবশ্যই IPower.hal
এ ফিরে যেতে হবে৷
IPowerStats.hal বাস্তবায়ন বিকল্প
Android 9 এর মাধ্যমে Android 7-এ শুধুমাত্র IPower.hal
ফাংশন উপলব্ধ। Android 10-এ আপগ্রেড করা ডিভাইসগুলিতে অবশ্যই একটি হার্ডওয়্যার পাওয়ার-মনিটরিং সাবসিস্টেম থাকতে হবে, বা পাওয়ার পরিসংখ্যান নিরীক্ষণ এবং রেকর্ড করার জন্য অন্যান্য উপায় উপলব্ধ। কিছু SoC আপনার জন্য পাওয়ার-ব্যবহারের পরিসংখ্যান সংগ্রহ করে, অথবা আপনি সফ্টওয়্যারের মাধ্যমে পাওয়ার-এন্টিটি স্টেট রেসিডেন্সি তথ্য পেতে পারেন। পাওয়ার-মনিটরিং হার্ডওয়্যার শুধুমাত্র getRailInfo()
, getEnergyData()
এবং streamEnergyData()
সমর্থন করার জন্য প্রয়োজনীয়।
আপনি যদি পাওয়ার-মনিটরিং হার্ডওয়্যার ছাড়া IPowerStats.hal
প্রয়োগ করেন, getRailInfo(), getEnergyData()
, এবং streamEnergyData()
NOT_SUPPORTED
রিটার্ন করুন। একইভাবে, getPowerEntityInfo(), getPowerEntityStateInfo()
, এবং getPowerEntityStateResidencyData()
এছাড়াও NOT_SUPPORTED
ফেরত দিতে পারে যদি এটি ব্যবহার করার উদ্দেশ্যে না হয়।
রেল-মনিটরিং এপিআই দ্বারা প্রত্যাবর্তিত ডেটার উদাহরণ অন্তর্ভুক্ত
- ডিসপ্লের জন্য পাওয়ার রেল X µW খরচ করেছে৷
- মডেমের পাওয়ার রেল Y µW ব্যবহার করেছে।
সাবসিস্টেম স্লিপ-স্টেট এপিআই দ্বারা প্রত্যাবর্তিত ডেটার উদাহরণ অন্তর্ভুক্ত
- মডেমটি X ms এর জন্য ঘুমিয়ে ছিল।
- SoC Y ms এর জন্য পাওয়ার-ক্যাপস অবস্থায় ছিল।
- Z ms-এর জন্য GPU সাসপেন্ড অবস্থায় ছিল।
একটি হার্ডওয়্যার পাওয়ার-মনিটরিং সাবসিস্টেম ব্যবহার করুন
আপনার ডিভাইসের ডিজাইনে যদি একটি হার্ডওয়্যার পাওয়ার-মনিটরিং সাবসিস্টেম থাকে, তাহলে একটি একক sysfs নোড তৈরি করে IPowerStats.hal
প্রয়োগ করুন যেখান থেকে PowerStats.hal
ডেটা পার্স করতে পারে, অথবা ioctl- টাইপ সিস্টেম কলের সংগ্রহ করে।
আপনাকে অবশ্যই আপনার কার্নেল ড্রাইভারটি এমনভাবে প্রয়োগ করতে হবে যা সঞ্চয়কারীর ওভারফ্লো প্রতিরোধ করে। ব্যবহৃত অ্যালগরিদম আপনার অনন্য হার্ডওয়্যার পাওয়ার-মনিটরিং সাবসিস্টেম ডিজাইনের উপর নির্ভর করে, যা তাত্ক্ষণিক এবং গড় বাস ভোল্টেজ এবং বর্তমান পরিমাপ উভয়ই প্রদান করতে হবে। কার্নেল ড্রাইভারকে অবশ্যই এই ডেটা এমনভাবে ক্যাপচার করতে হবে যাতে শক্তি সঞ্চয়কারীগুলি পরিষ্কার না হয় এবং এটি বুট হওয়ার পর থেকে প্রতিটি সাবরেলের জন্য জমা হওয়া শক্তি ডেটা বজায় রাখতে হবে, একটি 64-বিট পরিবর্তনশীল আকারে যা থেকে শক্তি পড়ার সাথে বৃদ্ধি পায় প্রতিটি সঞ্চয়কারী প্রশ্ন।
একটি প্রদত্ত উপাদানের পরিসংখ্যান (বা ঐচ্ছিকভাবে, একাধিক উপাদান) একটি একক নোডে থাকতে হবে। যদিও এটি sysfs- এর একটি প্রচলিত ব্যবহার নয় (যা সাধারণত প্রতিটি নোডকে একটি একক মানের মধ্যে সীমাবদ্ধ করে), এটি নিশ্চিত করে যে সমস্ত ডেটা সামঞ্জস্যপূর্ণ।
ডিজাইন নির্দেশিকা
- sysfs নোড থেকে পড়ার সময় বা সিস্টেম কল করার সময় লেটেন্সি কম রাখুন (1 মিসেক, সর্বোচ্চ)।
- নিশ্চিত করুন যে সমর্থনকারী পরিসংখ্যান কার্যকারিতা পরিমাপযোগ্যভাবে পাওয়ার ড্রেন বাড়ায় না:
- এক্সেস পয়েন্ট (AP) এবং/অথবা সাবসিস্টেম ওয়েকআপগুলিকে স্লিপ মোডে কাটানো সময়ের মতো পরামিতিগুলি ট্র্যাক করতে করবেন না।
- সম্ভব হলে অন্যান্য ট্রাফিকের সাথে সুবিধাবাদীভাবে অ্যাপ প্রসেসর এবং ফার্মওয়্যারের মধ্যে পরিসংখ্যান স্থানান্তর করুন।
- প্রয়োজনে, সাবসিস্টেম নিম্নলিখিত ড্রাইভার ফাংশন ব্যবহার করতে পারে:
- অভ্যন্তরীণভাবে ডেটা ক্যাশে করা লেটেন্সি/ওয়েকআপ এড়াতে সামান্য বাসি ডেটা খরচ করে।
- সাবসিস্টেম ঘুমিয়ে থাকা অবস্থায় এক্সট্রাপোলেশন করা, সাবসিস্টেমকে না জাগিয়ে আপডেট করা ঘুমের সময় প্রদান করা।
উপাদান, সাবসিস্টেম এবং পরিসংখ্যান চয়ন করুন
IPowerStats.hal
ডেটা সংগ্রহ করার জন্য কোন উপাদান বা সাবসিস্টেমগুলি বেছে নেওয়ার সময়, ডিভাইসে এমন কিছু নির্বাচন করুন যা উল্লেখযোগ্য কারেন্ট (5 mA বা তার বেশি) ব্যবহার করে, বা যেটি একাধিক পাওয়ার-ব্যবহার মোড সমর্থন করে, যেমন নিম্নলিখিতগুলি:
- স্বতন্ত্র SoC সাবসিস্টেম।
- সাবসিস্টেমগুলি আংশিক বা সম্পূর্ণভাবে SoC এর বাইরে, যেমন ওয়াইফাই, ইমেজ প্রসেসর বা নিরাপত্তা প্রসেসর।
- পেরিফেরিয়াল যেমন উচ্চ-শক্তি LED এবং ক্যামেরা।
- পাওয়ার ডোমেইন যা বিভিন্ন মোড ব্যবহার করে (যেমন সামগ্রিকভাবে SoC-এর জন্য পাওয়ার ডোমেন)।
কাস্টমাইজেশন
এই ঐচ্ছিক বৈশিষ্ট্যটি কাস্টমাইজেশনের জন্য উপযুক্ত। ডিজাইন ব্যবহারের ক্ষেত্রে এবং আপনার ব্যবহার কাস্টমাইজ করুন:
- কোন রেলগুলি পরিমাপ করতে হবে এবং কত ঘন ঘন সেগুলি পরিমাপ করতে হবে তা নির্ধারণ করুন।
- কখন ডেটা পড়তে হবে এবং কীভাবে এটি ব্যাখ্যা করতে হবে তা নির্ধারণ করুন।
- আপনার ডেটার উপর ভিত্তি করে কী পদক্ষেপ নিতে হবে এবং কখন এটি নিতে হবে তা নির্ধারণ করুন।
বৈধতা
ভিটিএস পরীক্ষাগুলি নিশ্চিত করে যে অ্যান্ড্রয়েডের প্রয়োজনীয়তা পূরণ হয়েছে। IPowerStats.hal
এর মন্তব্যগুলি একটি ডিভাইস মেনে চলছে কিনা তা যাচাই করার জন্য ব্যবহার করা হয়।
উদাহরণস্বরূপ, যদি আপনি getRailInfo()
কল করেন এবং এটি কিছুই ফেরত না দেয়, VTS পরীক্ষা ব্যর্থ হয়, কারণ আপনি পর্যবেক্ষণ করা রেল সম্পর্কে তথ্য পাননি, বা SUCCESS
এর একটি ফেরত স্থিতি পাননি। একইভাবে, আপনি যদি রেলের তথ্য পেয়ে থাকেন তবে এটির সাথে একটি NON_SUPPORTED
বা FILE_SYSTEM_ERROR
প্রতিক্রিয়া ছিল, এটিও একটি ব্যর্থতা। IPower.hal এবং IPowerStats.hal মন্তব্যে প্রয়োজনীয়তা ব্যবহার করে VTS HAL ফাইলে ডিভাইস প্রস্তুতকারকের স্পেসিফিকেশন মেনে চলা হয়েছে কিনা তা যাচাই করে। VTS পরীক্ষায় ব্যবহৃত মন্তব্যগুলির একটি উদাহরণ নীচে দেখানো হয়েছে:
/** * Rail information: * Reports information related to the rails being monitored. * * @return rails Information about monitored rails. * @return status SUCCESS on success or NOT_SUPPORTED if * feature is not enabled or FILESYSTEM_ERROR on filesystem nodes * access error. */ getRailInfo() generates(vec<e;RailInfo>e; rails, Status status);