Esecuzione di DMA in Windows a 64 bit

L'aggiunta del supporto per l'indirizzamento a 64 bit al driver può migliorare significativamente le prestazioni complessive del sistema. Ciò è particolarmente importante per i driver di dispositivo che eseguono l'accesso diretto alla memoria (DMA). In Microsoft Windows a 64 bit, i driver di dispositivo che eseguono DMA, ma non supportano l'indirizzamento a 64 bit, vengono memorizzati nel doppio buffer, con prestazioni relative inferiori.

Sebbene il doppio buffering abbia in genere un impatto relativamente ridotto (punti percentuali singoli) su sistemi da 8 GB, ciò è sufficiente per influire sulle attività a elevato utilizzo di I/O, ad esempio l'attività del database. Man mano che aumenta la quantità di memoria fisica, questo impatto negativo sulle prestazioni aumenta.

Per supportare DMA a 64 bit, i driver devono rispettare le linee guida seguenti:

  1. Usare le strutture PHYSICAL_ADDRESS per i calcoli degli indirizzi fisici.

  2. Considerare l'intero indirizzo a 64 bit come indirizzo fisico valido. Ad esempio, i driver non devono chiamare MmGetPhysicalAddress in un buffer bloccato, rimuovere i 32 bit elevati e passare l'indirizzo troncato a una scheda del componente a 32 bit. Ciò comporta la perdita di memoria, la perdita di I/O e l'errore di sistema.

  3. Usare le routine a dispersione/raccolta a prestazioni elevate (GetScatterGatherList e PutScatterGatherList) aggiunte in Windows 2000.

  4. Controllare il valore della variabile di sistema globale Mm64BitPhysicalAddress . Se è TRUE, il sistema supporta l'indirizzamento fisico a 64 bit.

  5. Impostare il membro Dma64BitAddresses della struttura DEVICE_DESCRIPTIONsu TRUE per indicare che il driver supporta indirizzi DMA a 64 bit.

Le routine DMA in Windows a 32 bit sono pronte a 64 bit. Se il driver di dispositivo usa correttamente queste routine, il codice DMA dovrebbe funzionare senza modifiche in Windows a 64 bit.