Apa itu batching?
Batching mengacu pada buffering peristiwa sensor di hub sensor dan/atau FIFO perangkat keras sebelum melaporkan peristiwa melalui Sensor HAL . Lokasi di mana peristiwa sensor disangga (hub sensor dan/atau FIFO perangkat keras) disebut sebagai "FIFO" di halaman ini. Saat pengelompokan peristiwa sensor tidak aktif, peristiwa sensor segera dilaporkan ke HAL Sensor jika tersedia.
Batching dapat mengaktifkan penghematan daya yang signifikan dengan hanya membangunkan prosesor aplikasi utama (AP), yang menjalankan Android, ketika banyak peristiwa sensor siap untuk diproses, alih-alih membangunkannya untuk setiap peristiwa individu. Potensi penghematan daya secara langsung berkorelasi dengan jumlah peristiwa yang dapat disangga oleh hub sensor dan/atau FIFO: ada potensi penghematan daya yang lebih besar jika lebih banyak peristiwa dapat dikelompokkan. Batching memanfaatkan penggunaan memori berdaya rendah untuk mengurangi jumlah bangun AP berdaya tinggi.
Batching hanya dapat terjadi ketika sensor memiliki FIFO perangkat keras dan/atau dapat menyangga kejadian di dalam hub sensor. Dalam kedua kasus tersebut, sensor harus melaporkan jumlah maksimum peristiwa yang dapat dikelompokkan sekaligus melalui SensorInfo.fifoMaxEventCount
.
Jika sensor memiliki ruang yang dicadangkan dalam FIFO, sensor harus melaporkan jumlah peristiwa yang dicadangkan melalui SensorInfo.fifoReservedEventCount
. Jika FIFO didedikasikan untuk sensor, maka SensorInfo.fifoReservedEventCount
adalah ukuran FIFO. Jika FIFO dibagi di antara beberapa sensor, nilai ini mungkin nol. Kasus penggunaan yang umum adalah mengizinkan sensor untuk menggunakan seluruh FIFO jika itu adalah satu-satunya sensor yang aktif. Jika beberapa sensor aktif, maka setiap sensor dijamin ruang untuk setidaknya peristiwa SensorInfo.fifoReservedEventCount
di FIFO. Jika hub sensor digunakan, jaminan dapat diterapkan melalui perangkat lunak.
Peristiwa sensor dikelompokkan dalam situasi berikut:
- Latensi laporan maksimum sensor saat ini lebih besar dari nol, yang berarti bahwa peristiwa sensor dapat ditunda hingga latensi laporan maksimum sebelum dilaporkan melalui HAL.
- AP dalam mode tunda dan sensornya adalah sensor non-bangun. Dalam hal ini, peristiwa tidak boleh membangunkan AP dan harus disimpan sampai AP bangun.
Jika sensor tidak mendukung batching dan AP tertidur, hanya peristiwa sensor bangun yang dilaporkan ke AP dan peristiwa non-bangun tidak boleh dilaporkan ke AP.
Parameter batch
Dua parameter yang mengatur perilaku batching adalah sampling_period_ns dan max_report_latency_ns . sampling_period_ns
menentukan seberapa sering peristiwa sensor baru dihasilkan, dan max_report_latency_ns
menentukan berapa lama hingga peristiwa tersebut harus dilaporkan ke HAL Sensor.
sampling_period_ns
Arti parameter sampling_period_ns
bergantung pada mode pelaporan sensor yang ditentukan:
- Berkelanjutan:
sampling_period_ns
adalah laju pengambilan sampel, yang berarti laju peristiwa yang dihasilkan. - Saat berubah:
sampling_period_ns
membatasi laju pengambilan sampel peristiwa, artinya peristiwa dihasilkan tidak lebih cepat dari setiap nanodetiksampling_period_ns
. Periode bisa lebih lama darisampling_period_ns
jika tidak ada peristiwa yang dihasilkan dan nilai terukur tidak berubah untuk periode yang lama. Untuk detail selengkapnya, lihat mode pelaporan saat berubah . - Satu-shot:
sampling_period_ns
diabaikan. Ini tidak berpengaruh. - Khusus: Untuk detail tentang bagaimana
sampling_period_ns
digunakan untuk sensor khusus, lihat Jenis Sensor .
Untuk informasi selengkapnya tentang dampak sampling_period_ns
dalam mode yang berbeda, lihat Mode pelaporan .
Untuk sensor kontinu dan saat berubah:
- jika
sampling_period_ns
kurang dariSensorInfo.minDelay
, maka implementasi HAL harus diam-diam menjepitnya kemax(SensorInfo.minDelay, 1ms)
. Android tidak mendukung pembuatan acara di lebih dari 1000 Hz. - jika
sampling_period_ns
lebih besar dariSensorInfo.maxDelay
, maka implementasi HAL harus secara diam-diam memotongnya keSensorInfo.maxDelay
.
Sensor fisik terkadang memiliki batasan pada kecepatan yang dapat dijalankan dan keakuratan jamnya. Untuk menjelaskan hal ini, frekuensi pengambilan sampel yang sebenarnya dapat berbeda dari frekuensi yang diminta selama memenuhi persyaratan dalam tabel di bawah ini.
Jika frekuensi yang diminta adalah | Maka frekuensi sebenarnya harus |
---|---|
di bawah frekuensi min (<1/maxDelay) | antara 90% dan 110% dari frekuensi min |
antara frekuensi min dan maks | antara 90% dan 220% dari frekuensi yang diminta |
di atas frekuensi maks (>1/minDelay) | antara 90% dan 110% dari frekuensi maksimum, dan di bawah 1100 Hz |
max_report_latency_ns
max_report_latency_ns
menetapkan waktu maksimum dalam nanodetik, di mana peristiwa dapat ditunda dan disimpan di FIFO perangkat keras sebelum dilaporkan melalui HAL saat AP terjaga.
Nilai nol menandakan bahwa peristiwa harus dilaporkan segera setelah diukur, baik melewatkan FIFO sama sekali, atau mengosongkan FIFO segera setelah satu peristiwa dari sensor hadir.
Misalnya, akselerometer yang diaktifkan pada 50 Hz dengan max_report_latency_ns=0
akan memicu interupsi 50 kali per detik saat AP terjaga.
Ketika max_report_latency_ns>0
, peristiwa sensor tidak perlu dilaporkan segera setelah terdeteksi. Mereka dapat disimpan sementara di FIFO dan dilaporkan dalam kumpulan, selama tidak ada peristiwa yang tertunda lebih dari max_report_latency_ns
nanodetik. Ini berarti bahwa semua peristiwa sejak batch sebelumnya dicatat dan dikembalikan sekaligus. Ini mengurangi jumlah interupsi yang dikirim ke AP dan memungkinkan AP untuk beralih ke mode daya yang lebih rendah (idle) saat sensor menangkap dan mengelompokkan data.
Setiap acara memiliki stempel waktu yang terkait dengannya. Menunda waktu saat peristiwa dilaporkan tidak memengaruhi stempel waktu peristiwa. Stempel waktu harus akurat dan sesuai dengan waktu terjadinya peristiwa secara fisik, bukan waktu dilaporkan.
Mengizinkan peristiwa sensor disimpan sementara di FIFO tidak mengubah perilaku mengirimkan peristiwa ke HAL; peristiwa dari sensor yang berbeda dapat disisipkan dan semua peristiwa dari sensor yang sama diatur waktunya.
Acara bangun dan tidak bangun
Peristiwa sensor dari sensor bangun harus disimpan dalam satu atau beberapa FIFO bangun. Desain umum adalah memiliki FIFO bangun tunggal, besar, bersama di mana peristiwa dari semua sensor bangun disisipkan. Atau, Anda dapat memiliki satu FIFO pengaktifan per sensor atau memiliki FIFO khusus untuk sensor pengaktifan tertentu dan FIFO bersama untuk sensor pengaktifan lainnya.
Demikian pula, peristiwa sensor dari sensor non-bangun harus disimpan dalam satu atau lebih FIFO non-bangun.
Dalam semua kasus, peristiwa sensor bangun dan peristiwa sensor non-bangun tidak dapat disisipkan dalam FIFO yang sama. Peristiwa bangun harus disimpan dalam FIFO bangun, dan peristiwa tidak bangun harus disimpan dalam FIFO tidak bangun.
Untuk FIFO bangun, desain FIFO tunggal, besar, dan bersama memberikan manfaat daya terbaik. Untuk FIFO non-bangun, FIFO tunggal, besar bersama dan beberapa desain FIFO cadangan kecil memiliki karakteristik daya yang serupa. Untuk saran lebih lanjut tentang cara mengonfigurasi setiap FIFO, lihat prioritas alokasi FIFO .
Perilaku di luar mode penangguhan
Saat AP terjaga (tidak dalam mode tunda), acara disimpan sementara di FIFO selama tidak ditunda lebih dari max_report_latency
.
Selama AP tidak masuk ke mode suspend, tidak ada event yang akan dijatuhkan atau hilang. Jika FIFO internal menjadi penuh sebelum max_report_latency
berlalu, peristiwa dilaporkan pada saat itu untuk memastikan bahwa tidak ada peristiwa yang hilang.
Jika beberapa sensor berbagi FIFO yang sama dan max_report_latency
salah satunya berlalu, semua kejadian dari FIFO akan dilaporkan, meskipun max_report_latency
dari sensor lain belum berlalu. Ini mengurangi berapa kali kumpulan peristiwa dilaporkan. Ketika satu peristiwa harus dilaporkan, semua peristiwa dari semua sensor dilaporkan.
Misalnya, jika sensor berikut diaktifkan:
- akselerometer dirangkai dengan
max_report_latency
= 20s - giroskop di-batch dengan
max_report_latency
= 5s
Kumpulan akselerometer dilaporkan pada saat yang sama kumpulan giroskop dilaporkan (setiap 5 detik), bahkan jika akselerometer dan giroskop tidak berbagi FIFO yang sama.
Perilaku dalam mode tunda
Batching sangat bermanfaat untuk mengumpulkan data sensor di latar belakang tanpa membuat AP tetap terjaga. Karena driver sensor dan implementasi HAL tidak diizinkan untuk menahan wake-lock*, AP dapat memasuki mode tunda bahkan saat data sensor sedang dikumpulkan.
Perilaku sensor saat AP ditangguhkan tergantung pada apakah sensor tersebut merupakan sensor bangun. Untuk detail selengkapnya, lihat Sensor pengaktifan .
Ketika FIFO non-bangun terisi, ia harus membungkus dan berperilaku seperti buffer melingkar, menimpa acara lama dengan acara baru menggantikan yang lama. max_report_latency
tidak berdampak pada FIFO non-bangun saat dalam mode tunda.
Ketika FIFO bangun terisi, atau ketika max_report_latency
dari salah satu sensor bangun berlalu, perangkat keras harus membangunkan AP dan melaporkan data.
Dalam kedua kasus (wake-up dan non-wake-up), segera setelah AP keluar dari mode suspend, batch diproduksi dengan konten semua FIFO, bahkan jika max_report_latency
dari beberapa sensor belum berlalu. Ini meminimalkan risiko AP harus bangun lagi segera setelah kembali ke mode tunda dan, oleh karena itu, meminimalkan konsumsi daya.
*Satu pengecualian penting dari pengemudi yang tidak diizinkan untuk menahan penguncian layar saat bangun adalah ketika sensor bangun dengan mode pelaporan berkelanjutan diaktifkan dengan max_report_latency
<1 detik. Dalam hal ini, pengemudi dapat menahan wake lock karena AP tidak punya waktu untuk masuk ke mode suspend, karena akan dibangunkan oleh peristiwa bangun sebelum mencapai mode suspend.
Tindakan pencegahan yang harus diambil saat mengelompokkan sensor bangun
Bergantung pada perangkatnya, mungkin perlu beberapa milidetik agar Titik Akses keluar dari mode tunda sepenuhnya dan mulai membilas FIFO. Ruang kepala yang cukup harus dialokasikan di FIFO untuk memungkinkan perangkat keluar dari mode tunda tanpa FIFO bangun yang meluap. Tidak ada acara yang akan hilang, dan max_report_latency
harus dihormati.
Tindakan pencegahan yang harus dilakukan saat mengelompokkan sensor perubahan yang tidak bangun
Sensor saat berubah hanya menghasilkan peristiwa ketika nilai yang mereka ukur berubah. Jika nilai terukur berubah saat AP dalam mode tunda, aplikasi berharap untuk menerima peristiwa segera setelah AP bangun. Karena itu, pengelompokan peristiwa sensor yang tidak aktif saat perubahan harus dilakukan dengan hati-hati jika sensor berbagi FIFO-nya dengan sensor lain. Peristiwa terakhir yang dihasilkan oleh setiap sensor perubahan harus selalu disimpan di luar FIFO bersama sehingga tidak pernah dapat ditimpa oleh peristiwa lain. Ketika AP bangun, setelah semua peristiwa dari FIFO telah dilaporkan, peristiwa sensor perubahan terakhir harus dilaporkan.
Berikut adalah situasi yang harus dihindari:
- Aplikasi mendaftar ke penghitung langkah non-bangun (on-change) dan akselerometer non-bangun (terus menerus), keduanya berbagi FIFO yang sama.
- Aplikasi menerima peristiwa penghitung langkah
step_count=1000 steps
>. - AP pergi untuk menangguhkan.
- Pengguna berjalan 20 langkah, menyebabkan peristiwa penghitung langkah dan akselerometer disisipkan, peristiwa penghitung langkah terakhir adalah
step_count = 1020 steps
. - Pengguna tidak bergerak untuk waktu yang lama, menyebabkan peristiwa akselerometer terus terakumulasi di FIFO, akhirnya menimpa setiap peristiwa
step_count
di FIFO bersama. - AP bangun dan semua acara dari FIFO dikirim ke aplikasi.
- Aplikasi hanya menerima peristiwa akselerometer dan menganggap bahwa pengguna tidak berjalan.
Dengan menyimpan peristiwa penghitung langkah terakhir di luar FIFO, HAL dapat melaporkan peristiwa ini saat AP bangun, bahkan jika semua peristiwa penghitung langkah lainnya ditimpa oleh peristiwa akselerometer. Dengan cara ini, aplikasi menerima step_count = 1020 steps
saat AP bangun.
Menerapkan batching
Untuk menghemat daya, batching harus dilaksanakan tanpa bantuan AP, dan AP harus dibiarkan ditangguhkan selama batching.
Jika batching dilakukan di hub sensor, penggunaan daya hub sensor harus diminimalkan.
Latensi laporan maksimum dapat dimodifikasi kapan saja, khususnya saat sensor yang ditentukan sudah diaktifkan; dan ini seharusnya tidak mengakibatkan hilangnya acara.
Prioritas alokasi FIFO
Pada platform di mana FIFO perangkat keras dan/atau ukuran buffer hub sensor terbatas, perancang sistem mungkin harus memilih berapa banyak FIFO yang akan dicadangkan untuk setiap sensor. Untuk membantu dengan pilihan ini, berikut adalah daftar kemungkinan aplikasi saat batching diimplementasikan pada sensor yang berbeda.
Nilai tinggi: Perhitungan mati pejalan kaki berdaya rendah
Target waktu batching: 1 hingga 10 menit
Sensor untuk batch:
- Detektor langkah bangun
- Vektor rotasi game bangun pada 5 Hz
- Barometer bangun pada 5 Hz
- Magnetometer bangun yang tidak dikalibrasi pada 5 Hz
Batching data ini memungkinkan melakukan perhitungan mati pejalan kaki sambil membiarkan AP pergi untuk ditangguhkan.
Nilai tinggi: Aktivitas intermiten/pengenalan gerakan daya sedang
Target waktu batching: 3 detik
Sensor untuk batch: Akselerometer non-bangun pada 50 Hz
Batching data ini memungkinkan secara berkala mengenali aktivitas dan gerakan arbitrer tanpa harus membuat AP tetap terjaga saat data dikumpulkan.
Nilai sedang: Aktivitas berkelanjutan/pengenalan gerakan daya sedang
Target waktu batching: 1 hingga 3 menit
Sensor untuk batch: Akselerometer bangun pada 50 Hz
Batching data ini memungkinkan terus menerus mengenali aktivitas dan gerakan arbitrer tanpa harus membuat AP tetap terjaga saat data dikumpulkan.
Nilai sedang-tinggi: Pengurangan beban interupsi
Target waktu batching: <1 detik
Sensor untuk batch: semua sensor frekuensi tinggi, biasanya non-bangun.
Jika giroskop diatur pada 240 Hz, bahkan batching hanya 10 peristiwa gyro dapat mengurangi jumlah interupsi dari 240/detik menjadi 24/detik.
Nilai sedang: Pengumpulan data frekuensi rendah terus menerus
Target waktu batching: 1 hingga 10 menit
Sensor untuk batch:
- Barometer bangun pada 1 Hz
- Sensor kelembaban bangun pada 1 Hz
- Sensor bangun frekuensi rendah lainnya dengan kecepatan yang sama
Memungkinkan pembuatan aplikasi pemantauan dengan daya rendah.
Nilai sedang-rendah: Koleksi sensor penuh berkelanjutan
Target waktu batching: 1 hingga 10 menit
Sensor untuk dikumpulkan: Semua sensor bangun, pada frekuensi tinggi
Memungkinkan pengumpulan penuh data sensor saat meninggalkan Titik Akses dalam mode tunda. Hanya pertimbangkan jika ruang FIFO tidak menjadi masalah.