Delen via


DMA uitvoeren in 64-bits Windows

Door ondersteuning voor 64-bits adressering aan uw stuurprogramma toe te voegen, kunnen de algehele systeemprestaties aanzienlijk worden verbeterd. Dit is met name belangrijk voor apparaatstuurprogramma's die directe geheugentoegang (DMA) uitvoeren. In 64-bits Microsoft Windows worden apparaatstuurprogramma's die DMA uitvoeren, maar geen 64-bits adressering ondersteunen, gedubbeld in de buffer, wat resulteert in lagere relatieve prestaties.

Hoewel dubbele buffering meestal een relatief kleine impact heeft (één percentage punten) op 8 GB-systemen, is dit voldoende om I/O-intensieve taken, zoals databaseactiviteit, te beïnvloeden. Naarmate de hoeveelheid fysiek geheugen toeneemt, neemt deze negatieve invloed ook op de prestaties toe.

Stuurprogramma's moeten de volgende richtlijnen volgen om 64-bits DMA te ondersteunen:

  1. Gebruik PHYSICAL_ADDRESS structuren voor fysieke adresberekeningen.

  2. Behandel het hele 64-bits adres als een geldig fysiek adres. Stuurprogramma's mogen bijvoorbeeld MmGetPhysicalAddress niet aanroepen op een vergrendelde buffer, de hoge 32 bits negeren en het afgekapte adres doorgeven aan een 32-bits componentadapter. Dit resulteert in beschadigd geheugen, verloren I/O en systeemfouten.

  3. Gebruik de high-performance spreidings- en verzamelroutines (GetScatterGatherList en PutScatterGatherList) die zijn toegevoegd in Windows 2000.

  4. Controleer de waarde van de globale systeemvariabele Mm64BitPhysicalAddress . Als het WAAR is, ondersteunt het systeem 64-bits fysieke adressering.

  5. Stel het Dma64BitAddresses-lid van de DEVICE_DESCRIPTION-structuur in op TRUE om aan te geven dat uw stuurprogramma ondersteuning biedt voor 64-bits DMA-adressen.

De DMA-routines in 32-bit Windows zijn 64-bit-gereed. Als uw apparaatstuurprogramma deze routines correct gebruikt, moet uw DMA-code werken zonder aanpassingen in 64-bits Windows.