Requisiti hardware per i dispositivi WavePci

Quando si scelgono le funzionalità di una nuova progettazione hardware, i fornitori devono seguire questi principi generali:

  • Anziché tentare di spostare semplicemente l'elaborazione in hardware, i fornitori devono pesare il costo di ogni funzionalità rispetto all'impatto sulle prestazioni.

  • Quando si considera il valore potenziale di una funzionalità hardware, un fornitore deve valutare tale funzionalità in termini di impatto sul sistema nel suo complesso anziché concentrarsi strettamente su un particolare sottosistema, ad esempio audio.

  • Selezionando in modo insoscibile quali funzionalità accelerare nell'hardware, i fornitori possono alleviare il carico di lavoro della CPU e migliorare l'utilizzo della memoria, rendendo così più delle risorse del sistema disponibili per altre attività.

Storicamente, non tutti i progetti hardware audio hanno avuto esito positivo nel seguire questi principi.

Durante la riproduzione di contenuti audio o la combinazione di più flussi, alcuni driver audio WDM consumano in modo inutile un sacco di tempo cpu e larghezza di banda del bus. Tali carenze sono in genere il risultato di progetti hardware difettosi e implementazioni di driver inefficienti. I difetti di progettazione hardware possono anche impedire a un driver audio di gestire determinati formati di onda o richiedere soluzioni alternative che richiedono un intervento software.

Lo scopo del modello di dispositivo WaveCyclic è quello di soddisfare le limitazioni hardware dei dispositivi audio meno recenti. Le nuove progettazioni hardware devono essere completamente conformi a WavePci.

Un dispositivo WavePci che può eseguire una vera dispersione/raccolta DMA elimina la necessità della CPU di dedicare tempo alla copia dei dati audio tra i buffer. A differenza di WaveCyclic, WavePci non ha alcuna necessità intrinseca di copia dei dati, rendendolo il driver miniport preferito per dispositivi audio con accelerazione hardware o multistream. Un dispositivo WavePci ben progettato deve usare quasi nessuna risorsa CPU, rendendo possibile inviare grandi quantità di flussi audio (64 o più) all'hardware per l'elaborazione e la combinazione 3D.

Un dispositivo WavePci richiede un controller DMA master del bus che supporta i trasferimenti DMA a dispersione/raccolta. Le progettazioni hardware non devono applicare limiti arbitrari ai tipi di trasferimenti di dati che il controller DMA può gestire. Un dispositivo WavePci deve soddisfare i requisiti seguenti:

  • Il dispositivo deve essere un master del bus.

    Deve essere in grado di accedere autonomamente alla memoria del sistema senza intervento dal sistema operativo e senza usare le risorse DMA del sistema.

  • Il dispositivo deve essere in grado di gestire i trasferimenti di dati di lunghezza arbitraria.

    Deve gestire i mapping (vedere IPortWavePciStream::GetMapping) più grande di una pagina di memoria. Un dispositivo con una limitazione di trasferimento di 4 kilobyte, ad esempio, non soddisfa i requisiti completi per WavePci. Nelle CPU a 64 bit che supportano Microsoft Windows, la dimensione della pagina è di 8 kilobyte, che rende probabile che alcuni mapping siano superiori a 4 kilobyte di dimensioni. I trasferimenti di dati che superano i 32 kilobyte in un singolo mapping sono teoricamente possibili, a seconda della frammentazione della memoria fisica. All'altro estremo, è possibile eseguire un mapping di un byte.

  • Il dispositivo deve gestire i trasferimenti di dati verso o da qualsiasi posizione nella memoria di sistema.

    I trasferimenti di dati che straddle 32-kilobyte o più grandi limiti di potenza di due sono abbastanza probabile. Un computer può ora contenere più di 4 gigabyte di RAM e in tali sistemi, i mapping possono trovarsi più di 4 gigabyte in memoria fisica nel caso di una CPU a 64 bit o dell'estensione dell'indirizzo fisico x86 ( PAE). Per ottenere le migliori prestazioni in questi computer, i fornitori devono creare dispositivi che supportano l'indirizzamento a 64 bit. In caso contrario, è necessaria la copia dei dati nel software. La copia dei dati è stata storicamente necessaria per i dispositivi con indirizzamento a 24 bit nei sistemi con più di 16 megabyte di RAM. I dispositivi devono usare WaveCyclic anziché WavePci se non possono leggere o scrivere in qualsiasi punto della memoria fisica. Un driver può prendere questa decisione all'ora di avvio del dispositivo (vedere IRP_MN_START_DEVICE) dopo aver avuto la possibilità di determinare se il raggiungimento dell'indirizzo è sufficiente per accedere all'intervallo di indirizzi completo del bus di memoria di sistema.

  • Il dispositivo deve gestire i trasferimenti di dati con allineamento arbitrario.

    I mapping possono iniziare e terminare sui limiti di byte arbitrari in memoria. Un frame di dati audio può essere suddiviso tra mapping, con gli esempi per i primi canali alla fine del primo mapping e gli esempi per i canali rimanenti nel secondo mapping. Per un esempio, vedere Filtri onda. Per alcune dimensioni di esempio, anche un contenitore di esempio può essere suddiviso tra mapping. Se il dispositivo richiede che i trasferimenti siano in base ai limiti della riga di cache o se il dispositivo richiede che i trasferimenti siano strettamente allineati ai limiti del frame audio (ad esempio, presupponendo che la dimensione di trasferimento si divide in modo uniforme in quattro, nel caso stereo a 16 bit), questo dispositivo non è adeguato per la conformità Completa WavePci. Si noti che un componente hardware non conforme può essere esposto come dispositivo WavePci limitando gli intervalli di dati o i formati esposti dal driver (ad esempio, solo alcune profondità bit o solo determinate configurazioni del canale).

Per quanto riguarda l'ultimo punto nell'elenco precedente, il motore DMA di dispersione/raccolta di un dispositivo WavePci deve gestire i buffer che straddle memory page limiti. Ad esempio, un buffer contenente 10 millisecondi vale la pena di esempi audio PCM a 16 bit per un flusso a 48 kHz, un flusso di 5,1 canali ha le dimensioni seguenti:

(6 esempi/frame)*(2 byte/sample)*(48K frame/second)*(10 millisecondi) = 5760 byte

Supera le dimensioni della pagina di memoria (4096 byte), ovvero il buffer contiene uno o due limiti di pagina, a seconda della posizione in memoria. Il buffer contiene un numero integrale (480) di fotogrammi di dati audio, ma uno o due di questi fotogrammi potrebbero straddle page limiti.

Per questo motivo, l'hardware DMA a dispersione/raccolta per un dispositivo WavePci deve essere progettato per gestire fotogrammi audio (ad esempio frame 197 nella figura seguente) suddivisi tra due pagine fisicamente non non contigue in memoria.

Diagramma che illustra un buffer audio con un offset dall'inizio di una pagina di memoria.

Nella parte superiore della figura precedente è un buffer di 5760 byte che straddles il limite tra due pagine. In questo esempio il buffer inizia a un offset di 1728 byte dall'inizio della prima pagina, che allinea l'inizio del buffer a un limite di 64 byte in memoria. Si supponga che ogni fotogramma audio occupa 12 byte e contenga sei canali. La prima pagina contiene tutti i fotogrammi da 0 a 196, ma solo i primi quattro byte di frame 197.

Nella parte inferiore della figura è una visualizzazione dettagliata del frame audio 197, che mostra che solo gli esempi per i canali 0 e 1 rientrano nella prima pagina. Gli esempi per i canali da 2 a 5 sono contenuti nella seconda pagina.

Anche se le due pagine vengono visualizzate accanto all'altra nella parte superiore della figura, sono, infatti, contigue solo nella memoria virtuale del kernel. Poiché le pagine contenenti il buffer sono non contigue nella memoria fisica, un controller DMA a dispersione/raccolta, che usa indirizzi fisici, deve specificare le due parti del buffer come due voci separate nella coda di trasferimento. Il driver di porta WavePci suddivide automaticamente il buffer in due mapping fisici separati al limite della pagina.

Anche se l'esempio precedente viene modificato per allineare il buffer all'inizio della prima pagina, il problema split-frame non scompare. La figura seguente illustra questo punto. In questo caso, frame 341 viene diviso al limite della pagina con gli esempi per i canali 0 e 1 che rientrano di nuovo all'interno della prima pagina e gli esempi per i canali da 2 a 5 situati nella seconda pagina.

Diagramma che illustra un buffer audio allineato all'inizio di una pagina di memoria.

Un dispositivo WavePci il cui controller DMA a dispersione/raccolta non gestisce correttamente i fotogrammi audio suddivisi è limitato nei tipi di formati di dati audio che può gestire, anche se le soluzioni alternative software potrebbero aiutare ad alleviare alcuni difetti di progettazione hardware. Per altre informazioni, vedere WavePci Latency.