Toplu işlem nedir?
Toplu işleme, olayları Sensör HAL'i aracılığıyla raporlamadan önce sensör olaylarını bir sensör hub'ında ve/veya donanım FIFO'sunda tamponlamayı ifade eder. Sensör olaylarının arabelleğe alındığı konum (sensör hub'ı ve/veya donanım FIFO'su) bu sayfada "FIFO" olarak anılır. Sensör olayı gruplaması etkin olmadığında, sensör olayları mümkün olduğunda hemen Sensör HAL'sine raporlanır.
Toplu işlem, Android'i çalıştıran ana uygulama işlemcisini (AP) her bir olay için uyandırmak yerine yalnızca birçok sensör olayı işlenmeye hazır olduğunda uyandırarak önemli miktarda güç tasarrufu sağlayabilir. Potansiyel güç tasarrufu, sensör hub'ının ve/veya FIFO'nun arabelleğe alabileceği olay sayısıyla doğrudan ilişkilidir: daha fazla olay toplu hale getirilebilirse, güç tasarrufu için daha büyük bir potansiyel vardır. Toplu işleme, yüksek güçlü AP uyandırmalarının sayısını azaltmak için düşük güçlü bellek kullanımından yararlanır.
Toplu işlem yalnızca bir sensör bir donanım FIFO'suna sahip olduğunda ve/veya bir sensör hub'ındaki olayları ara belleğe alabildiğinde gerçekleşebilir. Her iki durumda da sensörün, SensorInfo.fifoMaxEventCount
aracılığıyla tek seferde toplu hale getirilebilecek maksimum olay sayısını raporlaması gerekir.
Bir sensörün FIFO içinde ayrılmış alanı varsa sensörün, ayrılmış olayların sayısını SensorInfo.fifoReservedEventCount
aracılığıyla bildirmesi gerekir. FIFO sensöre ayrılmışsa SensorInfo.fifoReservedEventCount
, FIFO'nun boyutudur. FIFO birkaç sensör arasında paylaşılıyorsa bu değer sıfır olabilir. Yaygın bir kullanım durumu, bir sensörün tek aktif sensör olması durumunda FIFO'nun tamamını kullanmasına izin vermektir. Birden fazla sensör etkinse her sensöre FIFO'da en az SensorInfo.fifoReservedEventCount
olayı için alan garanti edilir. Bir sensör hub'ı kullanılıyorsa garanti yazılım aracılığıyla uygulanabilir.
Sensör olayları aşağıdaki durumlarda toplu olarak işlenir:
- Sensörün mevcut maksimum rapor gecikmesi sıfırdan büyüktür; bu, sensör olaylarının HAL aracılığıyla raporlanmadan önce maksimum rapor gecikmesine kadar geciktirilebileceği anlamına gelir.
- AP askıya alma modundadır ve sensör, uyanmayan bir sensördür. Bu durumda olaylar AP'yi uyandırmamalı ve AP uyanana kadar saklanmalıdır.
Bir sensör toplu işlemeyi desteklemiyorsa ve AP uykudaysa yalnızca uyandırma sensörü olayları AP'ye raporlanır ve uyanma olmayan olaylar AP'ye bildirilmemelidir.
Toplu parametreler
Toplu işlemin davranışını yöneten iki parametre sample_period_ns ve max_report_latency_ns'dir . sampling_period_ns
yeni bir sensör olayının ne sıklıkta oluşturulacağını belirler ve max_report_latency_ns
olayın Sensör HAL'sine ne kadar süreyle rapor edilmesi gerektiğini belirler.
örnekleme_period_ns
sampling_period_ns
parametresinin anlamı, belirtilen sensörün raporlama moduna bağlıdır:
- Sürekli:
sampling_period_ns
örnekleme hızıdır, yani olayların oluşturulduğu hız anlamına gelir. - Değişiklik durumunda:
sampling_period_ns
olayların örnekleme hızını sınırlar; bu, olayların hersampling_period_ns
nanosaniyeden daha hızlı üretilmediği anlamına gelir. Hiçbir olay oluşturulmazsa ve ölçülen değerler uzun süre değişmezse, dönemlersampling_period_ns
daha uzun olabilir. Daha fazla ayrıntı için değişiklik durumunda raporlama moduna bakın. - Tek seferlik:
sampling_period_ns
göz ardı edilir. Hiçbir etkisi yok. - Özel:
sampling_period_ns
özel sensörler için nasıl kullanıldığına ilişkin ayrıntılar için bkz. Sensör Tipleri .
sampling_period_ns
farklı modlardaki etkisi hakkında daha fazla bilgi için bkz. Raporlama modları .
Sürekli ve değişen sensörler için:
-
sampling_period_ns
SensorInfo.minDelay
değerinden küçükse, HAL uygulamasının bunu sessizcemax(SensorInfo.minDelay, 1ms)
değerine kenetlemesi gerekir. Android, 1000 Hz'in üzerindeki olayların oluşturulmasını desteklemez. -
sampling_period_ns
SensorInfo.maxDelay
değerinden büyükse, HAL uygulamasının onu sessizceSensorInfo.maxDelay
değerine kesmesi gerekir.
Fiziksel sensörlerin bazen çalışabilecekleri hızlar ve saatlerinin doğruluğu konusunda sınırlamaları vardır. Bunu hesaba katmak için, gerçek örnekleme frekansı, aşağıdaki tabloda yer alan gereklilikleri karşıladığı sürece talep edilen frekanstan farklı olabilir.
İstenilen sıklık ise | O zaman gerçek frekans şu şekilde olmalıdır: |
---|---|
minimum frekansın altında (<1/maxDelay) | minimum frekansın %90 ila %110'u arasında |
minimum ve maksimum frekans arasında | talep edilen frekansın %90 ila %220'si arasında |
maksimum frekansın üzerinde (>1/dakGecikme) | maksimum frekansın %90 ila %110'u arasında ve 1100 Hz'nin altında |
max_report_latency_ns
max_report_latency_ns
, AP uyanıkken HAL aracılığıyla raporlanmadan önce olayların ertelenebileceği ve donanım FIFO'sunda saklanabileceği maksimum süreyi nanosaniye cinsinden ayarlar.
Sıfır değeri, FIFO'yu tamamen atlayarak veya sensörden bir olay mevcut olduğu anda FIFO'yu boşaltarak olayların ölçülür ölçülmez raporlanması gerektiğini belirtir.
Örneğin, max_report_latency_ns=0
ile 50 Hz'de etkinleştirilen bir ivmeölçer, AP uyanıkken saniyede 50 kez kesintileri tetikleyecektir.
max_report_latency_ns>0
olduğunda, sensör olaylarının algılanır algılanmaz raporlanmasına gerek yoktur. Hiçbir olay max_report_latency_ns
nanosaniyeden daha fazla gecikmediği sürece bunlar geçici olarak FIFO'da saklanabilir ve gruplar halinde raporlanabilir. Bu, önceki gruptan bu yana tüm olayların bir kerede kaydedilip geri döndürüldüğü anlamına gelir. Bu, AP'ye gönderilen kesinti miktarını azaltır ve sensör verileri yakalayıp toplurken AP'nin daha düşük güç moduna (boşta) geçmesine olanak tanır.
Her olayın kendisiyle ilişkilendirilmiş bir zaman damgası vardır. Bir olayın bildirildiği zamanın geciktirilmesi, olay zaman damgasını etkilemez. Zaman damgası doğru olmalı ve olayın rapor edildiği zamana değil, fiziksel olarak gerçekleştiği zamana karşılık gelmelidir.
Sensör olaylarının geçici olarak FIFO'da saklanmasına izin verilmesi, olayların HAL'e gönderilmesi davranışını değiştirmez; farklı sensörlerden gelen olaylar serpiştirilebilir ve aynı sensörden gelen tüm olaylar zamana göre sıralanır.
Uyanma ve uyanma dışı olaylar
Uyandırma sensörlerinden gelen sensör olayları bir veya daha fazla uyandırma FIFO'sunda saklanmalıdır. Yaygın bir tasarım, tüm uyandırma sensörlerinden gelen olayların serpiştirildiği tek, büyük, paylaşılan bir uyandırma FIFO'suna sahip olmaktır. Alternatif olarak, sensör başına bir uyandırma FIFO'nuz olabilir veya belirli uyandırma sensörleri için özel FIFO'lara ve geri kalan uyandırma sensörleri için paylaşılan bir FIFO'ya sahip olabilirsiniz.
Benzer şekilde, uyanmayan sensörlerden gelen sensör olayları bir veya daha fazla uyanmayan FIFO'da saklanmalıdır.
Her durumda, uyanma sensörü olayları ve uyanma olmayan sensör olayları aynı FIFO'ya serpiştirilemez. Uyandırma olayları bir uyandırma FIFO'sunda saklanmalı ve uyanma dışı olaylar da bir uyandırma olmayan FIFO'da saklanmalıdır.
Uyandırma FIFO'su için tek, büyük, paylaşımlı FIFO tasarımı en iyi güç avantajlarını sağlar. Uyandırılmayan FIFO için, tek, büyük paylaşımlı FIFO ve birkaç küçük ayrılmış FIFO tasarımı benzer güç özelliklerine sahiptir. Her bir FIFO'nun nasıl yapılandırılacağına ilişkin daha fazla öneri için bkz. FIFO tahsis önceliği .
Askıya alma modunun dışındaki davranış
AP uyanıkken (askıya alma modunda değil), max_report_latency
değerinden daha fazla gecikmedikleri sürece olaylar FIFO'larda geçici olarak depolanır.
AP askıya alma moduna girmediği sürece hiçbir olay bırakılmayacak veya kaybolmayacaktır. max_report_latency
süresi dolmadan dahili FIFO'lar dolarsa hiçbir olayın kaybolmamasını sağlamak için olaylar bu noktada raporlanır.
Birkaç sensör aynı FIFO'yu paylaşırsa ve bunlardan birinin max_report_latency
dolarsa, diğer sensörlerin max_report_latency
henüz dolmamış olsa bile FIFO'daki tüm olaylar raporlanır. Bu, olay gruplarının raporlanma sayısını azaltır. Bir olayın raporlanması gerektiğinde, tüm sensörlerden gelen tüm olaylar raporlanır.
Örneğin aşağıdaki sensörler etkinleştirilirse:
-
max_report_latency
= 20s ile toplu ivmeölçer -
max_report_latency
= 5s ile toplu jiroskop
İvmeölçer ve jiroskop aynı FIFO'yu paylaşmasa bile, ivmeölçer grupları jiroskop gruplarıyla aynı anda (her 5 saniyede bir) raporlanır.
Askıya alma modundaki davranış
Toplu işlem, AP'yi uyanık tutmadan arka planda sensör verilerini toplamak için özellikle faydalıdır. Sensör sürücülerinin ve HAL uygulamasının uyandırma kilidi* tutmasına izin verilmediğinden, AP, sensör verileri toplanırken bile askıya alma moduna girebilir.
AP askıya alındığında sensörlerin davranışı, sensörün bir uyandırma sensörü olup olmamasına bağlıdır. Daha fazla ayrıntı için bkz. Uyandırma sensörleri .
Uyandırılmayan bir FIFO dolduğunda, etrafı sarmalı ve dairesel bir tampon gibi davranmalı, eski olayların üzerine eski olayların yerini alan yeni olayları yazmalıdır. max_report_latency
, askıya alma modundayken uyanmayan FIFO'lar üzerinde hiçbir etkisi yoktur.
Uyandırma FIFO'su dolduğunda veya uyandırma sensörlerinden birinin max_report_latency
dolduğunda, donanımın AP'yi uyandırması ve verileri raporlaması gerekir.
Her iki durumda da (uyanma ve uyanmama), AP askıya alma modundan çıkar çıkmaz, bazı sensörlerin max_report_latency
henüz geçmemiş olsa bile, tüm FIFO'ların içeriğini içeren bir toplu iş üretilir. Bu, AP'nin askıya alma moduna döndükten hemen sonra tekrar uyanma riskini en aza indirir ve dolayısıyla güç tüketimini en aza indirir.
*Sürücülerin uyanık kalma kilidi tutmasına izin verilmeyen dikkate değer bir istisna, sürekli raporlama moduna sahip bir uyandırma sensörünün max_report_latency
< 1 saniye ile etkinleştirilmesidir. Bu durumda, AP'nin askıya alma moduna girmek için zamanı olmadığından, sürücü bir uyandırma kilidi tutabilir; çünkü AP, askıya alma moduna ulaşmadan önce bir uyandırma olayıyla uyandırılacaktır.
Uyandırma sensörlerini gruplandırırken alınacak önlemler
Cihaza bağlı olarak AP'nin askıya alma modundan tamamen çıkması ve FIFO'yu temizlemeye başlaması birkaç milisaniye sürebilir. Uyandırma FIFO taşması olmadan cihazın askıya alma modundan çıkmasına izin vermek için FIFO'da yeterli boşluk ayrılmalıdır. Hiçbir olay kaybolmamalı ve max_report_latency
uyulmalıdır.
Değiştirildiğinde uyanmayan sensörleri gruplandırırken alınacak önlemler
Değişim sensörleri yalnızca ölçtükleri değer değiştiğinde olay üretir. AP bekleme modundayken ölçülen değer değişirse uygulamalar AP uyanır uyanmaz bir olay almayı bekler. Bu nedenle, sensör FIFO'sunu diğer sensörlerle paylaşıyorsa, uyanmayan sensör değiştirme olaylarının toplu olarak işlenmesi dikkatli bir şekilde gerçekleştirilmelidir. Her bir değişim sensörü tarafından oluşturulan son olay her zaman paylaşılan FIFO'nun dışında saklanmalı, böylece başka olaylar tarafından asla üzerine yazılamamalıdır. AP uyandığında, FIFO'daki tüm olaylar raporlandıktan sonra, son sensör değişimi olayının raporlanması gerekir.
İşte kaçınılması gereken bir durum:
- Bir uygulama, her ikisi de aynı FIFO'yu paylaşan, uyanma dışı adım sayacına (değişim sırasında) ve uyanma olmayan ivme ölçere (sürekli) kaydolur.
- Uygulama bir adım sayacı olayı
step_count=1000 steps
kodu> alır. - AP askıya alınır.
- Kullanıcı 20 adım atarak adım sayacı ve ivmeölçer olaylarının serpiştirilmesine neden olur; son adım sayacı olayı
step_count = 1020 steps
olur. - Kullanıcı uzun süre hareket etmez, bu da ivmeölçer olaylarının FIFO'da birikmeye devam etmesine ve sonuçta paylaşılan FIFO'daki her
step_count
olayının üzerine yazılmasına neden olur. - AP uyanır ve FIFO'daki tüm olaylar uygulamaya gönderilir.
- Uygulama yalnızca ivmeölçer olaylarını alır ve kullanıcının yürümediğini düşünür.
Son adım sayacı olayını FIFO'nun dışına kaydederek HAL, ivmeölçer olayları tarafından diğer tüm adım sayacı olaylarının üzerine yazılmış olsa bile AP uyandığında bu olayı rapor edebilir. Bu şekilde AP uyandığında uygulama step_count = 1020 steps
alır.
Toplu işlemeyi uygulayın
Güçten tasarruf etmek için toplu işlem AP'nin yardımı olmadan uygulanmalı ve toplu işlem sırasında AP'nin askıya alınmasına izin verilmelidir.
Toplulaştırma bir sensör hub'ında gerçekleştiriliyorsa sensör hub'ının güç kullanımı en aza indirilmelidir.
Maksimum rapor gecikmesi, özellikle belirtilen sensör zaten etkinken herhangi bir zamanda değiştirilebilir; ve bu olayların kaybına neden olmamalıdır.
FIFO tahsis önceliği
Donanım FIFO'su ve/veya sensör merkezi arabellek boyutunun sınırlı olduğu platformlarda, sistem tasarımcılarının her sensör için ne kadar FIFO ayıracağını seçmesi gerekebilir. Bu seçime yardımcı olmak için, farklı sensörlere gruplama uygulandığında olası uygulamaların bir listesini burada bulabilirsiniz.
Yüksek değer: Düşük güçlü yaya ölü hesaplaması
Hedef harmanlama süresi: 1 ila 10 dakika
Toplu olarak kullanılacak sensörler:
- Uyandırma adımı dedektörü
- 5 Hz'de uyandırma oyunu döndürme vektörü
- 5 Hz'de uyanma barometresi
- Kalibre edilmemiş manyetometreyi 5 Hz'de uyandırma
Bu verilerin toplu olarak toplanması, AP'nin askıya alınmasına izin verirken yaya ölü hesaplaması yapılmasına olanak tanır.
Yüksek değer: Orta güçte aralıklı aktivite/hareket tanıma
Hedef toplu işlem süresi: 3 saniye
Toplu sensörler: 50 Hz'de uyanmayan ivmeölçer
Bu verilerin toplu olarak işlenmesi, veriler toplanırken AP'yi uyanık tutmak zorunda kalmadan rastgele etkinliklerin ve hareketlerin periyodik olarak tanınmasına olanak tanır.
Orta değer: Orta güçte sürekli aktivite/hareket tanıma
Hedef harmanlama süresi: 1 ila 3 dakika
Toplu sensörler: 50 Hz'de uyanma ivmeölçeri
Bu verilerin toplu olarak işlenmesi, veriler toplanırken AP'yi uyanık tutmak zorunda kalmadan rastgele etkinliklerin ve hareketlerin sürekli olarak tanınmasına olanak tanır.
Orta-yüksek değer: Kesinti yükünün azaltılması
Hedef toplu işlem süresi: < 1 saniye
Toplu sensörler: herhangi bir yüksek frekanslı sensör, genellikle uyanmayan.
Jiroskop 240 Hz'e ayarlanmışsa, yalnızca 10 jiroskop olayını gruplamak bile kesinti sayısını 240/saniyeden 24/saniyeye düşürebilir.
Orta değer: Sürekli düşük frekanslı veri toplama
Hedef harmanlama süresi: 1 ila 10 dakika
Toplu olarak kullanılacak sensörler:
- 1 Hz'de uyanma barometresi
- 1 Hz'de uyandırma nem sensörü
- Benzer oranlarda diğer düşük frekanslı uyandırma sensörleri
Düşük güçte izleme uygulamaları oluşturmaya olanak tanır.
Orta-düşük değer: Sürekli tam sensör koleksiyonu
Hedef harmanlama süresi: 1 ila 10 dakika
Toplu sensörler: Tüm uyandırma sensörleri, yüksek frekanslarda
AP'yi askıya alma modunda bırakırken sensör verilerinin tamamının toplanmasına izin verir. Yalnızca FIFO alanının bir sorun olup olmadığını düşünün.