Verwenden des Sitzungsprotokolls
Der Windows Sockets-Switch verwendet sein Sitzungsprotokoll, um Daten über eine SAN-Verbindung zu übertragen. Wenn der Switch eine kleine Datenmenge überträgt, überträgt er diese Daten innerhalb einer Steuernachricht. Jede Steuernachricht besteht aus einem Header und einer optionalen Nutzlast von Anwendungsdaten. Wenn der Switch eine große Menge an Daten überträgt, werden diese Daten mithilfe von RDMA-Vorgängen übertragen.
In diesem Abschnitt wird beschrieben, wie Sie eine Datenübertragung einrichten und durchführen.
Hinweis Abhängig vom Verhalten von Anwendungen, die den Switch laden, optimiert der Switch sein Sitzungsprotokoll, um den Mehraufwand für die Übertragung von Anwendungsdaten zu reduzieren.
Dieser Abschnitt enthält auch Beispiele dafür, wie das Sitzungsprotokoll des Switches Datenübertragungen durchführt. Diese Beispiele enthalten jedoch keine endgültigen Beschreibungen dieser Vorgänge.
Einrichten einer Datenübertragung
Der Switch weist jedem verbundenen Socket einen Pool von Kontrollmeldungspuffern zu. Der Switch führt dann Aufrufe an die WSPRegisterMemory-Funktion des SAN-Dienstanbieters aus, um diese Nachrichtenpuffer in Regionen des physischen Arbeitsspeichers zu registrieren. Der Switch verwendet einen Teil des Pufferpools, um Beim Aufrufen der WSPSend-Funktion eines SAN-Dienstanbieters Flusssteuerungsinformationen an einen Remotepeer zu senden. Der Switch verwendet den anderen Teil des Pools, um Nachrichtenpuffer zu posten, um Flusssteuerungsinformationen von einem Remotepeer zu empfangen, wenn die WSPRecv-Funktion eines SAN-Dienstanbieters aufgerufen wird. Nachdem der Switch Steuermeldungen empfangen hat, nutzt er diese sofort. Nach dem Verbrauch von Steuernachrichten ruft der Switch die WSPRecv-Funktion des SAN-Dienstanbieters auf und übergibt Empfangspuffer, um sie erneut zu posten, damit sie zusätzliche Steuernachrichten von einem Remotepeer empfangen können.
Übertragen von Anwendungsdaten
Die Größe der Datenübertragung wirkt sich auf die Verarbeitung des Datenübertragungsvorgangs durch den Switch aus.
Wenn eine Anwendung das Senden einer kleinen Datenmenge anfordert, überträgt der Switch diese Daten, wie unter Senden dringender Daten in einem SAN beschrieben.
Wenn eine Anwendung das Senden einer großen Datenmenge anfordert, kopiert der Switch den anfänglichen Teil der Daten in einen Kontrollmeldungspuffer, der zum Senden verwendet wird. Der Header für diese Steuerelementnachricht enthält Informationen, die die Menge der Anwendungsdaten angibt. Der Switch ruft dann die WSPSend-Funktion des SAN-Dienstanbieters auf, um diese Steuernachricht an den Remotepeer des SAN-Sockets zu senden.
Wie der Switch die Übertragung von Anwendungsdaten abschließt, hängt davon ab, ob der Dienstanbieter die WSPRdmaRead-Funktion unterstützt.
Datenübertragung an einen Anbieter, der die WSPRdmaRead-Funktion unterstützt
Die folgende Abbildung zeigt eine Übersicht darüber, wie der Switch die Übertragung von Anwendungsdaten abschließt, wenn der SAN-Dienstanbieter auf dem Remotepeer eine WSPRdmaRead-Funktion unterstützt. In der folgenden Sequenz wird die Übertragung von Anwendungsdaten ausführlicher beschrieben.
So übertragen Sie Daten, wenn der Remotepeer WSPRdmaRead unterstützt
- Der lokale Switch muss die WSPRegisterRdmaMemory-Funktion des SAN-Dienstanbieters aufrufen, um den RDMA-Speicher für den Lesezugriff zu registrieren. In diesem Fall identifiziert der Steuerelementheader für den Nachrichtenpuffer auch den Deskriptor für den RDMA-Arbeitsspeicher, der die verbleibenden Daten der Anwendung enthält.
- Der Switch auf dem Remotepeer ruft dann WSPRdmaRead auf, um Anwendungsdaten aus dem RDMA-Arbeitsspeicher an Puffer zu übertragen, die der Switch beim Remotepeer zuvor bei WSPRegisterMemory-Aufrufen registriert hat. Der SAN-Dienstanbieter überträgt die gepufferten Daten im Hintergrund. Auf diese Weise können Anwendungen, die nicht mehr als einen Sendevorgang gleichzeitig posten, eine andere Sendeanforderung senden, während der SAN-Dienstanbieter gepufferte Daten sendet.
- Der Switch am Remotepeer ruft dann WSPSend auf, um eine Steuernachricht an den lokalen Switch zu senden, um anzugeben, dass die Übertragung abgeschlossen ist.
- Der lokale Switch ruft die WSPDeregisterRdmaMemory-Funktion auf, um RDMA-Arbeitsspeicher freizugeben.
- Der lokale Switch schließt die Sendeanforderung der Anwendung ab. Wenn der Switch keinen Arbeitsspeicher für die Datenpuffer der Anwendung registrieren kann oder wenn temporärer Arbeitsspeicher nicht vollständig zugeordnet werden kann, schließt er die Sendeanforderung einer Anwendung mit dem WSAENOBUFS-Fehlercode ab.
Datenübertragung an einen Anbieter, der die WSPRdmaRead-Funktion nicht unterstützt
Die folgende Abbildung zeigt eine Übersicht darüber, wie der Switch die Übertragung von Anwendungsdaten abschließt, wenn der SAN-Dienstanbieter auf dem Remotepeer keine WSPRdmaRead-Funktion unterstützt. In der folgenden Sequenz wird die Übertragung von Anwendungsdaten ausführlicher beschrieben.
So übertragen Sie Daten, wenn der Remotepeer WSPRdmaRead nicht unterstützt
- Der Switch auf dem Remotepeer ruft WSPRegisterRdmaMemory auf, um DEN RDMA-Arbeitsspeicher für den Schreibzugriff zu registrieren.
- Der Switch auf dem Remotepeer ruft dann WSPSend auf, um eine Steuernachricht an den lokalen Switch zu senden, die den Speicherort des RDMA-Arbeitsspeichers angibt, in den der lokale Switch schreiben kann.
- Der lokale Switch ruft die WSPRdmaWrite-Funktion auf, um Anwendungsdaten in den RDMA-Arbeitsspeicher zu übertragen. Der SAN-Dienstanbieter überträgt die gepufferten Daten im Hintergrund. Auf diese Weise können Anwendungen, die nicht mehr als einen Sendevorgang gleichzeitig posten, eine andere Sendeanforderung senden, während der SAN-Dienstanbieter gepufferte Daten sendet.
- Der lokale Switch ruft die WSPGetOverlappedResult-Funktion auf, um die Ergebnisse der Übertragung abzurufen. Weitere Informationen finden Sie unter Abschließen von Datenübertragungsanforderungen.
- Der lokale Switch ruft WSPSend auf, um eine Steuernachricht an den Remotepeer zu senden, um anzugeben, dass die Übertragung abgeschlossen ist.
- Der Switch am Remotepeer ruft WSPDeregisterRdmaMemory auf, um RDMA-Arbeitsspeicher freizugeben.
- Der lokale Switch schließt die Sendeanforderung der Anwendung ab. Wenn der Switch keinen Arbeitsspeicher für die Datenpuffer der Anwendung registrieren kann oder wenn temporärer Arbeitsspeicher nicht zugewiesen werden kann, schließt er die Sendeanforderung einer Anwendung mit dem WSAENOBUFS-Fehlercode ab.