دسته بندی

بچینگ چیست؟

دسته بندی به بافر کردن رویدادهای حسگر در هاب حسگر و/یا FIFO سخت افزاری قبل از گزارش رویدادها از طریق Sensors HAL اشاره دارد. مکانی که رویدادهای حسگر در آن بافر می شوند (هاب حسگر و/یا FIFO سخت افزاری) در این صفحه به عنوان "FIFO" نامیده می شود. هنگامی که دسته‌بندی رویداد حسگر فعال نیست، رویدادهای حسگر در صورت وجود فوراً به سنسور HAL گزارش می‌شوند.

دسته‌بندی می‌تواند صرفه‌جویی قابل‌توجهی در مصرف انرژی داشته باشد، تنها با بیدار کردن پردازنده برنامه‌های اصلی (AP)، که اندروید را اجرا می‌کند، در زمانی که بسیاری از رویدادهای حسگر آماده پردازش هستند، به جای بیدار کردن آن برای هر رویداد جداگانه. صرفه جویی در توان بالقوه مستقیماً با تعداد رویدادهایی که هاب حسگر و/یا FIFO می توانند بافر کنند مرتبط است: اگر بتوان رویدادهای بیشتری را دسته بندی کرد، پتانسیل بیشتری برای صرفه جویی در مصرف برق وجود دارد. دسته‌بندی استفاده از حافظه کم مصرف را به منظور کاهش تعداد بیدار‌سازی‌های AP با قدرت بالا افزایش می‌دهد.

دسته‌بندی تنها زمانی رخ می‌دهد که یک حسگر دارای یک FIFO سخت‌افزاری باشد و/یا بتواند رویدادهای درون یک مرکز حسگر را بافر کند. در هر صورت، حسگر باید حداکثر تعداد رویدادهایی را که می‌توان به‌طور هم‌زمان دسته‌بندی کرد، از طریق SensorInfo.fifoMaxEventCount گزارش کند.

اگر حسگر فضایی را در یک FIFO رزرو کرده باشد، حسگر باید تعداد رویدادهای رزرو شده را از طریق SensorInfo.fifoReservedEventCount گزارش دهد. اگر FIFO به سنسور اختصاص داده شده باشد، آنگاه SensorInfo.fifoReservedEventCount اندازه FIFO است. اگر FIFO بین چندین حسگر مشترک باشد، این مقدار ممکن است صفر باشد. یک مورد معمول استفاده این است که به حسگر اجازه می‌دهیم از کل FIFO استفاده کند، اگر تنها حسگر فعال باشد. اگر چندین حسگر فعال هستند، هر حسگر دارای فضایی برای حداقل رویدادهای SensorInfo.fifoReservedEventCount در FIFO است. اگر از هاب حسگر استفاده شود، ضمانت ممکن است از طریق نرم افزار اعمال شود.

رویدادهای حسگر در شرایط زیر دسته‌بندی می‌شوند:

  • حداکثر تأخیر گزارش فعلی سنسور بیشتر از صفر است، به این معنی که رویدادهای حسگر را می توان تا حداکثر تأخیر گزارش قبل از گزارش از طریق HAL به تأخیر انداخت.
  • AP در حالت تعلیق و سنسور یک سنسور غیر بیدار است. در این حالت، رویدادها نباید AP را بیدار کنند و باید تا زمانی که AP بیدار شود، ذخیره شوند.

اگر حسگر از دسته‌بندی پشتیبانی نمی‌کند و AP در خواب است، فقط رویدادهای حسگر بیداری به AP گزارش می‌شوند و رویدادهای غیر بیدار نباید به AP گزارش شوند.

پارامترهای دسته بندی

دو پارامتری که رفتار دسته بندی را کنترل می کنند عبارتند از sampling_period_ns و max_report_latency_ns . sampling_period_ns تعیین می کند که هر چند وقت یکبار یک رویداد حسگر جدید ایجاد می شود و max_report_latency_ns تعیین می کند که چه مدت تا زمانی که رویداد باید به Sensors HAL گزارش شود.

sampling_period_ns

معنای پارامتر sampling_period_ns به حالت گزارش سنسور مشخص شده بستگی دارد:

  • Continuous: sampling_period_ns نرخ نمونه برداری است، به معنای نرخی که رویدادها در آن ایجاد می شوند.
  • در تغییر: sampling_period_ns نرخ نمونه برداری از رویدادها را محدود می کند، به این معنی که رویدادها سریعتر از هر sampling_period_ns نانوثانیه تولید نمی شوند. اگر رویدادی ایجاد نشود و مقادیر اندازه‌گیری شده برای دوره‌های طولانی تغییر نکنند، دوره‌ها می‌توانند طولانی‌تر از sampling_period_ns باشند. برای جزئیات بیشتر، به حالت گزارش در حال تغییر مراجعه کنید.
  • تک شات: sampling_period_ns نادیده گرفته می شود. هیچ تاثیری ندارد.
  • Special: برای جزئیات در مورد نحوه استفاده sampling_period_ns برای حسگرهای خاص، به انواع سنسور مراجعه کنید.

برای اطلاعات بیشتر در مورد تأثیر sampling_period_ns در حالت‌های مختلف، به حالت‌های گزارش مراجعه کنید.

برای سنسورهای پیوسته و در حال تغییر:

  • اگر sampling_period_ns کمتر از SensorInfo.minDelay باشد، اجرای HAL باید بی‌صدا آن را به max(SensorInfo.minDelay, 1ms) بست. اندروید از تولید رویدادها با فرکانس بیش از 1000 هرتز پشتیبانی نمی کند.
  • اگر sampling_period_ns بزرگتر از SensorInfo.maxDelay باشد، اجرای HAL باید بی‌صدا آن را به SensorInfo.maxDelay کوتاه کند.

سنسورهای فیزیکی گاهی اوقات محدودیت هایی در میزان سرعت و دقت ساعت خود دارند. برای توضیح این موضوع، فرکانس نمونه برداری واقعی می تواند تا زمانی که الزامات جدول زیر را برآورده کند، با فرکانس درخواستی متفاوت باشد.

اگر فرکانس درخواستی باشد

سپس فرکانس واقعی باید باشد

فرکانس کمتر از حداقل (<1/maxDelay)

بین 90 تا 110 درصد فرکانس حداقل

بین حداقل و حداکثر فرکانس

بین 90 تا 220 درصد فرکانس درخواستی

بالاتر از حداکثر فرکانس (>1/min Delay)

بین 90 تا 110 درصد فرکانس حداکثر و زیر 1100 هرتز

max_report_latency_ns

max_report_latency_ns حداکثر زمان را بر حسب نانوثانیه تنظیم می‌کند، که در آن رویدادها می‌توانند به تأخیر افتاده و در FIFO سخت‌افزاری ذخیره شوند، قبل از گزارش از طریق HAL در حالی که AP بیدار است.

مقدار صفر نشان می دهد که رویدادها باید به محض اندازه گیری گزارش شوند، یا به طور کلی FIFO را نادیده بگیرید، یا به محض اینکه یک رویداد از سنسور وجود دارد، FIFO را خالی کنید.

به عنوان مثال، یک شتاب سنج که در فرکانس 50 هرتز با max_report_latency_ns=0 فعال می شود، زمانی که AP بیدار است، 50 بار در ثانیه وقفه ایجاد می کند.

وقتی max_report_latency_ns>0 ، رویدادهای حسگر نیازی به گزارش به محض شناسایی ندارند. تا زمانی که هیچ رویدادی بیش از max_report_latency_ns نانوثانیه به تأخیر نیفتد، می‌توان آن‌ها را به‌طور موقت در FIFO ذخیره کرد و به صورت دسته‌ای گزارش کرد. این بدان معنی است که همه رویدادها از دسته قبلی به یکباره ضبط و بازگردانده می شوند. این مقدار وقفه های ارسال شده به AP را کاهش می دهد و به AP اجازه می دهد تا زمانی که سنسور در حال جمع آوری و جمع آوری داده ها است، به حالت کم مصرف (بیکار) سوئیچ کند.

هر رویداد دارای یک مهر زمانی مرتبط با آن است. تأخیر در زمانی که یک رویداد در آن گزارش می شود تأثیری بر مهر زمانی رویداد ندارد. مهر زمانی باید دقیق باشد و مطابق با زمانی باشد که رویداد از نظر فیزیکی رخ داده است، نه زمانی که گزارش شده است.

اجازه دادن به رویدادهای حسگر برای ذخیره موقت در FIFO رفتار ارسال رویدادها به HAL را تغییر نمی دهد. رویدادهای حسگرهای مختلف را می توان به هم متصل کرد و همه رویدادها از یک حسگر به ترتیب زمان بندی می شوند.

رویدادهای بیداری و غیر بیداری

رویدادهای حسگر از حسگرهای بیدار شدن باید در یک یا چند FIFO بیدار شوند. یک طراحی متداول این است که یک FIFO بیداری واحد، بزرگ و مشترک داشته باشیم که در آن رویدادها از همه حسگرهای بیداری در هم قرار می گیرند. از طرف دیگر، می‌توانید یک FIFO بیدار برای هر حسگر داشته باشید یا یک FIFO اختصاصی برای سنسورهای بیداری خاص و یک FIFO مشترک برای بقیه سنسورهای بیدار کردن داشته باشید.

به طور مشابه، رویدادهای حسگر از حسگرهای غیر بیدار باید در یک یا چند FIFO غیر بیدار ذخیره شوند.

در همه موارد، رویدادهای حسگر بیدار شدن و رویدادهای حسگر بیدار نشدن را نمی توان در یک FIFO قرار داد. رویدادهای بیداری باید در یک FIFO بیداری و رویدادهای غیر بیدار باید در یک FIFO غیر بیدار ذخیره شوند.

برای بیدار شدن FIFO، طرح تک، بزرگ و مشترک FIFO بهترین مزایای قدرت را ارائه می دهد. برای FIFO غیر بیدار، طرح های FIFO مشترک تک، بزرگ و چندین FIFO کوچک رزرو شده دارای ویژگی های قدرت مشابهی هستند. برای پیشنهادات بیشتر در مورد نحوه پیکربندی هر FIFO، اولویت تخصیص FIFO را ببینید.

رفتار خارج از حالت تعلیق

وقتی AP بیدار است (نه در حالت تعلیق)، رویدادها به طور موقت در FIFO ها ذخیره می شوند تا زمانی که بیش از max_report_latency تأخیر نداشته باشند.

تا زمانی که AP وارد حالت تعلیق نشود، هیچ رویدادی نباید حذف یا گم شود. اگر FIFO های داخلی قبل از سپری شدن max_report_latency پر شوند، رویدادها در آن نقطه گزارش می شوند تا اطمینان حاصل شود که هیچ رویدادی از بین نمی رود.

اگر چندین حسگر FIFO یکسانی داشته باشند و max_report_latency یکی از آنها تمام شود، همه رویدادها از FIFO گزارش می‌شوند، حتی اگر max_report_latency سنسورهای دیگر هنوز سپری نشده باشد. این تعداد دفعات گزارش دسته ای از رویدادها را کاهش می دهد. هنگامی که یک رویداد باید گزارش شود، همه رویدادها از همه حسگرها گزارش می شوند.

به عنوان مثال، اگر سنسورهای زیر فعال شوند:

  • شتاب سنج دسته بندی شده با max_report_latency = 20s
  • ژیروسکوپ دسته بندی شده با max_report_latency = 5s

دسته های شتاب سنج همزمان با دسته های ژیروسکوپ گزارش می شوند (هر 5 ثانیه)، حتی اگر شتاب سنج و ژیروسکوپ FIFO یکسانی نداشته باشند.

رفتار در حالت تعلیق

دسته بندی به ویژه برای جمع آوری داده های حسگر در پس زمینه بدون بیدار نگه داشتن AP مفید است. از آنجایی که درایورهای حسگر و اجرای HAL مجاز به نگه داشتن wake-lock* نیستند، AP می‌تواند حتی زمانی که داده‌های حسگر جمع‌آوری می‌شود، به حالت تعلیق وارد شود.

رفتار سنسورها در زمانی که AP معلق است به این بستگی دارد که آیا سنسور یک حسگر بیدار کننده است یا خیر. برای جزئیات بیشتر، به سنسورهای بیداری مراجعه کنید.

وقتی یک FIFO بدون بیدار شدن پر می شود، باید به اطراف بپیچد و مانند یک بافر دایره ای رفتار کند و رویدادهای قدیمی تر را با رویدادهای جدید جایگزین رویدادهای قدیمی کند. max_report_latency هیچ تاثیری روی FIFO های بیدار نشده در حالت تعلیق ندارد.

هنگامی که یک FIFO بیدار شدن پر می شود، یا زمانی که max_report_latency یکی از حسگرهای بیداری سپری می شود، سخت افزار باید AP را بیدار کرده و داده ها را گزارش کند.

در هر دو مورد (بیدار و غیر بیدار)، به محض اینکه AP از حالت تعلیق خارج شد، یک دسته با محتوای تمام FIFOها تولید می شود، حتی اگر max_report_latency برخی از سنسورها هنوز سپری نشده باشد. این امر خطر بیدار شدن مجدد AP را پس از بازگشت به حالت تعلیق به حداقل می رساند و بنابراین مصرف انرژی را به حداقل می رساند.

*یک استثنای قابل توجه در مورد عدم اجازه رانندگان به نگه داشتن قفل بیدار شدن، زمانی است که یک حسگر بیدارباش با حالت گزارش دهی پیوسته با max_report_latency کمتر از 1 ثانیه فعال می شود. در این حالت، راننده می‌تواند یک wake lock را نگه دارد، زیرا AP زمانی برای وارد شدن به حالت تعلیق ندارد، زیرا قبل از رسیدن به حالت تعلیق با یک رویداد بیدار شدن از خواب بیدار می‌شود.

اقدامات احتیاطی هنگام دسته بندی سنسورهای بیدار شدن

بسته به دستگاه، ممکن است چند میلی ثانیه طول بکشد تا AP به طور کامل از حالت تعلیق خارج شود و شروع به شستشوی FIFO کند. اتاق سر کافی باید در FIFO اختصاص داده شود تا دستگاه بتواند از حالت تعلیق خارج شود بدون اینکه FIFO بیدار شود. هیچ رویدادی نباید از بین برود، و max_report_latency باید رعایت شود.

اقدامات احتیاطی هنگام استفاده از حسگرهای بدون بیدار شدن هنگام تعویض

حسگرهای در حال تغییر تنها زمانی رویدادها را تولید می کنند که مقداری که اندازه گیری می کنند در حال تغییر باشد. اگر مقدار اندازه گیری شده در حالی که AP در حالت تعلیق است تغییر کند، برنامه ها انتظار دارند به محض بیدار شدن AP رویدادی را دریافت کنند. به همین دلیل، اگر حسگر FIFO خود را با سایر سنسورها به اشتراک بگذارد، دسته‌بندی رویدادهای حسگر بدون بیدار شدن باید با دقت انجام شود. آخرین رویداد تولید شده توسط هر سنسور در حال تغییر باید همیشه در خارج از FIFO مشترک ذخیره شود تا هرگز توسط رویدادهای دیگر بازنویسی نشود. هنگامی که AP بیدار می شود، پس از گزارش همه رویدادهای FIFO، آخرین رویداد حسگر در حال تغییر باید گزارش شود.

در اینجا وضعیتی وجود دارد که باید از آن اجتناب کنید:

  1. یک برنامه در شمارشگر گام بدون بیدار شدن (در حال تغییر) و شتاب سنج غیر بیدار (پیوسته) ثبت می شود، که هر دو FIFO یکسان دارند.
  2. برنامه یک رویداد شمارنده گام دریافت می کند step_count=1000 steps code>.
  3. AP به تعلیق می رود.
  4. کاربر 20 گام را طی می‌کند و باعث می‌شود رویدادهای شمارنده گام و شتاب‌سنج به هم متصل شوند، رویداد شمارنده گام آخر step_count = 1020 steps است.
  5. کاربر برای مدت طولانی حرکت نمی کند، و باعث می شود رویدادهای شتاب سنج در FIFO انباشته شوند و در نهایت هر رویداد step_count را در FIFO مشترک بازنویسی می کند.
  6. AP بیدار می شود و تمام رویدادهای FIFO به برنامه ارسال می شود.
  7. برنامه فقط رویدادهای شتاب سنج را دریافت می کند و فکر می کند که کاربر راه نرفته است.

با ذخیره آخرین رویداد شمارنده گام در خارج از FIFO، HAL می‌تواند این رویداد را هنگامی که AP بیدار می‌شود، گزارش کند، حتی اگر همه رویدادهای شمارنده گام دیگر توسط رویدادهای شتاب‌سنج بازنویسی شده باشند. به این ترتیب، برنامه با بیدار شدن AP step_count = 1020 steps را دریافت می کند.

بچینگ را اجرا کنید

برای صرفه جویی در مصرف برق، بچینگ باید بدون کمک AP اجرا شود و AP باید در طول بچینگ به حالت تعلیق درآید.

اگر بچینگ در هاب سنسور انجام شود، مصرف برق هاب سنسور باید به حداقل برسد.

حداکثر تأخیر گزارش را می توان در هر زمان تغییر داد، به ویژه زمانی که حسگر مشخص شده از قبل فعال است. و این نباید منجر به از دست دادن رویدادها شود.

اولویت تخصیص FIFO

در پلتفرم هایی که اندازه بافر FIFO سخت افزاری و/یا هاب حسگر محدود است، طراحان سیستم ممکن است مجبور باشند انتخاب کنند که چه مقدار FIFO برای هر سنسور ذخیره کنند. برای کمک به این انتخاب، در اینجا لیستی از برنامه های کاربردی ممکن در هنگام اجرای دسته ای بر روی سنسورهای مختلف آورده شده است.

ارزش بالا: محاسبه مرده عابر پیاده کم مصرف

زمان بچینگ هدف: 1 تا 10 دقیقه

سنسورهای دسته ای:

  • آشکارساز مرحله بیداری
  • وکتور چرخش بازی بیدارباش در 5 هرتز
  • فشارسنج بیداری در 5 هرتز
  • مغناطیس سنج کالیبره نشده بیدار در 5 هرتز

دسته‌بندی این داده‌ها امکان محاسبه مرده عابر پیاده را فراهم می‌کند در حالی که اجازه می‌دهید AP به حالت تعلیق درآید.

ارزش بالا: فعالیت متناوب با قدرت متوسط/تشخیص حرکات

زمان بچینگ هدف: 3 ثانیه

سنسورهای دسته ای: شتاب سنج بدون بیدار شدن در فرکانس 50 هرتز

دسته‌بندی این داده‌ها امکان تشخیص دوره‌ای فعالیت‌ها و حرکات دلخواه را بدون نیاز به بیدار نگه داشتن AP در حین جمع‌آوری داده‌ها فراهم می‌کند.

مقدار متوسط: فعالیت مداوم/تشخیص حرکات با توان متوسط

زمان بچینگ هدف: 1 تا 3 دقیقه

سنسورها به صورت دسته ای: شتاب سنج بیدارباش در فرکانس 50 هرتز

دسته‌بندی این داده‌ها امکان تشخیص مداوم فعالیت‌ها و حرکات دلخواه را بدون نیاز به بیدار نگه داشتن AP در حین جمع‌آوری داده‌ها فراهم می‌کند.

مقدار متوسط-بالا: کاهش بار وقفه

زمان بچینگ هدف: < 1 ثانیه

سنسورهای دسته ای: هر سنسور با فرکانس بالا، معمولاً بدون بیدار شدن.

اگر ژیروسکوپ روی 240 هرتز تنظیم شده باشد، حتی 10 رویداد ژیروسکوپ دسته ای می تواند تعداد وقفه ها را از 240 در ثانیه به 24 در ثانیه کاهش دهد.

مقدار متوسط: جمع آوری مداوم داده ها با فرکانس پایین

زمان بچینگ هدف: 1 تا 10 دقیقه

سنسورهای دسته ای:

  • فشارسنج بیدار شدن در 1 هرتز
  • سنسور رطوبت بیدار با فرکانس 1 هرتز
  • سایر سنسورهای بیدار شدن با فرکانس پایین با نرخ های مشابه

به ایجاد برنامه های نظارتی با توان کم اجازه می دهد.

مقدار متوسط-کم: مجموعه حسگرهای کامل پیوسته

زمان بچینگ هدف: 1 تا 10 دقیقه

سنسورهای دسته ای: همه سنسورهای بیدار شدن، در فرکانس های بالا

امکان جمع آوری کامل داده های حسگر را در حین خروج از AP ​​در حالت تعلیق فراهم می کند. فقط اگر فضای FIFO مشکلی نیست در نظر بگیرید.