Traitement par lots de données de capteur pour des économies d’énergie
Cette rubrique décrit les interfaces requises entre l’extension de classe de capteur et le pilote de capteur pour implémenter le traitement par lots de données de capteur dans Windows 10.
Introduction
Un pilote de capteur qui implémente le traitement par lots de données permet au processeur d’applications d’économiser de l’énergie, car le processeur reçoit et traite les données du capteur moins fréquemment. Dans ce cas, le pilote de capteur met en mémoire tampon les échantillons de données du capteur dans le matériel du capteur, puis les transfère ensemble dans un lot vers l’extension de classe de capteur. Pour prendre en charge le traitement par lots, vous devez fournir un pilote de capteur universel UMDF 2.0, qui implémente les interfaces requises.
Latence des lots
La latence Batch est définie comme la durée maximale pendant laquelle un capteur peut mettre en mémoire tampon un échantillon de données après sa collecte, avant de le remettre à l’extension de classe de capteur. La « planification » du traitement par lot des données du capteur démarre lorsque les événements du capteur sont fournis par le pilote, en fonction de la valeur de latence du lot, comme illustré dans les diagrammes suivants.
Dans le cas d’un pilote qui n’implémente pas le traitement par lots de données, le pilote collecte et envoie simplement les données du capteur dès qu’elles sont disponibles. Ainsi, par exemple, pour envoyer N exemples de données, le pilote lance la collecte et l’envoi des échantillons de données, N fois.
Dans le cas d’un pilote qui implémente le traitement par lots de données, la collecte et la séquence de remise des données sont effectuées par lots, comme indiqué dans le diagramme qui précède immédiatement. La valeur de latence par lot est spécifiée par l’extension de classe de capteur. Par conséquent, lorsque le matériel du capteur doit collecter et transférer des échantillons de données N, par exemple, le pilote de capteur peut fractionner le processus en deux lots. La première moitié des exemples de données N sont envoyés après un intervalle de temps égal à la période de latence du lot. Ensuite, après un autre intervalle de temps de latence de lot, la deuxième moitié des échantillons de données est envoyée, ce qui fait un total de deux transferts, par rapport aux transferts N requis par la méthode de livraison normale.
Propriétés du capteur
En plus des propriétés de capteur courantes et des propriétés d’énumération requises, un pilote qui prend en charge le traitement par lots de données doit également signaler les propriétés suivantes :
- PKEY_Sensor_FifoReservedSize_Samples
- PKEY_Sensor_FifoMaxSize_Samples
- PKEY_Sensor_WakeCapable
Pour plus d’informations, consultez Propriétés de capteur courantes et Propriétés d’énumération.
Si le sous-système matériel du capteur est compatible avec la veille, il doit s’assurer qu’il lance le réveil suffisamment tôt pour éviter les dépassements de mémoire tampon.
Fonctions DDSI facultatives pour le traitement par lots de données
Les fonctions DDSI (Device Driver Software Interface) sont l’interface entre le pilote et l’extension de classe. Pour prendre en charge le traitement par lots de données, un pilote doit implémenter la fonction DDSI suivante, afin que l’extension de classe de capteur puisse définir la latence du lot.
-
Il s’agit d’une fonction de rappel qui définit la latence par lots pour un capteur spécifié. Le pilote doit définir la latence batch sur une valeur inférieure ou égale au paramètre BatchLatencyMs , en fonction de la disponibilité de la mémoire tampon.
Le pilote doit également implémenter toutes les fonctions DDSI requises. Pour plus d’informations, consultez structure _SENSOR_CONTROLLER_CONFIG.
Il est facultatif pour l’extension de classe de capteur de spécifier la latence par lots. La latence par lot par défaut pour tous les capteurs est égale à zéro (0), ce qui est utilisé pour indiquer que les échantillons ne seront pas traités par lot. Les exemples de capteurs sont fournis par lots, uniquement si l’extension de classe appelle EvtSensorSetBatchLatency pour définir une valeur de latence de lot. Dans le cas contraire, les échantillons seront remis normalement au rythme de l’intervalle de données périodique.
L’extension de classe de capteur peut appeler EvtSensorSetBatchLatency pour modifier la valeur de latence du lot à tout moment. En particulier, cette fonction peut être appelée lorsque le capteur spécifié est déjà actif et en cours d’exécution, ce qui ne doit pas entraîner la perte d’événements. Le pilote de capteur est censé collecter et commencer à livrer des échantillons du dernier lot immédiatement (selon les meilleurs efforts). Le pilote ne doit pas dépasser la latence de lot spécifiée par l’extension de classe.
Il est important de noter qu’aucun changement n’est impliqué dans les méthodes et événements de livraison de données des capteurs en raison du traitement par lots de données. Lorsque la latence des lots expire, le pilote appelle SensorsCxSensorDataReady à plusieurs reprises pour fournir tous les exemples de données mises en mémoire tampon un par un. Les échantillons de données sont accompagnés de leurs horodatages (contenus dans les champs de données PKEY_SensorData_Timestamp associés) indiquant quand chaque échantillon a été prélevé. Pour plus d’informations sur PKEY_SensorData_Timestamp, consultez Champs de données courants.
Latence des lots et relation de débit de données
La latence des lots et le débit de données sont liés comme suit :
Où SensorBatching_MaxSize_Bytes correspond à la taille maximale de la mémoire tampon pour les données du capteur par lot. Si votre capteur est un accéléromètre, nous vous recommandons d’utiliser une mémoire tampon matérielle suffisamment grande pour contenir au moins 250 échantillons. Le débit de données est exprimé en millisecondes, et il s’agit de la durée nécessaire au transfert d’un exemple de données. Le nombre d’échantillons que le matériel du capteur doit stocker dans un lot est inversement proportionnel au débit de données. Plus le débit de données est faible, plus l’exemple de mémoire tampon nécessaire pour stocker les échantillons traités pour une valeur de latence de lot donnée est important. Dans la formule précédente, la latence des lots est représentée par BatchLatencyMs et le débit de données est représenté par DataRateMs. Et si la combinaison de BatchLatencyMs et DataRateMs entraîne une taille de mémoire tampon supérieure à SensorBatching_MaxSize_Bytes, EvtSensorSetBatchLatency et EvtSensorSetDataInterval définissent la latence par lots sur la valeur indiquée par la formule précédente.
Si l’appelant spécifie une valeur BatchLatencyMs inférieure à DataRateMs, les données sont remises sans mise en mémoire tampon.
Traitement par lots avec des seuils de données
Un pilote de capteur qui implémente le traitement par lots de données peut utiliser EvtSensorSetDataThresholds pour définir un seuil de données non nul. Dans ce cas, lorsque la différence de valeurs de données entre les lectures actuelles et les dernières lectures dépasse le seuil de données défini à l’aide d’EvtSensorSetDataThresholds, la collecte de données, le traitement par lots et le processus de remise est appelé. L’utilisation du traitement par lots de données avec des seuils de données permet donc au pilote de capteur d’économiser encore plus d’énergie.
Lorsque des seuils de données non nuls sont définis par l’extension de classe de capteur, ainsi que par lot de données, le pilote est censé fournir des échantillons par lots avec des horodatages précis et respecter les seuils de données. Si le matériel du capteur lui-même n’est pas en mesure de conserver des horodatages précis tout en appliquant des seuils de données, il peut collecter des échantillons sans appliquer de seuils de données. Toutefois, dans ce cas, le pilote doit filtrer les exemples qui ne répondent pas aux paramètres de seuil de données actuels, avant de les remettre à l’extension de classe de capteur.
Exemples de diagramme de séquence
Voici des diagrammes de séquence qui montrent l’utilisation des fonctions DDSI de traitement par lot de données facultatives qui ont été mentionnées dans Fonctions DDSI facultatives pour le traitement par lots de données. Nous pouvons ajouter d’autres diagrammes de séquences si nécessaire, pour clarifier les scénarios en fonction des commentaires des partenaires.
Scénario 1
Dans ce scénario, l’extension de classe de capteur définit la latence du lot et l’intervalle de données, avant de démarrer le capteur. Une fois le capteur démarré, il livre régulièrement des lots tout en respectant les propriétés définies.
Scénario 2
Dans ce scénario, l’extension de classe de capteur définit la latence des lots, l’intervalle de données et les seuils de données, avant de démarrer le capteur. Une fois le capteur démarré, il livre régulièrement des lots tout en respectant les propriétés définies. Notez que le pilote ne doit pas remettre un lot, sauf s’il existe un exemple qui répond aux valeurs de seuil de données, qui doit être envoyé dans le cadre de la latence de lot spécifiée.
Scénario 3
Dans ce scénario, l’extension de classe de capteur définit la latence par lots et l’intervalle de données avant de démarrer le capteur. Une fois que le capteur démarre, il livre régulièrement des lots, tout en respectant les propriétés définies. L’extension de classe de capteur modifie la latence du lot et l’intervalle de données pendant l’exécution du capteur, et le pilote commence immédiatement à fournir des échantillons conformément aux nouvelles valeurs sans perdre d’échantillons de données pendant l’exécution.
Configurations matérielles de traitement par lots de données
Les données du capteur doivent être traitées par lots dans le matériel du capteur, sans l’intervention du processeur d’application. Cela permettra au processeur de se mettre en veille pendant que les données sont en cours de traitement par lot pour économiser l’alimentation. Le diagramme suivant montre les configurations possibles pour le traitement par lots de données basées sur le matériel du capteur.
Configuration 1 : la mémoire tampon FIFO est implémentée dans le composant Capteur, qui est directement connecté au processeur d’application.
Configuration 2 : la mémoire tampon FIFO est implémentée dans le cœur matériel du capteur de faible puissance auquel le composant du capteur est connecté. Dans ce cas, la mémoire tampon FIFO peut être partagée entre plusieurs capteurs ou même partagée avec des composants autres que des capteurs, en fonction de la conception du cœur du capteur. Le cœur du capteur de faible puissance est à son tour connecté au processeur d’application et peut être intégré au SoC. Il peut également s’agir d’un composant externe.
Configuration 3 : la mémoire tampon FIFO est implémentée sur le composant du capteur. Le composant de capteur est connecté à un cœur de capteur de faible puissance, qui est connecté au processeur d’application. Le composant capteur peut être intégré au SoC ou il peut s’agir d’un composant externe.
Configuration 4 : la mémoire tampon FIFO est implémentée sur le composant du capteur et le cœur du capteur de faible puissance. Le composant de capteur est connecté à un cœur de capteur de faible puissance qui, à son tour, est connecté au processeur d’application. Le composant de capteur peut être intégré au SoC, ou il peut s’agir d’un composant externe. Il est à noter que le cœur du capteur peut être utilisé pour étendre un FIFO trop superficiel.
La chose clé à noter est que le FIFO peut être implémenté sur le matériel principal du capteur ou sur le matériel du capteur ou sur les deux. Le pilote extrait cela pour le système d’exploitation et présente une interface uniforme via le DDSI.
Le diagramme suivant illustre les différentes configurations décrites dans la liste précédente.
Comportement complet de la mémoire tampon dans le matériel
Dans des circonstances normales, le pilote est censé lire la mémoire tampon matérielle au moins une fois par intervalle de temps égal à BatchLatencyMs, pour s’assurer qu’aucune donnée n’est supprimée ou perdue. Lorsque la mémoire tampon FIFO matérielle se remplit, elle doit être encapsulée et se comporter comme une mémoire tampon circulaire, remplaçant les événements plus anciens.