Memorizzazione nella cache della memoria registrata
I provider di servizi SAN possono memorizzare nella cache i buffer RDMA esposti per l'accesso locale o remoto per migliorare le prestazioni.
Memorizzazione nella cache dei buffer RDMA esposti per l'accesso locale
L'opzione Windows Sockets chiama la funzione di estensione WSPRegisterMemory del provider di servizi SAN per conto di un'applicazione per registrare tutti i buffer di dati che fungono da buffer RDMA locale in una chiamata alla funzione di estensione WSPRdmaRead o all'origine RDMA locale in una chiamata alla funzione di estensione WSPRdmaWrite . Nell'ambito di questo processo di registrazione, il provider di servizi SAN deve bloccare questi buffer in aree di memoria fisica e registrarle con la scheda di interfaccia di rete SAN. Entrambe queste operazioni sono a elevato utilizzo di risorse. Pertanto, il provider di servizi SAN deve usare la memorizzazione nella cache per ridurre il sovraccarico di queste registrazioni. Se il provider di servizi SAN usa la memorizzazione nella cache, le prestazioni delle applicazioni che riutilizzano i buffer per i trasferimenti di dati migliorano.
I provider di servizi SAN devono memorizzare nella cache e rilasciare buffer RDMA esposti per l'accesso locale, come descritto nell'elenco seguente:
Quando l'opzione chiama la funzione di estensione WSPDeregisterMemory per rilasciare un buffer, il provider di servizi SAN deve lasciare il buffer registrato con la scheda di interfaccia di rete SAN e bloccato in un'area di memoria fisica. Il provider di servizi SAN deve anche aggiungere il buffer a una cache di buffer registrati, nel caso in cui il buffer venga usato nuovamente in un'operazione RDMA successiva e il possesso sicuro del buffer, come descritto nell'elemento di elenco successivo.
Un provider di servizi SAN memorizza nella cache le registrazioni della memoria in base agli indirizzi virtuali. Quando il provider di servizi SAN memorizza nella cache la registrazione di un buffer, il driver proxy del provider di servizi SAN deve chiamare la funzione MmSecureVirtualMemory per proteggere il possesso del buffer registrato in modo che il sistema operativo noti il commutatore se il buffer viene rilasciato , ad esempio se un'applicazione chiama la funzione VirtualFree per rilasciare un intervallo di indirizzi virtuale al sistema operativo.
Quando l'opzione chiama successivamente WSPRegisterMemory per registrare un buffer, il provider di servizi SAN deve controllare la cache per determinare se il buffer è già registrato. Se il provider di servizi SAN trova il buffer nella cache, il provider di servizi SAN non deve eseguire ulteriori azioni di registrazione.
Prima che i mapping virtuali-fisici del buffer registrato cambino successivamente, il commutatore chiama ogni funzione di estensione WSPMemoryRegistrationCacheCallback del provider di servizi SAN. Ogni driver proxy del provider di servizi SAN, a sua volta, deve chiamare la funzione MmUnsecureVirtualMemory per rilasciare la proprietà del buffer. Inoltre, ogni provider di servizi SAN deve rimuovere il buffer dalla cache e deve rimuovere la registrazione del buffer dalla scheda di interfaccia di rete SAN.
Prima che la connessione tra un socket SAN locale e un peer remoto venga chiusa, il provider di servizi SAN deve rilasciare eventuali buffer memorizzati nella cache.
Nota Il driver proxy deve usare il meccanismo try/except intorno al codice che accede a un buffer in modalità utente protetto tramite una chiamata a MmSecureVirtualMemory per evitare arresti anomali del sistema operativo. Per altre informazioni su come un driver proxy protegge e rilascia i buffer, vedere Protezione e rilascio della proprietà degli indirizzi virtuali.
Memorizzazione nella cache dei buffer RDMA esposti per l'accesso remoto
L'opzione Windows Sockets chiama la funzione di estensione WSPRegisterRdmaMemory del provider di servizi SAN per registrare tutti i buffer di dati che fungono da destinazione RDMA remota di una chiamata WSPRdmaWrite o l'origine RDMA remota di una chiamata WSPRdmaRead remota. Ovvero, l'opzione espone questi buffer per l'accesso da un peer remoto. Al termine dei trasferimenti di dati da questi buffer, il commutatore chiama la funzione di estensione WSPDeregisterRdmaMemory del provider di servizi SAN per rilasciare questi buffer in modo che non siano più accessibili dal peer remoto.
I provider di servizi SAN devono memorizzare nella cache i buffer RDMA esposti per l'accesso remoto, come descritto nell'elenco seguente:
Quando il commutatore chiama WSPDeregisterRdmaMemory per rilasciare un buffer, il provider di servizi SAN deve lasciare il buffer bloccato in memoria fisica e registrato con la scheda di interfaccia di rete SAN. Il provider di servizi SAN deve anche aggiungere il buffer a una cache di buffer registrati, nel caso in cui il buffer venga usato di nuovo in un'operazione RDMA successiva. Tuttavia, il provider di servizi SAN deve intraprendere azioni appropriate per garantire che il peer remoto non possa più accedere al buffer. Nota Se il buffer può essere reso accessibile solo dal provider di servizi SAN rimuovendo la registrazione del buffer dalla scheda di interfaccia di rete SAN, il provider di servizi SAN deve farlo. Tuttavia, il provider di servizi SAN deve lasciare bloccato il buffer in un'area di memoria fisica. Questo scenario non offre le migliori prestazioni possibili, ma è migliore di nessuna memorizzazione nella cache.
Per memorizzare nella cache i buffer RDMA esposti per l'accesso remoto, il provider di servizi SAN e il relativo driver proxy devono usare le tecniche di memorizzazione nella cache, come descritto nell'elenco precedente per i buffer RDMA esposti per l'accesso locale.
Quando l'opzione chiama successivamente WSPRegisterRdmaMemory per registrare un buffer, il provider di servizi SAN deve controllare la cache per determinare se il buffer è già registrato. Se il provider di servizi SAN trova il buffer nella cache, il provider di servizi SAN deve semplicemente esporre il buffer per l'accesso remoto, non è necessaria un'ulteriore azione di registrazione. Tuttavia, se la registrazione del buffer è stata rimossa in precedenza dalla scheda di interfaccia di rete SAN, il provider di servizi SAN deve registrare di nuovo il buffer.
Per rilasciare buffer RDMA esposti per l'accesso remoto, il provider di servizi SAN e il relativo driver proxy devono usare le tecniche descritte nell'elenco precedente.