Configuration matérielle requise pour les appareils WavePci
Lors du choix des fonctionnalités d’une nouvelle conception matérielle, les fournisseurs doivent suivre ces principes généraux :
Au lieu d’essayer de déplacer simplement tout le traitement vers le matériel, les fournisseurs doivent soupeser le coût de chaque fonctionnalité par rapport à son impact sur les performances.
Lorsque vous envisagez la valeur potentielle d’une fonctionnalité matérielle, un fournisseur doit évaluer cette fonctionnalité en fonction de son impact sur le système dans son ensemble plutôt que de se concentrer de manière étroite sur un sous-système particulier, comme l’audio.
En sélectionnant judicieusement les fonctionnalités à accélérer dans le matériel, les fournisseurs peuvent alléger la charge de travail du processeur et améliorer l’utilisation de la mémoire, rendant ainsi davantage de ressources du système disponibles pour d’autres tâches.
Historiquement, toutes les conceptions de matériel audio n’ont pas réussi à suivre ces principes.
Lors de la lecture de contenu audio ou du mixage de plusieurs flux, certains pilotes audio WDM consomment inutilement beaucoup de temps processeur et de bande passante de bus. Ces lacunes sont généralement le résultat de conceptions matérielles défectueuses et d’implémentations de pilotes inefficaces. Les défauts de conception matérielle peuvent également empêcher un pilote audio de gérer certains formats d’ondes ou nécessiter des solutions de contournement qui nécessitent une intervention logicielle.
L’objectif du modèle d’appareil WaveCyclic est de prendre en charge les limitations matérielles des anciens appareils audio. Les nouvelles conceptions matérielles doivent être entièrement conformes à WavePci.
Un appareil WavePci capable d’effectuer de véritables diffusions/collectes DMA élimine la nécessité pour le processeur de passer du temps à copier des données audio entre les mémoires tampons. Contrairement à WaveCyclic, WavePci n’a aucun besoin inhérent de copie de données, ce qui en fait le pilote miniport préféré pour les périphériques audio multistream ou accélérés par le matériel. Un appareil WavePci bien conçu ne doit consommer presque aucune ressource processeur, ce qui permet d’envoyer un grand nombre de flux audio (64 ou plus) au matériel pour le traitement et le mixage 3D.
Un appareil WavePci nécessite un contrôleur DMA master bus prenant en charge les transferts DMA de diffusion/collecte. Les conceptions matérielles ne doivent pas placer de limites arbitraires sur les types de transferts de données que le contrôleur DMA peut gérer. Un appareil WavePci doit répondre aux exigences suivantes :
L’appareil doit être un master de bus.
Il doit être en mesure d’accéder de manière autonome à la mémoire système sans intervention du système d’exploitation et sans utiliser les ressources DMA système.
L’appareil doit être en mesure de gérer les transferts de données de longueur arbitraire.
Il doit gérer les mappages (voir IPortWavePciStream ::GetMapping) plus volumineux qu’une page mémoire. Un appareil avec une limite de transfert de 4 kilo-octets, par exemple, ne répond pas à toutes les exigences de WavePci. Sur les processeurs 64 bits qui prennent en charge Microsoft Windows, la taille de page est de 8 kilo-octets, ce qui rend probable que certains mappages seront plus volumineux que 4 kilo-octets. Les transferts de données qui dépassent 32 kilo-octets dans un seul mappage sont théoriquement possibles, en fonction de la fragmentation de la mémoire physique. À l’autre extrême, une taille de mappage d’un octet est possible.
L’appareil doit gérer les transferts de données vers ou depuis n’importe quel emplacement dans la mémoire système.
Les transferts de données qui chevauchent des limites de puissance de 32 kilooctets ou plus sont très probables. Un ordinateur peut désormais contenir plus de 4 gigaoctets de RAM, et dans ces systèmes, les mappages peuvent être situés au-delà de 4 gigaoctets de mémoire physique dans le cas d’un processeur 64 bits ou de l’extension d’adresse physique x86 (PAE). Pour obtenir les meilleures performances sur ces machines, les fournisseurs doivent créer des appareils qui prennent en charge l’adressage 64 bits. Dans le cas contraire, la copie des données dans un logiciel est obligatoire. La copie de données a toujours été requise pour les appareils avec adressage 24 bits sur des systèmes avec plus de 16 mégaoctets de RAM. Les appareils doivent utiliser WaveCyclic au lieu de WavePci s’ils ne peuvent pas lire ou écrire dans n’importe où dans la mémoire physique. Un pilote peut prendre cette décision au moment du démarrage de l’appareil (voir IRP_MN_START_DEVICE) après avoir eu l’occasion de déterminer si sa portée d’adresse est suffisante pour accéder à la plage d’adresses complète du bus de mémoire système.
L’appareil doit gérer les transferts de données avec un alignement arbitraire.
Les mappages peuvent commencer et se terminer sur des limites d’octet arbitraires dans la mémoire. Une trame de données audio peut être fractionnée entre des mappages, avec les exemples des premiers canaux à la fin du premier mappage et les exemples pour les canaux restants dans le deuxième mappage. Pour obtenir un exemple, consultez Filtres d’ondes. Pour certaines tailles d’exemple, même un exemple de conteneur peut être fractionné entre des mappages. Si l’appareil nécessite que les transferts doivent se trouver sur les limites de la ligne de cache, ou si l’appareil exige que les transferts soient strictement alignés sur les limites d’images audio (par exemple, en supposant que la taille du transfert se divise uniformément en quatre, dans le cas stéréo 16 bits), cet appareil n’est pas adéquat pour une conformité complète de WavePci. Notez qu’un élément matériel non conforme peut être exposé en tant que périphérique WavePci en limitant les plages de données ou les formats exposés par le pilote (par exemple, uniquement certaines profondeurs de bits ou seulement certaines configurations de canal).
En ce qui concerne le dernier point de la liste précédente, le moteur DMA de diffusion/collecte d’un appareil WavePci doit gérer les mémoires tampons qui chevauchent les limites de la page mémoire. Par exemple, une mémoire tampon contenant 10 millisecondes d’échantillons audio PCM 16 bits pour un flux d’ondes de 48 kHz et 5,1 canaux a la taille suivante :
(6 exemples/image)*(2 octets/échantillon)*(48 000 images/seconde)*(10 millisecondes) = 5760 octets
Cela dépasse la taille de la page mémoire (4 096 octets), ce qui signifie que la mémoire tampon contient une ou deux limites de page, selon sa position en mémoire. La mémoire tampon contient un nombre intégral (480) d’images de données audio, mais une ou deux de ces images peuvent chevaucher les limites des pages.
Pour cette raison, le matériel DMA de diffusion/collecte d’un appareil WavePci doit être conçu pour gérer les images audio (telles que l’image 197 dans la figure suivante) qui sont réparties entre deux pages physiquement non incohérentes en mémoire.
En haut de la figure précédente se trouve une mémoire tampon de 5760 octets qui chevauche la limite entre deux pages. Dans cet exemple, la mémoire tampon commence à un décalage de 1728 octets à partir du début de la première page, ce qui aligne le début de la mémoire tampon sur une limite de 64 octets en mémoire. Supposons que chaque image audio occupe 12 octets et contient six canaux. La première page contient tous les cadres 0 à 196, mais uniquement les quatre premiers octets de l’image 197.
En bas de la figure se trouve une vue détaillée de l’image audio 197, qui montre que seuls les exemples pour les canaux 0 et 1 se trouvent dans la première page. Les exemples pour les canaux 2 à 5 sont contenus dans la deuxième page.
Bien que les deux pages apparaissent l’une à côté de l’autre en haut de la figure, elles sont, en fait, contiguës uniquement dans la mémoire virtuelle du noyau. Étant donné que les pages contenant la mémoire tampon ne sont pas incohérentes dans la mémoire physique, un contrôleur DMA de diffusion/collecte, qui utilise des adresses physiques, doit spécifier les deux parties de la mémoire tampon sous forme de deux entrées distinctes dans sa file d’attente de transfert. Le pilote de port WavePci fractionne automatiquement la mémoire tampon en deux mappages physiques distincts à la limite de la page.
Même si l’exemple précédent est modifié pour aligner la mémoire tampon sur le début de la première page, le problème de fractionnement de l’image ne disparaît pas. La figure suivante illustre ce point. Dans ce cas, l’image 341 est fractionnée à la limite de la page, les exemples pour les canaux 0 et 1 se trouvant à nouveau dans la première page et les exemples pour les canaux 2 à 5 se trouvant dans la deuxième page.
Un appareil WavePci dont le contrôleur DMA de diffusion/collecte ne gère pas correctement les images audio fractionnées est limité dans les types de formats de données audio qu’il peut gérer, bien que des solutions de contournement logicielles puissent aider à atténuer certains défauts de conception matérielle. Pour plus d’informations, consultez Latence WavePci.