Compartir a través de


Realización de DMA en Windows de 64 bits

Agregar compatibilidad con direccionamiento de 64 bits al controlador puede mejorar significativamente el rendimiento general del sistema. Esto es especialmente importante para los controladores de dispositivos que realizan acceso directo a la memoria (DMA). En Microsoft Windows de 64 bits, los controladores de dispositivo que realizan DMA pero no admiten el direccionamiento de 64 bits se almacenan en búfer doble, lo que da como resultado un rendimiento relativo inferior.

Aunque el almacenamiento en búfer doble suele tener un impacto relativamente pequeño (puntos de porcentaje único) en sistemas de 8 GB, esto es suficiente para afectar a las tareas de E/S intensivas, como la actividad de base de datos. A medida que aumenta la cantidad de memoria física, este impacto negativo en el rendimiento también aumenta.

Para admitir DMA de 64 bits, los controladores deben observar las siguientes directrices:

  1. Use estructuras de PHYSICAL_ADDRESS para los cálculos de direcciones físicas.

  2. Trate toda la dirección de 64 bits como una dirección física válida. Por ejemplo, los controladores no deben llamar a MmGetPhysicalAddress en un búfer bloqueado, descartar los 32 bits altos y pasar la dirección truncada a un adaptador de componente de 32 bits. Esto da como resultado un error en la memoria dañada, la E/S perdida y el sistema.

  3. Usa las rutinas de dispersión y recopilación de alto rendimiento (GetScatterGatherList y PutScatterGatherList) que se agregaron en Windows 2000.

  4. Compruebe el valor de la variable del sistema global Mm64BitPhysicalAddress . Si es TRUE, el sistema admite el direccionamiento físico de 64 bits.

  5. Establezca el miembro Dma64BitAddresses de la estructura DEVICE_DESCRIPTION en TRUE para indicar que el controlador admite direcciones DMA de 64 bits.

Las rutinas DMA de Windows de 32 bits están listas para 64 bits. Si el controlador de dispositivo usa estas rutinas correctamente, el código DMA debe funcionar sin modificaciones en Windows de 64 bits.