Uso del protocollo di sessione
L'opzione Windows Sockets usa il protocollo di sessione per trasferire i dati tramite una connessione SAN. Se l'opzione trasferisce una piccola quantità di dati, trasferisce tali dati all'interno di un messaggio di controllo. Ogni messaggio di controllo è costituito da un'intestazione e da un payload facoltativo dei dati dell'applicazione. Se l'opzione trasferisce una grande quantità di dati, i dati vengono trasferiti tramite operazioni RDMA.
Questa sezione descrive come configurare ed eseguire un trasferimento dei dati.
Nota A seconda del comportamento delle applicazioni che caricano il commutatore, l'opzione ottimizza il protocollo di sessione per ridurre il sovraccarico necessario per il trasferimento dei dati dell'applicazione.
Questa sezione fornisce anche esempi di come il protocollo di sessione del commutatore esegue i trasferimenti di dati. Tuttavia, questi esempi non includono descrizioni definitive di queste operazioni.
Configurazione di un trasferimento dati
L'opzione alloca un pool di buffer dei messaggi di controllo per ogni socket connesso. L'opzione effettua quindi chiamate alla funzione WSPRegisterMemory del provider di servizi SAN per registrare tali buffer di messaggi in aree di memoria fisica. L'opzione usa parte del pool di buffer per inviare informazioni sul controllo del flusso a un peer remoto quando si chiama la funzione WSPSend di un provider di servizi SAN. L'opzione usa l'altra parte del pool per pubblicare buffer di messaggi per ricevere informazioni sul controllo del flusso da un peer remoto quando si chiama la funzione WSPRecv di un provider di servizi SAN. Dopo che l'opzione riceve i messaggi di controllo, li utilizza immediatamente. Dopo aver utilizzato i messaggi di controllo, il commutatore chiama la funzione WSPRecv del provider di servizi SAN e passa i buffer di ricezione per pubblicarli di nuovo in modo che possano ricevere messaggi di controllo aggiuntivi da un peer remoto.
Trasferimento dei dati dell'applicazione
Le dimensioni del trasferimento dei dati influiscono sul modo in cui l'opzione gestirà l'operazione di trasferimento dei dati.
Se un'applicazione richiede di inviare una piccola quantità di dati, il cambio trasferisce tali dati come descritto in Invio di dati urgenti su una SAN.
Se un'applicazione richiede di inviare una grande quantità di dati, l'opzione copia la parte iniziale dei dati in un buffer di messaggi di controllo utilizzato per l'invio. L'intestazione per questo messaggio di controllo contiene informazioni che specificano la quantità di dati dell'applicazione. L'opzione chiama quindi la funzione WSPSend del provider di servizi SAN per inviare questo messaggio di controllo al peer remoto del socket SAN.
Il modo in cui l'opzione completa il trasferimento dei dati dell'applicazione dipende dal fatto che il provider di servizi supporti la funzione WSPRdmaRead .
Trasferimento di dati a un provider che supporta la funzione WSPRdmaRead
La figura seguente illustra una panoramica del completamento del trasferimento dei dati dell'applicazione se il provider di servizi SAN nel peer remoto supporta una funzione WSPRdmaRead. La sequenza seguente descrive il trasferimento dei dati dell'applicazione in modo più dettagliato.
Per trasferire dati quando il peer remoto supporta WSPRdmaRead
- L'opzione locale deve chiamare la funzione WSPRegisterRdmaMemory del provider di servizi SAN per registrare la memoria RDMA per l'accesso in lettura. In questo caso, l'intestazione del controllo per il buffer dei messaggi identifica anche il descrittore per la memoria RDMA che contiene i dati rimanenti dell'applicazione.
- Il commutatore nel peer remoto chiama quindi WSPRdmaRead per trasferire i dati dell'applicazione dalla memoria RDMA per ricevere buffer che il commutatore nel peer remoto precedentemente registrato con le chiamate WSPRegisterMemory . Il provider di servizi SAN trasmette i dati memorizzati nel buffer in background. In questo modo, le applicazioni che non pubblicano più di un invio alla volta per pubblicare un'altra richiesta di invio mentre il provider di servizi SAN invia dati memorizzati nel buffer.
- L'opzione nel peer remoto chiama quindi WSPSend per inviare un messaggio di controllo all'opzione locale per indicare che il trasferimento è stato completato.
- L'opzione locale chiama la funzione WSPDeregisterRdmaMemory per rilasciare la memoria RDMA.
- L'opzione locale completa la richiesta di invio dell'applicazione. Se l'opzione non riesce a registrare la memoria per i buffer di dati dell'applicazione o se non è possibile allocare completamente la memoria temporanea, completa la richiesta di invio di un'applicazione con il codice di errore WSAENOBUFS .
Trasferimento dei dati a un provider che non supporta la funzione WSPRdmaRead
La figura seguente mostra una panoramica del modo in cui il commutatore completa il trasferimento dei dati dell'applicazione se il provider di servizi SAN nel peer remoto non supporta una funzione WSPRdmaRead . La sequenza seguente descrive il trasferimento dei dati dell'applicazione in modo più dettagliato.
Per trasferire dati quando il peer remoto non supporta WSPRdmaRead
- Il commutatore al peer remoto chiama WSPRegisterRdmaMemory per registrare la memoria RDMA per l'accesso in scrittura.
- L'opzione nel peer remoto chiama quindi WSPSend per inviare un messaggio di controllo all'opzione locale che indica la posizione della memoria RDMA a cui il commutatore locale può scrivere.
- L'opzione locale chiama la funzione WSPRdmaWrite per trasferire i dati dell'applicazione alla memoria RDMA. Il provider di servizi SAN trasmette i dati memorizzati nel buffer in background. In questo modo, le applicazioni che non pubblicano più di un invio alla volta per pubblicare un'altra richiesta di invio mentre il provider di servizi SAN invia dati memorizzati nel buffer.
- L'opzione locale chiama la funzione WSPGetOverlappedResult per ottenere i risultati del trasferimento. Per altre informazioni, vedere Completamento delle richieste di trasferimento dei dati.
- L'opzione locale chiama WSPSend per inviare un messaggio di controllo al peer remoto per indicare che il trasferimento è completo.
- Il commutatore al peer remoto chiama WSPDeregisterRdmaMemory per rilasciare la memoria RDMA.
- L'opzione locale completa la richiesta di invio dell'applicazione. Se l'opzione non riesce a registrare la memoria per i buffer di dati dell'applicazione o se non è possibile allocare memoria temporanea, completa la richiesta di invio di un'applicazione con il codice di errore WSAENOBUFS .