Partilhar via


Executando DMA no Windows de 64 bits

Adicionar suporte de endereçamento de 64 bits ao seu driver pode melhorar significativamente o desempenho geral do sistema. Isso é particularmente importante para drivers de dispositivo que executam acesso direto à memória (DMA). No Microsoft Windows de 64 bits, os drivers de dispositivo que executam DMA, mas não suportam endereçamento de 64 bits, são com buffer duplo, o que resulta em menor desempenho relativo.

Embora o buffer duplo geralmente tenha um impacto relativamente pequeno (pontos percentuais únicos) em sistemas de 8 GB, isso é suficiente para afetar tarefas intensivas de E/S, como a atividade do banco de dados. À medida que a quantidade de memória física aumenta, esse impacto negativo no desempenho também aumenta.

Para suportar DMA de 64 bits, os drivers devem observar as seguintes diretrizes:

  1. Use estruturas PHYSICAL_ADDRESS para cálculos de endereços físicos.

  2. Trate todo o endereço de 64 bits como um endereço físico válido. Por exemplo, os drivers não devem chamar MmGetPhysicalAddress num buffer bloqueado, descartar os 32 bits superiores e passar o endereço truncado a um adaptador de componente de 32 bits. Isso resulta em memória corrompida, E/S perdida e falha do sistema.

  3. Use as rotinas de dispersão/coleta de alto desempenho (GetScatterGatherList e PutScatterGatherList) que foram adicionadas no Windows 2000.

  4. Verifique o valor da variável de sistema global Mm64BitPhysicalAddress . Se for TRUE, o sistema suporta endereçamento físico de 64 bits.

  5. Defina o membro Dma64BitAddresses da estrutura DEVICE_DESCRIPTION como TRUE para indicar que seu driver suporta endereços DMA de 64 bits.

As rotinas DMA no Windows de 32 bits estão prontas para 64 bits. Se o driver de dispositivo usa essas rotinas corretamente, o código DMA deve funcionar sem modificação no Windows de 64 bits.