Partilhar via


Usando o protocolo de sessão

O switch Windows Sockets usa seu protocolo de sessão para transferir dados por uma conexão SAN. Se o switch transfere uma pequena quantidade de dados, ele transfere esses dados dentro de uma mensagem de controle. Cada mensagem de controle consiste em um cabeçalho e uma carga opcional de dados do aplicativo. Se o switch transferir uma grande quantidade de dados, ele transfere esses dados usando operações RDMA.

Esta seção descreve como configurar e executar uma transferência de dados.

Nota Dependendo do comportamento dos aplicativos que carregam o switch, o switch otimiza seu protocolo de sessão para reduzir a sobrecarga envolvida na transferência de dados do aplicativo.

Esta seção também fornece exemplos de como o protocolo de sessão do switch executa transferências de dados. No entanto, estes exemplos não incluem descrições definitivas destas operações.

Configurando uma transferência de dados

O switch aloca um pool de buffers de mensagens de controle para cada soquete conectado. Em seguida, o switch faz chamadas para a função WSPRegisterMemory de do provedor de serviços de SAN para registar esses buffers de mensagens em regiões de memória física. O switch utiliza parte do pool de buffers para enviar informações de controlo de fluxo a um par remoto, ao chamar a função "WSPSend " de um fornecedor de serviços SAN. O switch utiliza a outra parte do pool para postar buffers de mensagens e assim receber informações de controle de fluxo de um par remoto ao chamar a função WSPRecv de um fornecedor de serviços SAN. Depois que o switch recebe mensagens de controle, ele as consome imediatamente. Depois de consumir mensagens de controlo, o switch chama a função WSPRecv do fornecedor de serviços SAN e passa os buffers de receção para postá-los novamente, permitindo que recebam mensagens de controlo adicionais de um par remoto.

Transferência de dados de aplicativos

O tamanho da transferência de dados afeta como o switch lidará com a operação de transferência de dados.

Se um aplicativo solicitar o envio de uma pequena quantidade de dados, o switch transferirá esses dados conforme descrito em Enviando dados urgentes em uma SAN.

Se um aplicativo solicitar o envio de uma grande quantidade de dados, o switch copiará a parte inicial dos dados para um buffer de mensagens de controle usado para envio. O cabeçalho dessa mensagem de controle contém informações que especificam a quantidade de dados do aplicativo. Em seguida, o switch chama a função WSPSend do provedor de serviços de SAN para enviar essa mensagem de controle ao par remoto do soquete SAN.

A forma como o switch conclui a transferência de dados da aplicação depende de se o provedor de serviços oferece suporte à função WSPRdmaRead .

Transferência de dados para um provedor que suporta a função WSPRdmaRead

A figura a seguir mostra uma visão geral de como o switch conclui a transferência de dados de aplicativos se o provedor de serviços SAN no peer remoto oferecer suporte a uma função WSPRdmaRead. A sequência a seguir descreve a transferência de dados do aplicativo com mais detalhes.

par remoto suporta wsprdmaread.

Para transferir dados quando o peer remoto suporta WSPRdmaRead

  • O switch local deve chamar a função WSPRegisterRdmaMemory do provedor de serviços SAN para registar a memória RDMA para acesso de leitura. Nesse caso, o cabeçalho de controle para o buffer de mensagens também identifica o descritor para a memória RDMA que contém os dados restantes do aplicativo.
  • Em seguida, o switch no par remoto chama WSPRdmaRead para transferir dados da aplicação da memória RDMA para os buffers de receção que o switch no par remoto já tinha registado anteriormente com chamadas WSPRegisterMemory. O provedor de serviços SAN transmite os dados armazenados em buffer em segundo plano. Isso permite que aplicativos que não postam mais de um envio por vez postem outra solicitação de envio enquanto o provedor de serviços de SAN envia dados armazenados em buffer.
  • Em seguida, o comutador no peer remoto chama WSPSend para enviar uma mensagem de controlo ao comutador local para indicar que a transferência está concluída.
  • O comutador local chama a função WSPDeregisterRdmaMemory para liberar a memória RDMA.
  • O comutador local conclui a solicitação de envio do aplicativo. Se o switch não puder registrar memória para os buffers de dados do aplicativo ou se a memória temporária não puder ser totalmente alocada, ele concluirá a solicitação de envio de um aplicativo com o código de erro WSAENOBUFS.

Transferência de dados para um provedor que não suporta a função WSPRdmaRead

A figura a seguir mostra uma visão geral de como o switch conclui a transferência de dados de aplicativos se o provedor de serviços SAN no peer remoto não oferecer suporte a uma função deWSPRdmaRead. A sequência a seguir descreve a transferência de dados do aplicativo com mais detalhes.

peer remoto não suporta wsprdmaread.

Para transferir dados quando o peer remoto não suporta WSPRdmaRead

  • O switch no peer remoto chama WSPRegisterRdmaMemory para registrar a memória RDMA para acesso de gravação.
  • Em seguida, o comutador no ponto remoto chama WSPSend para enviar uma mensagem de controle para o comutador local que indica o local da memória RDMA na qual o comutador local pode gravar.
  • O comutador local chama a função WSPRdmaWrite para transferir dados da aplicação para a memória RDMA. O provedor de serviços SAN transmite os dados armazenados em buffer em segundo plano. Isso permite que aplicativos que não postam mais de um envio por vez postem outra solicitação de envio enquanto o provedor de serviços de SAN envia dados armazenados em buffer.
  • O comutador local chama a função WSPGetOverlappedResult para obter os resultados da transferência. Para obter mais informações, consulte Concluindo solicitações de transferência de dados.
  • O comutador local chama WSPSend para enviar uma mensagem de controle ao correspondente remoto para indicar que a transferência foi concluída.
  • O switch no peer remoto chama WSPDeregisterRdmaMemory para libertar a memória RDMA.
  • O comutador local conclui a solicitação de envio do aplicativo. Se o switch não puder registrar memória para os buffers de dados do aplicativo ou se a memória temporária não puder ser alocada, ele concluirá a solicitação de envio de um aplicativo com o código de erro WSAENOBUFS.

Transferência de Dados numa SAN