Allocation et libération de mémoire pour un pilote proxy SAN
Le pilote proxy doit configurer l’accès aux mémoires tampons utilisateur afin que le commutateur Sockets Windows puisse transférer des messages de contrôle et effectuer des opérations RDMA. Pour demander ce type d’accès à la mémoire tampon, le pilote proxy définit un bit dans le membre Flags de son objet d’appareil pour DO_DIRECT_IO. Le pilote proxy doit également allouer ou libérer la mémoire utilisée pour le transfert de messages et RDMA chaque fois que vous y êtes invité. Lorsque le commutateur Windows Sockets demande à un fournisseur de services SAN d’inscrire ou de libérer de la mémoire, le fournisseur de services SAN demande à son pilote proxy d’allouer ou de libérer de la mémoire physique. Pour plus d’informations sur la configuration de l’accès à la mémoire tampon et l’allocation et la libération de mémoire, consultez Gestion de la mémoire et gestion des mémoires tampons.
Allocation de mémoire insuffisante pour RDMA
Un pilote proxy doit allouer de la mémoire accessible pour les opérations RDMA. Le pilote proxy peut allouer une mémoire insuffisante pour les opérations RDMA, même sur un système configuré afin qu’aucune mémoire physique inférieure à 4 Go ne puisse être allouée. (Il s’agit d’une configuration NOLOWMEM.) Le pilote proxy appelle la fonction MmAllocateContiguousMemorySpecifyCache ou sa propre fonction DMA AllocateCommonBuffer pour récupérer la mémoire insuffisante.
Pour récupérer un pointeur vers sa fonction AllocateCommonBuffer DMA, le pilote proxy effectue les étapes suivantes :
Zero-initialise une structure DEVICE_DESCRIPTION , puis écrit les informations pertinentes pour sa carte réseau SAN dans cette structure.
Appelle IoGetDmaAdapter pour récupérer un pointeur vers la structure de l’adaptateur DMA pour sa carte réseau SAN. Dans cet appel, le pilote passe un pointeur vers la structure de DEVICE_DESCRIPTION renseignée. IoGetDmaAdapter retourne un pointeur vers une structure d’adaptateur DMA qui contient un pointeur vers une structure DMA_OPERATIONS . DMA_OPERATIONS contient des pointeurs vers un ensemble défini par le système de fonctions DMA. L’une de ces fonctions est AllocateCommonBuffer, qui alloue une mémoire tampon DMA contiguë physiquement.