O Shared Memory Communication (SMC) é uma pilha de protocolos de rede do kernel que acelera aplicações TCP usando Remote Direct Memory Access (RDMA), sem exigir alterações nas aplicações. Este tópico ajuda a determinar se o SMC é adequado ao seu cenário e se o ambiente atende aos requisitos necessários.
Como funciona
O SMC opera em paralelo à pilha TCP/IP. Em vez de processar pacotes via software, ele delega o processamento do protocolo ao hardware subjacente e transmite dados pela leitura e escrita direta na memória compartilhada remota. O resultado é menor latência, redução da sobrecarga da CPU e maior throughput de rede.
A IBM disponibilizou o SMC como código aberto para a comunidade Linux, e o Alibaba Cloud Linux 3 aprimorou essa tecnologia. O SMC é compatível com interfaces de soquete padrão. Ao interceptar a chamada de sistema socket() para alterar a família de soquetes e os parâmetros de protocolo, as aplicações TCP existentes passam a usar a pilha SMC de forma transparente, sem necessidade de modificação ou recompilação. Para obter instruções de configuração, consulte Usar o SMC.
O SMC possui duas variantes:
SMC over RDMA (SMC-R): Usa a tecnologia RDMA. O Alibaba Cloud Linux 3 oferece o SMC-R baseado no elastic Remote Direct Memory Access (eRDMA). Todo o conteúdo deste tópico aplica-se ao SMC-R.
SMC over Direct Memory Access (SMC-D): Usa a tecnologia de memória compartilhada interna (ISM).
Estabelecimento de conexão: O SMC inicia com um handshake TCP padrão de três vias. Uma opção TCP especial (Kind: 254, Value: 0xE2D4C3D9) no pacote SYN sinaliza a capacidade SMC ao par. Se ambos os lados suportarem o SMC, eles criarão os recursos RDMA correspondentes e concluirão um handshake SMC. Todos os dados subsequentes trafegarão via RDMA. Caso o handshake SMC falhe, ambos os lados retornarão automaticamente à conexão TCP estabelecida, mantendo a comunicação ininterrupta.
Após o estabelecimento da primeira conexão SMC, o protocolo cria uma conexão confiável RDMA (RC) — denominada link SMC — sobre a rede RDMA. As conexões subsequentes reutilizam o mesmo link SMC para minimizar a sobrecarga de recursos RDMA. Quando o limite de reutilização é atingido, um novo link SMC é criado. Vários links SMC formam um grupo de links SMC (LGR) para transmissão RDMA e recuperação de desastres.
Pré-requisitos
Para usar o SMC-R no Elastic Compute Service (ECS) da Alibaba Cloud:
Instância habilitada para eRDMA: Configure uma interface de rede eRDMA (ERI) na instância. Para tipos de instância suportados e etapas de configuração, consulte Configurar eRDMA em uma instância de nível empresarial.
Alibaba Cloud Linux 3 com kernel 5.10.134-16 ou posterior: Para verificar e atualizar a versão do kernel, consulte Alterar a versão do kernel.
Casos de uso
O SMC oferece maiores benefícios nos seguintes cenários:
Sem necessidade de modificar aplicações: A principal vantagem do SMC é permitir que aplicações TCP usem RDMA sem alterações de código. Note que, por ser uma pilha de protocolos do kernel, o SMC apresenta sobrecarga adicional de chamadas de sistema e cópia de dados entre modo kernel e usuário em comparação a aplicações RDMA nativas. Essa solução é ideal quando a integração perfeita com aplicações existentes é prioritária.
Cargas de trabalho sensíveis a latência e throughput: O offload de hardware reduz a latência de processamento de protocolos e a sobrecarga da CPU, enquanto o acesso direto à memória aumenta o throughput de rede.
Comunicação em rede interna: O SMC exige que ambos os endpoints ofereçam suporte ao protocolo, condição facilmente atendível em redes internas. Links de rede curtos amplificam ainda mais o benefício de latência.
Serviços intensivos em rede: Serviços nos quais a rede representa o principal gargalo apresentam as melhorias mais significativas em latência e throughput.
Quando não usar o SMC
Evite o SMC nos cenários descritos abaixo. Sempre que houver uma solução alternativa, ela estará listada na coluna Solution.
|
Cenário |
Por que o desempenho do SMC é inferior |
Solução |
|
Conexões de curta duração |
O estabelecimento de conexão SMC envolve um handshake TCP, um handshake SMC e a criação de recursos RDMA antes de qualquer fluxo de dados. Essa sobrecarga torna o SMC mais lento que o TCP para conexões efêmeras. |
Use o |
|
Altas taxas de conexão em rajada |
A mesma sobrecarga de estabelecimento de conexão causa enfileiramento durante rajadas, resultando em timeouts de conexão. |
Utilize o |
|
Caminhos entre elementos de rede distintos |
Alguns elementos de rede descartam ou retransmitem incorretamente pacotes SYN/SYN-ACK contendo opções experimentais TCP não reconhecidas, causando timeouts de handshake ou falhas de conexão. Isso pode ocorrer em serviços expostos à internet. |
Execute |
|
Comunicação via rede pública |
Redes públicas frequentemente envolvem elementos que interferem nos handshakes SMC (mesmo problema citado acima). Atender aos requisitos do SMC em ambos os lados também é difícil, forçando o retorno ao TCP. Além disso, o SMC não possui reforço de segurança e é inadequado para ambientes não confiáveis. |
— |
|
Ambientes com restrição de memória |
Cada conexão SMC pré-aloca buffers de memória compartilhada. Por padrão, uma conexão consome |
Use o |
|
Comunicação entre zonas |
A transmissão entre zonas adiciona de centenas de microssegundos a alguns milissegundos de latência, o que reduz a vantagem do SMC nesse quesito. O maior produto largura de banda-atraso também exige buffers maiores para aproveitar totalmente a largura de banda, aumentando a pressão sobre a memória. |
Use Identificadores Únicos de Endpoint (UEIDs) para impedir o uso do SMC entre zonas. Consulte Habilitar e configurar o SMC. |
Ferramenta de verificação automatizada
O Alibaba Cloud Linux 3 inclui o aliyunsmc-check, uma ferramenta para validar a configuração do ambiente SMC, os links de comunicação e a conectividade ponta a ponta. Ela faz parte do pacote aliyun-smc-extensions.
Instale o pacote
sudo yum install -y aliyun-smc-extensions
Verificar o ambiente básico
Valide se a versão do kernel e o dispositivo eRDMA estão configurados corretamente:
aliyunsmc-check basic_check
Saída de exemplo:

Verificar o link de comunicação
Confirme se nenhum elemento de rede no caminho interfere no SMC. Substitua <url> pela URL de destino:
aliyunsmc-check syn_check --url <url>
Saída de exemplo:

Se o link falhar na verificação, utilize smc-ebpf para desativar o SMC nesse link. Consulte Habilitar e configurar o SMC.
Verificar a conectividade SMC
Valide se o SMC consegue estabelecer conexões entre o host atual e um host remoto. A ferramenta usa SSH para se conectar ao host remoto.
Substitua os espaços reservados:
|
Espaço reservado |
Descrição |
|
|
Endereço IP do host remoto |
|
|
Nome de usuário no host remoto |
|
|
Caminho para o arquivo de chave privada SSH |
|
|
Senha do host remoto |
Autenticação SSH por arquivo de chave
aliyunsmc-check connect_check --hosts <peer ip> --user <usr> --key <keyfile>
Autenticação SSH por senha
aliyunsmc-check connect_check --hosts <peer ip> --user <usr> --pwd <passwd>
Autenticação SSH sem senha
aliyunsmc-check connect_check --hosts <peer ip> --user <usr>
Saída de exemplo:

Próximos passos
Usar o SMC — ative o SMC, configure a ferramenta
smc-ebpfe ajuste os tamanhos dos buffers
