Mise en cache de la mémoire inscrite
Les fournisseurs de services SAN peuvent mettre en cache les mémoires tampons RDMA exposées pour un accès local ou à distance afin d’améliorer les performances.
Mise en cache des mémoires tampons RDMA exposées pour l’accès local
Le commutateur Windows Sockets appelle la fonction d’extension WSPRegisterMemory d’un fournisseur de services SAN pour le compte d’une application pour inscrire toutes les mémoires tampons de données qui servent de mémoire tampon RDMA de réception locale dans un appel à la fonction d’extension WSPRdmaRead ou de la source RDMA locale dans un appel à la fonction d’extension WSPRdmaWrite . Dans le cadre de ce processus d’inscription, le fournisseur de services SAN doit verrouiller ces mémoires tampons dans des régions de mémoire physique et les inscrire auprès de la carte réseau SAN. Ces deux opérations sont gourmandes en ressources. Par conséquent, le fournisseur de services SAN doit utiliser la mise en cache pour réduire la surcharge de ces inscriptions. Si le fournisseur de services SAN utilise la mise en cache, les performances des applications qui réutilisent des tampons pour les transferts de données s’améliorent.
Les fournisseurs de services SAN doivent mettre en cache et libérer les mémoires tampons RDMA qui sont exposées pour l’accès local, comme décrit dans la liste suivante :
Lorsque le commutateur appelle la fonction d’extension WSPDeregisterMemory pour libérer une mémoire tampon, le fournisseur de services SAN doit laisser la mémoire tampon inscrite avec la carte réseau SAN et verrouillée dans une région de mémoire physique. Le fournisseur de services SAN doit également ajouter la mémoire tampon à un cache de mémoires tampons inscrites, au cas où la mémoire tampon est à nouveau utilisée dans une opération RDMA ultérieure, et sécuriser la possession de la mémoire tampon, comme décrit dans l’élément de liste suivant.
Un fournisseur de services SAN met en cache les inscriptions de mémoire en fonction des adresses virtuelles. Lorsque le fournisseur de services SAN met en cache l’inscription d’une mémoire tampon, le pilote proxy du fournisseur de services SAN doit appeler la fonction MmSecureVirtualMemory pour sécuriser la possession de cette mémoire tampon inscrite afin que le système d’exploitation avertit le commutateur si la mémoire tampon est libérée (par exemple, si une application appelle la fonction VirtualFree pour libérer une plage d’adresses virtuelle dans le système d’exploitation).
Lorsque le commutateur appelle ensuite WSPRegisterMemory pour inscrire une mémoire tampon, le fournisseur de services SAN doit case activée son cache pour déterminer si la mémoire tampon est déjà inscrite. Si le fournisseur de services SAN trouve la mémoire tampon dans son cache, il ne doit pas effectuer d’autre action d’inscription.
Avant que les mappages de la mémoire tampon inscrite ne changent par la suite, le commutateur appelle la fonction d’extension WSPMemoryRegistrationCacheCallback de chaque fournisseur de services SAN. Le pilote proxy de chaque fournisseur de services SAN, à son tour, doit appeler la fonction MmUnsecureVirtualMemory pour libérer la propriété de la mémoire tampon. En outre, chaque fournisseur de services SAN doit supprimer la mémoire tampon de son cache et supprimer l’inscription de la mémoire tampon de la carte réseau SAN.
Avant la fermeture de la connexion entre un socket SAN local et un homologue distant, le fournisseur de services SAN doit libérer toutes les mémoires tampons mises en cache.
Note Le pilote proxy doit utiliser le mécanisme try/except autour du code qui accède à une mémoire tampon en mode utilisateur qui a été sécurisée par un appel à MmSecureVirtualMemory pour éviter les incidents du système d’exploitation. Pour plus d’informations sur la façon dont un pilote proxy sécurise et libère les mémoires tampons, consultez Sécurisation et libération de la propriété des adresses virtuelles.
Mise en cache des mémoires tampons RDMA exposées pour l’accès à distance
Le commutateur Windows Sockets appelle la fonction d’extension WSPRegisterRdmaMemory d’un fournisseur de services SAN pour inscrire toutes les mémoires tampons de données qui servent de cible RDMA distante d’un appel WSPRdmaWrite distant ou de la source RDMA distante d’un appel WSPRdmaRead distant. Autrement dit, le commutateur expose ces mémoires tampons pour l’accès par un homologue distant. Une fois les transferts de données à partir de ces mémoires tampons terminés, le commutateur appelle la fonction d’extension WSPDeregisterRdmaMemory du fournisseur de services SAN pour libérer ces mémoires tampons afin qu’elles ne soient plus accessibles à partir de l’homologue distant.
Les fournisseurs de services SAN doivent mettre en cache les mémoires tampons RDMA exposées pour l’accès à distance, comme décrit dans la liste suivante :
Lorsque le commutateur appelle WSPDeregisterRdmaMemory pour libérer une mémoire tampon, le fournisseur de services SAN doit laisser la mémoire tampon verrouillée dans la mémoire physique et inscrite auprès de la carte réseau SAN. Le fournisseur de services SAN doit également ajouter la mémoire tampon à un cache de mémoires tampons inscrites, au cas où la mémoire tampon est à nouveau utilisée dans une opération RDMA ultérieure. Toutefois, le fournisseur de services SAN doit prendre les mesures appropriées pour s’assurer que l’homologue distant ne peut plus accéder à la mémoire tampon. Note Si la mémoire tampon ne peut être rendue inaccessible que par le fournisseur de services SAN supprimant l’inscription de la mémoire tampon de la carte réseau SAN, le fournisseur de services SAN doit le faire. Toutefois, le fournisseur de services SAN doit laisser la mémoire tampon verrouillée dans une région de mémoire physique. Ce scénario n’offre pas les meilleures performances possibles, mais est préférable à l’absence de mise en cache.
Pour mettre en cache les mémoires tampons RDMA exposées pour l’accès à distance, le fournisseur de services SAN et son pilote proxy doivent utiliser les techniques de mise en cache décrites dans la liste précédente pour les mémoires tampons RDMA exposées pour l’accès local.
Lorsque le commutateur appelle ensuite WSPRegisterRdmaMemory pour inscrire une mémoire tampon, le fournisseur de services SAN doit case activée son cache pour déterminer si la mémoire tampon est déjà inscrite. Si le fournisseur de services SAN trouve la mémoire tampon dans son cache, le fournisseur de services SAN doit simplement exposer la mémoire tampon pour l’accès à distance, aucune autre action d’inscription n’est nécessaire. Toutefois, si l’inscription de la mémoire tampon a été précédemment supprimée de la carte réseau SAN, le fournisseur de services SAN doit réinscrire la mémoire tampon.
Pour libérer les mémoires tampons RDMA exposées pour l’accès à distance, le fournisseur de services SAN et son pilote proxy doivent utiliser les techniques décrites dans la liste précédente.