Zuweisung und Freigeben von Arbeitsspeicher für einen SAN-Proxytreiber

Der Proxytreiber muss den Zugriff auf Benutzerpuffer einrichten, damit der Windows Sockets-Switch Steuermeldungen übertragen und RDMA-Vorgänge ausführen kann. Um diese Art des Pufferzugriffs anzufordern, legt der Proxytreiber im Flags-Member seines Geräteobjekts ein Bit auf DO_DIRECT_IO fest. Der Proxytreiber muss auch Arbeitsspeicher zuordnen oder freigeben, der für die Nachrichtenübertragung und RDMA verwendet wird, wenn dies erforderlich ist. Wenn der Windows Sockets-Switch einen SAN-Dienstanbieter zum Registrieren oder Freigeben von Arbeitsspeicher anfordert, fordert der SAN-Dienstanbieter seinen Proxytreiber auf, physischen Arbeitsspeicher zuzuweisen oder freizugeben. Weitere Informationen zum Einrichten des Pufferzugriffs und zum Zuweisen und Freigeben von Arbeitsspeicher finden Sie unter Speicherverwaltung und Pufferverwaltung.

Zuweisung von wenig Arbeitsspeicher für RDMA

Ein Proxytreiber muss Arbeitsspeicher zuordnen, auf den für RDMA-Vorgänge zugegriffen werden kann. Der Proxytreiber kann auch auf einem System, das so konfiguriert ist, dass kein physischer Arbeitsspeicher unter 4 GB zugewiesen werden kann, für RDMA-Vorgänge zuweisen. (Dies wird als NOLOWMEM-Konfiguration bezeichnet.) Der Proxytreiber ruft entweder die Funktion MmAllocateContiguousMemorySpecifyCache oder seine eigene DMA AllocateCommonBuffer-Funktion auf, um wenig Arbeitsspeicher abzurufen.

Um einen Zeiger auf seine DMA AllocateCommonBuffer-Funktion abzurufen, führt der Proxytreiber die folgenden Schritte aus:

  1. Null initialisiert eine DEVICE_DESCRIPTION-Struktur und schreibt dann relevante Informationen für ihre SAN-NIC in diese Struktur.

  2. Ruft IoGetDmaAdapter auf, um einen Zeiger auf die DMA-Adapterstruktur für die SAN-NIC abzurufen. In diesem Aufruf übergibt der Treiber einen Zeiger an die ausgefüllte DEVICE_DESCRIPTION-Struktur. IoGetDmaAdapter gibt einen Zeiger auf eine DMA-Adapterstruktur zurück, die einen Zeiger auf eine DMA_OPERATIONS-Struktur enthält. DMA_OPERATIONS enthält Zeiger auf eine systemdefinierte Gruppe von DMA-Funktionen. Eine dieser Funktionen ist AllocateCommonBuffer, die einen physisch zusammenhängenden DMA-Puffer zuordnet.