Almacenamiento en caché de memoria registrada
Los proveedores de servicios SAN pueden almacenar en caché los búferes RDMA que se exponen para el acceso local o remoto para mejorar el rendimiento.
Almacenamiento en caché de búferes RDMA expuestos para el acceso local
El modificador de Windows Sockets llama a la función de extensión WSPRegisterMemory de un proveedor de servicios SAN en nombre de una aplicación para registrar todos los búferes de datos que sirven como búfer RDMA de recepción local en una llamada a la función de extensión WSPRdmaRead o al origen RDMA local en una llamada a la función de extensión WSPRdmaWrite . Como parte de este proceso de registro, el proveedor de servicios SAN debe bloquear estos búferes en regiones de memoria física y registrarlos con la NIC de SAN. Ambas operaciones consumen muchos recursos. Por lo tanto, el proveedor de servicios SAN debe usar el almacenamiento en caché para reducir la sobrecarga de estos registros. Si el proveedor de servicios SAN usa el almacenamiento en caché, el rendimiento de las aplicaciones que reutilizan los búferes para las transferencias de datos mejora.
Los proveedores de servicios SAN deben almacenar en caché y liberar búferes RDMA que se exponen para el acceso local, como se describe en la lista siguiente:
Cuando el modificador llama a la función de extensión WSPDeregisterMemory para liberar un búfer, el proveedor de servicios SAN debe dejar el búfer registrado con la NIC de SAN y bloqueado en una región de memoria física. El proveedor de servicios SAN también debe agregar el búfer a una caché de búferes registrados, en caso de que el búfer se use de nuevo en una operación RDMA posterior y la posesión segura del búfer, tal como se describe en el siguiente elemento de lista.
Un proveedor de servicios SAN almacena en caché los registros de memoria en función de las direcciones virtuales. Cuando el proveedor de servicios SAN almacena en caché el registro de un búfer, el controlador proxy del proveedor de servicios SAN debe llamar a la función MmSecureVirtualMemory para proteger la posesión de ese búfer registrado para que el sistema operativo notifique el modificador si se libera el búfer (por ejemplo, si una aplicación llama a la función VirtualFree para liberar un intervalo de direcciones virtuales de nuevo al sistema operativo).
Cuando el modificador llama posteriormente a WSPRegisterMemory para registrar un búfer, el proveedor de servicios SAN debe comprobar su caché para determinar si el búfer ya está registrado. Si el proveedor de servicios SAN encuentra el búfer en su memoria caché, el proveedor de servicios SAN no debe realizar ninguna otra acción de registro.
Antes de que las asignaciones virtuales a físicas del búfer registrado cambien posteriormente, el modificador llama a la función de extensión WSPMemoryRegistrationCacheCallback de cada proveedor de servicios SAN. Cada controlador proxy del proveedor de servicios SAN, a su vez, debe llamar a la función MmUnsecureVirtualMemory para liberar la propiedad del búfer. Además, cada proveedor de servicios SAN debe quitar el búfer de su caché y debe quitar el registro del búfer de la NIC san.
Antes de cerrar la conexión entre un socket SAN local y un par remoto, el proveedor de servicios SAN debe liberar los búferes almacenados en caché.
Nota El controlador proxy debe usar el mecanismo try/except alrededor del código que accede a un búfer en modo de usuario que se ha protegido a través de una llamada a MmSecureVirtualMemory para evitar bloqueos del sistema operativo. Para obtener más información sobre cómo un controlador proxy protege y libera búferes, consulte Protección y liberación de la propiedad de direcciones virtuales.
Almacenamiento en caché de búferes RDMA expuestos para el acceso remoto
El conmutador de Windows Sockets llama a la función de extensión WSPRegisterRdmaMemory de un proveedor de servicios SAN para registrar todos los búferes de datos que sirven como destino RDMA remoto de una llamada ADPRdmaWrite remota o el origen RDMA remoto de una llamada ADPRdmaRead remota. Es decir, el conmutador expone estos búferes para el acceso mediante un par remoto. Una vez completadas las transferencias de datos de estos búferes, el modificador llama a la función de extensión WSPDeregisterRdmaMemory del proveedor de servicios SAN para liberar estos búferes para que ya no sean accesibles desde el mismo nivel remoto.
Los proveedores de servicios SAN deben almacenar en caché los búferes RDMA que se exponen para el acceso remoto, como se describe en la lista siguiente:
Cuando switch llama a WSPDeregisterRdmaMemory para liberar un búfer, el proveedor de servicios SAN debe dejar el búfer bloqueado en memoria física y registrado con la NIC de SAN. El proveedor de servicios SAN también debe agregar el búfer a una caché de búferes registrados, en caso de que el búfer se use de nuevo en una operación RDMA posterior. Sin embargo, el proveedor de servicios SAN debe tomar las medidas adecuadas para asegurarse de que el mismo nivel remoto ya no pueda acceder al búfer. Nota Si el proveedor de servicios san solo puede hacer inaccesible el búfer quitando el registro del búfer de la NIC de SAN, el proveedor de servicios san debe hacerlo. Sin embargo, el proveedor de servicios SAN debe dejar el búfer bloqueado en una región de memoria física. Este escenario no proporciona el mejor rendimiento posible, pero es mejor que ningún almacenamiento en caché.
Para almacenar en caché los búferes RDMA expuestos para el acceso remoto, el proveedor de servicios SAN y su controlador proxy deben usar las técnicas de almacenamiento en caché, tal como se describe en la lista anterior para los búferes RDMA expuestos para el acceso local.
Cuando el modificador llama posteriormente a WSPRegisterRdmaMemory para registrar un búfer, el proveedor de servicios SAN debe comprobar su caché para determinar si el búfer ya está registrado. Si el proveedor de servicios SAN encuentra el búfer en su memoria caché, el proveedor de servicios SAN simplemente debe exponer el búfer para el acceso remoto, no se requiere ninguna acción de registro adicional. Sin embargo, si el registro del búfer se quitó anteriormente de la NIC de SAN, el proveedor de servicios san debe volver a registrar el búfer.
Para liberar búferes RDMA expuestos para el acceso remoto, el proveedor de servicios SAN y su controlador proxy deben usar las técnicas como se describe en la lista anterior.