Compartilhar via


Requisitos de hardware para dispositivos WavePci

Ao escolher os recursos de um novo design de hardware, os fornecedores devem seguir estes princípios gerais:

  • Em vez de tentar simplesmente mover todo o processamento para hardware, os fornecedores devem pesar o custo de cada recurso em relação ao seu impacto no desempenho.

  • Ao considerar o valor potencial de um recurso de hardware, um fornecedor deve avaliar esse recurso em termos de seu impacto no sistema como um todo, em vez de se concentrar estreitamente em um subsistema específico, como áudio.

  • Ao selecionar criteriosamente quais recursos acelerar no hardware, os fornecedores podem aliviar a carga de trabalho da CPU e melhorar o uso da memória, tornando assim mais recursos do sistema disponíveis para outras tarefas.

Historicamente, nem todos os designs de hardware de áudio foram bem-sucedidos em seguir esses princípios.

Ao reproduzir conteúdo de áudio ou misturar vários fluxos, alguns drivers de áudio WDM consomem desnecessariamente muito tempo de CPU e largura de banda do barramento. Essas deficiências geralmente são resultado de designs de hardware falhos e implementações de driver ineficientes. As falhas de design de hardware também podem impedir que um driver de áudio manifique determinados formatos de onda ou exija soluções alternativas que exijam intervenção de software.

A finalidade do modelo de dispositivo WaveCyclic é acomodar as limitações de hardware de dispositivos de áudio mais antigos. Novos designs de hardware devem estar totalmente em conformidade com o WavePci.

Um dispositivo WavePci que pode executar o DMA de dispersão/coleta verdadeiro elimina a necessidade de a CPU gastar tempo copiando dados de áudio entre buffers. Ao contrário de WaveCyclic, WavePci não tem necessidade inerente de cópia de dados, tornando-o o driver de miniporto preferido para dispositivos de áudio multistream ou acelerados por hardware. Um dispositivo WavePci bem projetado deve consumir quase nenhum recurso de CPU, tornando possível enviar um grande número de fluxos de áudio (64 ou mais) para o hardware para processamento e combinação 3D.

Um dispositivo WavePci requer um controlador DMA master de barramento que dá suporte a transferências de DMA de dispersão/coleta. Os designs de hardware não devem colocar limites arbitrários nos tipos de transferências de dados que o controlador de DMA pode lidar. Um dispositivo WavePci deve atender aos seguintes requisitos:

  • O dispositivo deve ser um master de barramento.

    Ele deve ser capaz de acessar a memória do sistema de forma autônoma sem intervenção do sistema operacional e sem usar recursos de DMA do sistema.

  • O dispositivo deve ser capaz de lidar com transferências de dados de comprimento arbitrário.

    Ele deve lidar com mapeamentos (consulte IPortWavePciStream::GetMapping) maiores que uma página de memória. Um dispositivo com uma limitação de transferência de 4 quilobytes, por exemplo, não atende aos requisitos completos do WavePci. Em CPUs de 64 bits que dão suporte ao Microsoft Windows, o tamanho da página é de 8 quilobytes, o que torna provável que alguns mapeamentos sejam maiores que 4 quilobytes de tamanho. Transferências de dados que excedem 32 quilobytes em um único mapeamento são teoricamente possíveis, dependendo da fragmentação de memória física. No outro extremo, um tamanho de mapeamento de um byte é possível.

  • O dispositivo deve lidar com transferências de dados de ou para qualquer local na memória do sistema.

    Transferências de dados que ultrapassam 32 quilobytes ou maiores limites de potência de dois são bastante prováveis. Um computador agora pode conter mais de 4 gigabytes de RAM e, nesses sistemas, os mapeamentos podem ser localizados com mais de 4 gigabytes na memória física no caso de uma CPU de 64 bits ou da PAE (extensão de endereço físico x86). Para obter o melhor desempenho nesses computadores, os fornecedores devem criar dispositivos que dão suporte a endereçamento de 64 bits. Caso contrário, a cópia de dados no software será necessária. A cópia de dados tem sido historicamente necessária para dispositivos com endereçamento de 24 bits em sistemas com mais de 16 megabytes de RAM. Os dispositivos devem usar WaveCyclic em vez de WavePci se não puderem ler ou gravar em qualquer lugar na memória física. Um driver pode tomar essa decisão no momento da inicialização do dispositivo (consulte IRP_MN_START_DEVICE) depois de ter tido a chance de determinar se seu alcance de endereço é suficiente para acessar o intervalo de endereços completo do barramento de memória do sistema.

  • O dispositivo deve lidar com transferências de dados com alinhamento arbitrário.

    Os mapeamentos podem começar e terminar em limites arbitrários de bytes na memória. Um quadro de dados de áudio pode ser dividido entre mapeamentos, com os exemplos dos primeiros canais no final do primeiro mapeamento e os exemplos para os canais restantes no segundo mapeamento. Para obter um exemplo, consulte Filtros de onda. Para alguns tamanhos de exemplo, até mesmo um contêiner de exemplo pode ser dividido entre mapeamentos. Se o dispositivo exigir que as transferências devem estar nos limites da linha de cache ou se o dispositivo exigir que as transferências estejam estritamente alinhadas aos limites de quadro de áudio (por exemplo, supondo que o tamanho da transferência se divida uniformemente em quatro, no caso estéreo de 16 bits), esse dispositivo não é adequado para conformidade completa do WavePci. Observe que uma parte não compatível do hardware pode ser exposta como um dispositivo WavePci limitando os intervalos de dados ou formatos que o driver expõe (por exemplo, apenas determinadas profundidades de bit ou apenas determinadas configurações de canal).

Em relação ao último ponto da lista anterior, o mecanismo de DMA de dispersão/coleta de um dispositivo WavePci deve lidar com buffers que ultrapassam os limites da página de memória. Por exemplo, um buffer que contém 10 milissegundos de amostras de áudio PCM de 16 bits para um fluxo de onda de 48 kHz e 5,1 canais tem o seguinte tamanho:

(6 exemplos/quadro)*(2 bytes/amostra)*(quadros de 48K/segundo)*(10 milissegundos) = 5760 bytes

Isso excede o tamanho da página de memória (4096 bytes), o que significa que o buffer contém um ou dois limites de página, dependendo de como ele é posicionado na memória. O buffer contém um número integral (480) de quadros de dados de áudio, mas um ou dois desses quadros podem ultrapassar os limites da página.

Por esse motivo, o hardware de DMA de dispersão/coleta para um dispositivo WavePci deve ser projetado para manipular quadros de áudio (como o quadro 197 na figura a seguir) divididos entre duas páginas fisicamente não contíguas na memória.

Diagrama ilustrando um buffer de áudio com um deslocamento desde o início de uma página de memória.

Na parte superior da figura anterior está um buffer de 5760 bytes que atravessa o limite entre duas páginas. Neste exemplo, o buffer começa em um deslocamento de 1728 bytes desde o início da primeira página, que alinha o início do buffer a um limite de 64 bytes na memória. Suponha que cada quadro de áudio ocupe 12 bytes e contenha seis canais. A primeira página contém todos os quadros de 0 a 196, mas apenas os quatro primeiros bytes do quadro 197.

Na parte inferior da figura está uma exibição detalhada do quadro de áudio 197, que mostra que apenas os exemplos de canais 0 e 1 se enquadram na primeira página. Os exemplos de canais de 2 a 5 estão contidos na segunda página.

Embora as duas páginas apareçam ao lado uma da outra na parte superior da figura, elas são, de fato, contíguas apenas na memória virtual do kernel. Como as páginas que contêm o buffer não são contíguas na memória física, um controlador de DMA de dispersão/coleta, que usa endereços físicos, deve especificar as duas partes do buffer como duas entradas separadas em sua fila de transferência. O driver de porta WavePci divide automaticamente o buffer em dois mapeamentos físicos separados no limite da página.

Mesmo que o exemplo anterior seja alterado para alinhar o buffer com o início da primeira página, o problema de quadro dividido não desaparecerá. A figura a seguir demonstra esse ponto. Nesse caso, o quadro 341 é dividido no limite da página com os exemplos de canais 0 e 1 novamente caindo na primeira página e os exemplos de canais 2 a 5 localizados na segunda página.

Diagrama ilustrando um buffer de áudio alinhado ao início de uma página de memória.

Um dispositivo WavePci cujo controlador de DMA de dispersão/coleta não manipula corretamente quadros de áudio divididos é limitado nos tipos de formatos de dados de áudio que ele pode lidar, embora soluções alternativas de software possam ajudar a aliviar algumas falhas de design de hardware. Para obter mais informações, consulte Latência WavePci.