Condividi tramite


Esecuzione di DMA in Windows a 64 bit

L'aggiunta del supporto di 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 sono a doppio buffer, con prestazioni relative inferiori.

Anche se il doppio buffering ha in genere un impatto relativamente ridotto (punti percentuali singoli) su sistemi da 8 GB, questo è sufficiente per influire sulle attività a elevato utilizzo di I/O, ad esempio l'attività del database. Con l'aumentare della quantità di memoria fisica, aumenta anche questo impatto negativo sulle prestazioni.

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

  1. Usare strutture di 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 su un buffer bloccato, rimuovere i 32 bit elevati e passare l'indirizzo troncato a un adattatore di componenti a 32 bit. Ciò causa un danneggiamento della memoria, la perdita di I/O e l'errore di sistema.

  3. Usare le routine a dispersione/raccolta ad alte prestazioni (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 Dma64BitAddresses membro della struttura DEVICE_DESCRIPTION su TRUE per indicare che il driver supporta gli indirizzi DMA a 64 bit.

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