Este tópico aborda problemas comuns do Shared Memory Communications (SMC) no Alibaba Cloud Linux 3 e suas respectivas soluções.
O SMC não melhora o desempenho da aplicação sobre TCP
Conexões SMC podem reverter para TCP sem a aceleração do Remote Direct Memory Access (RDMA). Para verificar se houve reversão, execute smcss -a. Se a coluna de modo exibir TCP, consulte O SMC reverte para TCP para identificar o código da causa.
Mesmo com o SMC ativo, não há garantia de ganho de desempenho. Os motivos mais comuns incluem:
Carga de trabalho limitada por CPU. Se a aplicação dedica a maior parte do tempo a computação em vez de E/S de rede, a mudança para RDMA tem pouco efeito.
Overhead de cabeçalho RDMA. Pacotes RDMA carregam cabeçalhos adicionais em comparação ao TCP, o que reduz ligeiramente o throughput para a mesma largura de banda. Para mitigar esse problema, ative os Jumbo Frames.
Conexões de curta duração. O estabelecimento de conexões SMC envolve operações de caminho lento, como criação e solicitação de recursos RDMA. Esse overhead supera os benefícios em cargas de trabalho dominadas por conexões efêmeras.
Recursos insuficientes. O SMC exige memória e recursos de interface RDMA elástica (ERI) vinculados às especificações da instância ECS. Quando os recursos se esgotam, o SMC reverte para TCP. Para requisitos de recursos, consulte Ativar e configurar o SMC.
Falha na comunicação após ativar o SMC
Após ativar o SMC-R em uma instância ECS com Alibaba Cloud Linux 3, alguns endereços voltados para a Internet respondem a ping, mas não permitem acesso: requisições curl falham, enquanto pings ICMP têm sucesso. Desativar o SMC-R resolve o problema.
Isso ocorre quando um servidor remoto ecoa opções TCP em vez de ignorar as não suportadas, conforme exigido pela RFC 9293. Quando um servidor devolve a opção TCP do SMC, a extremidade local identifica incorretamente o par como compatível com SMC. A incompatibilidade resultante no handshake causa falhas na conexão.
Para diagnosticar o problema, execute uma verificação de link de comunicação.
Para corrigir, configure o controle de negociação SMC baseado em políticas BPF e desative o SMC no link problemático.
O SMC não é ativado após executar smc_run
A execução de smc_run ./foo não cria conexões SMC. O comando smcr l não mostra grupos de links, e smcss -a exibe nenhuma conexão SMC ou uma reversão unilateral para TCP.
O smc_run utiliza LD_PRELOAD para injetar bibliotecas smc-tools que interceptam chamadas socket(2) e modificam famílias e protocolos de socket. Esse mecanismo não funciona para aplicações vinculadas estaticamente.
Para aplicações vinculadas estaticamente, ative o SMC no nível do kernel:
sysctl net.smc.tcp2smc
Para mais detalhes, consulte Ativar e configurar o SMC.
Portas 65500–65515 tornam-se inutilizáveis após ativar o SMC
Após carregar os módulos SMC, chamadas bind(2) nas portas 65500–65515 retornam EADDRINUSE.
O SMC-R com elastic Remote Direct Memory Access (eRDMA) reserva essas 16 portas para conexões fora de banda (OOB) no namespace de rede onde residem as ERIs. Execute dmesg para confirmar:
smc: smc: load SMC module with reserve_mode
NET: Registered protocol family 43
smc: netns <netns ID> reserved ports [65500 ~ 65515] for eRDMA OOB
smc: adding ib device erdma_0 with port count 1
smc: ib device erdma_0 port 1 has pnetid
Se essas portas já estiverem em uso quando os módulos SMC forem carregados, os módulos não poderão utilizar dispositivos eRDMA.
Para liberar as portas, descarregue os módulos SMC. Consulte Usar SMC no Alibaba Cloud ECS.
O SMC reverte para TCP com endereços IPv6
Após ativar o SMC para aplicações que usam IPv6, o smcss mostra reversão para TCP com o código de causa 0x03030000 ou 0x09990000.
Dispositivos eRDMA e SMC do Alibaba Cloud não suportam IPv6. Aplique uma das seguintes soluções alternativas antes de ativar o SMC para novas conexões.
Desativar IPv6 para todas as interfaces:
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
Desativar IPv6 para uma interface específica:
sudo sysctl -w net.ipv6.conf.<NetInName>.disable_ipv6=1
Substitua <NetInName> pelo nome da interface.
Usar endereços IPv6 mapeados para IPv4 na versão do kernel 5.10.134-17.3 e posteriores.
O desempenho do SMC é inferior ao TCP no limite de PPS
Quando a carga de rede atinge a taxa máxima de pacotes por segundo (PPS) para o tipo de instância ECS, aplicações que usam SMC com eRDMA apresentam menos consultas por segundo (QPS) do que aquelas que usam TCP.
Para verificar se você atingiu o limite de PPS:
Tráfego TCP: Execute
sar -n DEV 1e verifiquerxpck/setxpck/s.Tráfego SMC eRDMA: Execute
eadm stat -d <ibdev_name> -lpara verificar as taxas de pacotes eRDMA. Para detalhes sobre oeadm, consulte Usar eadm para diagnosticar e solucionar problemas no eRDMA.
O RDMA gera mais pacotes por requisição do que o TCP; portanto, o limite de PPS é atingido mais rapidamente. Isso ocorre apenas sob carga extrema, como testes de estresse de benchmark. Em produção, o tráfego raramente atinge o teto de PPS.
Se o limite de PPS for o gargalo, não use SMC para essa carga de trabalho.
O SMC reverte para TCP e o RDMA não consegue acelerar as comunicações
Após ativar o SMC, o smcss -a mostra que a conexão reverteu para TCP. A conexão ainda funciona, mas sem a aceleração do RDMA.
Identificar o código da causa
Execute smcss -a para obter o código da causa da reversão:
State UID Inode Local Address Peer Address Intf Mode
ACTIVE 00000 0156721 192.168.99.21:60188 192.168.99.22:8090 0000 TCP 0x03010000
ACTIVE 00000 1202539 172.16.4.189:44780 172.16.4.190:1811 0000 SMCR
Na primeira entrada, TCP na coluna de modo indica uma reversão. O código da causa é 0x03010000. Na segunda entrada, SMCR confirma uma conexão SMC-R bem-sucedida.
Se dois códigos de causa aparecerem (por exemplo, 0x05000000 e 0x03030001), o primeiro é do host local e o segundo do par. A maioria das reversões é causada pelo par.
Referência de códigos de causa
|
Código da causa |
Descrição |
Causa e solução |
|
0x01010000 |
Memória insuficiente para estruturas de dados SMC |
A memória do host não comporta os recursos de conexão SMC. Libere memória encerrando processos desnecessários. |
|
0x02010000 |
Timeout de mensagem CLC ou LLC durante o handshake TCP |
Causa 1: Placas de interface de rede RDMA (RNICs) ou links RDMA falharam, causando timeouts de mensagem LLC. Verifique se as RNICs funcionam corretamente. Causa 2: NICs Ethernet ou redes TCP/IP falharam, causando timeouts de mensagem CLC. Verifique se as NICs Ethernet funcionam corretamente. |
|
0x02020000 |
Timeout de LLC para estabelecimento de link RDMA |
Não está em uso. |
|
0x03000000 |
Impossível obter endereços IP corretos |
O endereço IP para o socket CLC não pode ser recuperado ao criar uma proposta de conexão SMC. Verifique se a conexão CLC baseada em TCP e os dispositivos correspondentes funcionam corretamente. |
|
0x03010000 |
O par não suporta SMC |
O par não inclui sinalizadores de opção TCP SMC nos pacotes SYN ou SYN-ACK durante o handshake TCP. Verifique se as pilhas de protocolo em ambos os lados foram substituídas por SMC. Execute |
|
0x03020000 |
IPsec não suportado pelo SMC |
Não utilize IPsec com conexões SMC. |
|
0x03030000 |
Nenhum dispositivo SMC-D ou SMC-R disponível |
Causa 1: Nenhum dispositivo RDMA disponível. Execute |
|
0x03030001 |
Nenhum dispositivo SMC-D disponível |
O Alibaba Cloud não fornece dispositivos SMC-D. Entre em contato com o suporte técnico. |
|
0x03030002 |
Nenhum dispositivo SMC-R disponível |
Causa 1: O dispositivo RDMA selecionado tornou-se inválido durante o estabelecimento da conexão. Execute |
|
0x03030003 |
Dispositivos SMC-D não suportam ISMv2 |
O Alibaba Cloud não fornece dispositivos SMC-D. Entre em contato com o suporte técnico. |
|
0x03030004 |
O par não suporta a extensão SMCv2 |
O host local usa SMCv2, mas o par não. eRDMA e RoCE v2 usam SMCv2. Certifique-se de que ambos os hosts usam o mesmo tipo de dispositivo RDMA. Execute |
|
0x03030005 |
O par não suporta a extensão SMC-D v2 |
O Alibaba Cloud não fornece dispositivos SMC-D. Entre em contato com o suporte técnico. |
|
0x03030006 |
O par não tem ID empresarial do sistema (SEID) |
Não está em uso. |
|
0x03030007 |
Nenhum dispositivo SMC-D v2 disponível |
O Alibaba Cloud não fornece dispositivos SMC-D. Entre em contato com o suporte técnico. |
|
0x03030008 |
O par não tem ID empresarial definido pelo usuário (UEID) |
O SMCv2 requer um UEID. Execute |
|
0x03030009 |
Falha na negociação de versão SMC |
A versão SMC negociada mudou durante o handshake CLC. Certifique-se de que ambos os hosts executam a mesma distribuição de sistema operacional. |
|
0x0303000a |
Falha na negociação de máx. de conexões por LGR |
O SMCv2.1 negocia o número máximo de conexões por grupo de links (LGR). Uma reversão ocorre se o valor negociado for zero ou exceder o máximo local. Certifique-se de que ambos os hosts executam a mesma distribuição de sistema operacional. |
|
0x0303000b |
Falha na negociação de máx. de links por LGR |
O SMCv2.1 negocia o número máximo de links por LGR. Uma reversão ocorre se o valor negociado for zero ou exceder o máximo local. Certifique-se de que ambos os hosts executam a mesma distribuição de sistema operacional. |
|
0x0303000c |
Falha na negociação de recurso de fornecedor SMC |
O recurso de fornecedor mudou durante o handshake CLC. Certifique-se de que ambos os hosts executam a mesma distribuição de sistema operacional. No kernel |
|
0x03040000 |
Host local e par usam modos de dispositivo SMC diferentes (SMC-D vs. SMC-R) |
O Alibaba Cloud não fornece dispositivos SMC-D. Entre em contato com o suporte técnico. |
|
0x03050000 |
O par tem eyecatcher RMBE |
Não aplicável para Linux. |
|
0x03060000 |
MSG_FASTOPEN não suportado pelo SMC |
Remova o sinalizador MSG_FASTOPEN ao criar sockets SMC. |
|
0x03070000 |
Prefixo IP ou sub-rede diferente entre hosts |
Dispositivos RoCEv1 usam SMCv1, que suporta apenas comunicação na mesma sub-rede. Certifique-se de que ambos os hosts estão na mesma sub-rede. Dispositivos eRDMA usam SMCv2 e não estão sujeitos a essa restrição. |
|
0x03080000 |
Impossível obter o VLAN ID |
O SMC não consegue recuperar o VLAN ID do dispositivo durante o estabelecimento da conexão. Verifique se a conexão TCP e os dispositivos Ethernet funcionam corretamente. |
|
0x03090000 |
Impossível registrar o VLAN ID em um dispositivo ISM |
O Alibaba Cloud não fornece dispositivos SMC-D. Entre em contato com o suporte técnico. |
|
0x030a0000 |
Nenhum link RDMA SMC-R no grupo de links |
A conexão não conseguiu obter um link de seu LGR. Execute |
|
0x030b0000 |
O cliente não encontra os links RDMA do servidor |
O cliente busca links RDMA usando o número de par de filas (QPN), identificador global (GID) e endereço MAC fornecidos pelo servidor. Se nenhum link correspondente for encontrado, a conexão não poderá usar RDMA. Execute |
|
0x030c0000 |
Falha na negociação de versão SMC |
A versão SMC negociada é inaceitável. Certifique-se de que ambos os hosts executam a mesma distribuição de sistema operacional. |
|
0x030d0000 |
Número máximo de DMBs SMC-D atingido |
O Alibaba Cloud não fornece dispositivos SMC-D. Entre em contato com o suporte técnico. |
|
0x030e0000 |
Falha na conexão SMC-R V2 |
Durante o estabelecimento da conexão SMCv2, o cliente não consegue encontrar informações de roteamento para os endereços IP do par. Verifique se a conexão TCP, NICs Ethernet, configuração de IP e configuração de roteamento estão corretos e acessíveis. |
|
0x030f0000 |
Incompatibilidade de sinalizador de conexão indireta |
Durante o estabelecimento da conexão SMCv2, o cliente detecta uma incompatibilidade entre o sinalizador de gateway do servidor e as informações de roteamento locais. Verifique se a conexão TCP, NICs Ethernet, configuração de IP e configuração de roteamento estão corretos e usam o mesmo caminho de rede. |
|
0x04000000 |
Servidor e cliente usam grupos de links diferentes |
O servidor reutiliza um LGR, mas o cliente deseja criar um novo. Execute |
|
0x05000000 |
O par rejeitou o handshake |
O par enviou uma mensagem CLC rejeitando a conexão RDMA. Execute |
|
0x09990000 |
Falha na criação de recurso RDMA |
Recursos RDMA não puderam ser criados ou inicializados. Use uma ferramenta de monitoramento RDMA para verificar estatísticas de erro. Para eRDMA, execute |
|
0x09990001 |
Falha no RToken RDMA |
Trata-se de um problema na pilha de protocolo SMC. Entre em contato com o suporte técnico. |
|
0x09990002 |
Falha na inicialização do par de filas (QP) RDMA |
O SMC chama interfaces de verbos InfiniBand (IB) para inicializar o QP e ocorreu um erro. Execute |
|
0x09990003 |
Falha no registro de região de memória (MR) |
O número ou tamanho das MRs excede as especificações do dispositivo RDMA. Execute |
|
0x09990004 |
Falha na inicialização de crédito de controle de fluxo SMC |
RNICs ou links RDMA falharam, impedindo o envio de mensagens de crédito. Verifique se as RNICs funcionam corretamente. |
Ferramentas de O&M de rede mostram dados inesperados após ativar o SMC
Após ativar o SMC, ferramentas como tcpdump, Wireshark, ss e netstat mostram tráfego de rede que não corresponde às expectativas ou falham em capturar o tráfego esperado.
O SMC-R baseia-se em RDMA. Essas ferramentas analisam apenas tráfego TCP e não conseguem visualizar pacotes RDMA.
Utilize ferramentas específicas para RDMA. Consulte Monitorar e verificar eRDMA.
Módulo SMC inutilizável em instâncias aceleradas por GPU ou SCC
O módulo SMC carregado em uma instância acelerada por GPU ou Super Computing Cluster (SCC) não funciona.
Esses tipos de instância possuem drivers Mellanox OpenFabrics Enterprise Distribution (OFED) instalados. A pilha OFED inclui seu próprio módulo SMC que é carregado automaticamente, mas não funciona. Após instalar drivers Mellanox OFED, os símbolos de função RDMA mudam e o módulo SMC do kernel falha ao carregar com um erro Unknown symbol.
Não é possível usar SMC em instâncias aceleradas por GPU ou SCC com Alibaba Cloud Linux 3.
Algumas opções SOL_SOCKET e SOL_TCP não funcionam após ativar o SMC
Após substituir TCP por SMC, algumas opções setsockopt e getsockopt no nível SOL_SOCKET ou SOL_TCP não podem ser configuradas, não podem ser recuperadas ou não funcionam conforme o esperado.
O SMC usa buffers compartilhados e um design de pilha de protocolo diferente do TCP. Algumas opções de socket são incompatíveis com esse design.
Níveis de suporte:
Y: Totalmente suportado. A opção pode ser definida, recuperada e funciona conforme o esperado.
M: Configurável, mas pode não funcionar conforme o esperado devido a diferenças de design entre SMC e TCP.
N: Não suportado. O uso da opção causa uma reversão para TCP com o código de causa
0x03060000ou0x03010001.