Uso del protocolo de sesión
El modificador de Windows Sockets usa su protocolo de sesión para transferir datos a través de una conexión SAN. Si el modificador transfiere una pequeña cantidad de datos, transfiere esos datos dentro de un mensaje de control. Cada mensaje de control consta de un encabezado y una carga opcional de los datos de la aplicación. Si el modificador transfiere una gran cantidad de datos, transfiere esos datos mediante operaciones RDMA.
En esta sección se describe cómo configurar y realizar una transferencia de datos.
Nota En función del comportamiento de las aplicaciones que cargan el conmutador, el conmutador optimiza su protocolo de sesión para reducir la sobrecarga implicada en la transferencia de datos de la aplicación.
En esta sección también se proporcionan ejemplos de cómo el protocolo de sesión del conmutador realiza las transferencias de datos. Sin embargo, estos ejemplos no incluyen descripciones definitivas de estas operaciones.
Configuración de una transferencia de datos
El modificador asigna un grupo de búferes de mensajes de control para cada socket conectado. A continuación, el modificador realiza llamadas a la función WSPRegisterMemory del proveedor de servicios SAN para registrar esos búferes de mensajes en regiones de memoria física. El modificador usa parte del grupo de búferes para enviar información de control de flujo a un mismo nivel remoto al llamar a la función WSPSend de un proveedor de servicios SAN. El modificador usa la otra parte del grupo para publicar búferes de mensajes para recibir información de control de flujo de un mismo nivel remoto al llamar a la función WSPRecv de un proveedor de servicios SAN. Una vez que el modificador recibe mensajes de control, los consume inmediatamente. Después de consumir mensajes de control, el modificador llama a la función WSPRecv del proveedor de servicios SAN y pasa búferes de recepción para volver a publicarlos para que puedan recibir mensajes de control adicionales de un mismo nivel remoto.
Transferencia de datos de aplicación
El tamaño de la transferencia de datos afecta a cómo controlará el modificador la operación de transferencia de datos.
Si una aplicación solicita enviar una pequeña cantidad de datos, el modificador transfiere esos datos como se describe en Envío de datos urgentes en una SAN.
Si una aplicación solicita enviar una gran cantidad de datos, el modificador copia la parte inicial de los datos en un búfer de mensajes de control que se usa para enviar. El encabezado de este mensaje de control contiene información que especifica la cantidad de datos de la aplicación. A continuación, el modificador llama a la función WSPSend del proveedor de servicios SAN para enviar este mensaje de control al mismo nivel remoto del socket SAN.
La forma en que el modificador completa la transferencia de datos de la aplicación depende de si el proveedor de servicios admite la función WSPRdmaRead .
Transferencia de datos a un proveedor que admite la función WSPRdmaRead
En la ilustración siguiente se muestra información general sobre cómo el conmutador completa la transferencia de datos de la aplicación si el proveedor de servicios SAN en el mismo nivel remoto admite una función WSPRdmaRead. La secuencia siguiente describe la transferencia de datos de la aplicación con más detalle.
Para transferir datos cuando el par remoto admite WSPRdmaRead
- El conmutador local debe llamar a la función WSPRegisterRdmaMemory del proveedor de servicios SAN para registrar la memoria RDMA para el acceso de lectura. En este caso, el encabezado de control del búfer de mensajes también identifica el descriptor de la memoria RDMA que contiene los datos restantes de la aplicación.
- A continuación, el modificador del mismo nivel remoto llama a WSPRdmaRead para transferir datos de la aplicación de la memoria RDMA a recibir búferes que el conmutador del mismo nivel remoto registró anteriormente con llamadas WSPRegisterMemory . El proveedor de servicios SAN transmite los datos almacenados en búfer en segundo plano. Al hacerlo, las aplicaciones que no publican más de un envío cada vez para publicar otra solicitud de envío mientras el proveedor de servicios SAN envía datos almacenados en búfer.
- A continuación, el modificador del mismo nivel remoto llama a WSPSend para enviar un mensaje de control al conmutador local para indicar que la transferencia se ha completado.
- El conmutador local llama a la función WSPDeregisterRdmaMemory para liberar memoria RDMA.
- El modificador local completa la solicitud de envío de la aplicación. Si el modificador no puede registrar memoria para los búferes de datos de la aplicación o si la memoria temporal no se puede asignar por completo, completa la solicitud de envío de una aplicación con el código de error WSAENOBUFS .
Transferencia de datos a un proveedor que no admite la función WSPRdmaRead
En la ilustración siguiente se muestra información general sobre cómo el conmutador completa la transferencia de datos de aplicación si el proveedor de servicios SAN en el mismo nivel remoto no admite una función WSPRdmaRead . La secuencia siguiente describe la transferencia de datos de la aplicación con más detalle.
Para transferir datos cuando el mismo nivel remoto no admite WSPRdmaRead
- El modificador del mismo nivel remoto llama a WSPRegisterRdmaMemory para registrar la memoria RDMA para el acceso de escritura.
- A continuación, el modificador del mismo nivel remoto llama a WSPSend para enviar un mensaje de control al conmutador local que indica la ubicación de la memoria RDMA a la que puede escribir el conmutador local.
- El conmutador local llama a la función WSPRdmaWrite para transferir los datos de la aplicación a la memoria RDMA. El proveedor de servicios SAN transmite los datos almacenados en búfer en segundo plano. Al hacerlo, las aplicaciones que no publican más de un envío cada vez para publicar otra solicitud de envío mientras el proveedor de servicios SAN envía datos almacenados en búfer.
- El conmutador local llama a la función WSPGetOverlappedResult para obtener los resultados de la transferencia. Para obtener más información, consulte Finalización de solicitudes de transferencia de datos.
- El conmutador local llama a WSPSend para enviar un mensaje de control al mismo nivel remoto para indicar que la transferencia se ha completado.
- El modificador del mismo nivel remoto llama a WSPDeregisterRdmaMemory para liberar memoria RDMA.
- El modificador local completa la solicitud de envío de la aplicación. Si el modificador no puede registrar memoria para los búferes de datos de la aplicación o si no se puede asignar memoria temporal, completa la solicitud de envío de una aplicación con el código de error WSAENOBUFS .