O Elastic RDMA (eRDMA) oferece latência ultrabaixa para processar solicitações com mais rapidez. Este tópico descreve como implantar comunicações de memória compartilhada (SMC) e Redis com eRDMA e como avaliar o desempenho deles.
Informações básicas
As comunicações de memória compartilhada (SMC) são uma pilha de protocolos de espaço do kernel de alto desempenho que usa memória compartilhada e é compatível com a camada de socket. O SMC possui duas versões, dependendo da tecnologia de memória compartilhada utilizada: SMC over DMA (SMC-D), baseado em memória compartilhada interna (ISM), e SMC over RDMA (SMC-R), baseado em acesso remoto direto à memória (RDMA). Para obter mais informações, consulte Aplicabilidade do SMC.
O Alibaba Cloud Linux 3 usa o Elastic RDMA (eRDMA) para fornecer aceleração SMC-R. Para usar o SMC-R no Alibaba Cloud, crie instâncias ECS compatíveis com eRDMA.
Pré-requisitos
Crie duas instâncias ECS compatíveis com eRDMA. Durante a criação da instância, selecione a opção para instalar automaticamente o driver eRDMA e ative a interface eRDMA na ENI primária. Uma instância ECS servirá como servidor e a outra como cliente. Para obter mais informações, consulte Criar uma instância pelo assistente.
Este tópico usa os seguintes parâmetros como exemplo:
Tipo de instância: ecs.g8i.8xlarge
Imagem: Alibaba Cloud Linux 3.2104 LTS 64 bits
Rede: ambas as instâncias estão no mesmo grupo de segurança e podem se comunicar pela rede interna por padrão.
Endereços IP privados das ENIs primárias: 192.168.0.25 (servidor) e 192.168.0.24 (cliente). Substitua os endereços IP de exemplo pelos seus próprios.
NotaEste tópico usa um exemplo em que a interface eRDMA está ativada na ENI primária de uma instância. Nesse caso, 192.168.0.25 é o endereço IP privado da ENI primária na instância do servidor.
Se você ativar a interface eRDMA em uma interface de rede elástica secundária para o teste, substitua esse endereço IP pelo endereço IP privado dessa ENI secundária. Para obter mais informações, consulte Etapa 3: Vincular um ERI a uma instância ECS.
Etapa 1: Implantar o SMC
Conecte-se remotamente às instâncias ECS do servidor e do cliente.
Para obter mais informações, consulte Conectar-se a uma instância Linux pelo Workbench.
Em ambas as instâncias ECS, execute o seguinte comando para implantar o módulo SMC-R:
modprobe smc && modinfo smcEm ambas as instâncias, execute o seguinte comando para desativar o IPv6, permitindo que conexões eRDMA sejam estabelecidas pela interface eRDMA.
Importante-
Os dispositivos eRDMA do Alibaba Cloud e o SMC atualmente não suportam endereços IPv6. Se sua aplicação usar um endereço IPv6, o SMC reverterá para TCP. Para obter mais informações, consulte SMC reverte para TCP com endereços IPv6.
-
A partir do
ANCK 5.10.134-17.3, o SMC suporta endereçosIPv4-mapped IPv6.
sysctl net.ipv6.conf.all.disable_ipv6=1-
Em ambas as instâncias, execute o seguinte comando para ativar o SMC para eRDMA, priorizando o tráfego pelo eRDMA.
Os sockets TCP recém-criados são convertidos em sockets SMC. Os sockets TCP existentes não são afetados.
sysctl net.smc.tcp2smc=1Em ambas as instâncias, execute o seguinte comando para instalar o smc-tools, o kit de ferramentas de monitoramento e diagnóstico do SMC.
O smc-tools é um kit de ferramentas desenvolvido pela IBM para monitoramento e diagnóstico do SMC-R. Ele oferece ferramentas abrangentes de diagnóstico e rastreamento para o SMC-R, incluindo:
smcr: fornece estatísticas sobre recursos do SMC-R.
smcss: fornece informações sobre sockets SMC.
yum install -y smc-toolsApós a conclusão da instalação, execute o comando
smcss -apara visualizar o caminho atual do tráfego.[root@iZxxx]# smcss -a State UID Inode Local Address Peer Address Intf Mode ACTIVE 00000 4257589 192.168.8.123:45058 192.168.8.126:20003 0000 SMCR ACTIVE 00000 4264206 192.168.8.123:20004 192.168.8.130:54626 0000 SMCR ACTIVE 00000 4264207 192.168.8.123:20004 192.168.8.136:54900 0000 SMCR ACTIVE 00000 4308684 192.168.8.123:20004 192.168.8.134:38578 0000 SMCR ACTIVE 00000 4308694 192.168.8.123:20004 192.168.8.126:60554 0000 SMCR ACTIVE 00000 4308692 192.168.8.123:20004 192.168.8.126:60568 0000 SMCR ACTIVE 00000 4261731 192.168.8.123:49490 192.168.8.122:20004 0000 SMCR ACTIVE 00000 4257634 192.168.8.123:49500 192.168.8.122:20004 0000 SMCR ACTIVE 00000 4257638 192.168.8.123:42866 192.168.8.129:20003 0000 SMCR ACTIVE 00000 4264236 192.168.8.123:53768 192.168.8.135:20003 0000 SMCR ACTIVE 00000 4272479 192.168.8.123:34978 192.168.8.128:20003 0000 SMCR ACTIVE 00000 4277256 192.168.8.123:42840 192.168.8.127:20003 0000 SMCR LISTEN 00000 4253132 0.0.0.0:38567
Etapa 2: Implantar o Redis
Após implantar o SMC nas instâncias ECS, implante também o Redis.
Conecte-se remotamente às instâncias ECS do servidor e do cliente.
Para obter mais informações, consulte Conectar-se a uma instância Linux pelo Workbench.
Execute o seguinte comando para instalar o Redis em ambas as instâncias:
sudo yum install -y redisNa instância do servidor, execute o seguinte comando para iniciar o servidor Redis:
redis-server --bind 192.168.0.25 --port 6379 --protected-mode no --saveNotaNo comando, 192.168.0.25 é o endereço IP privado da ENI primária do servidor, e 6379 é a porta de escuta. Substitua esses valores pelos seus próprios.
[root@xxx Z ~]# redis-server --bind 192.168.0.25 --port 6379 --protected-mode no --save 69313:C 23 Apr 2025 15:14:05.302 # o000o000o000o Redis is starting o000o000o000o 69313:C 23 Apr 2025 15:14:05.302 # Redis version=6.2.17, bits=64, commit=00000000, modified=0, pid=69313, just started 69313:C 23 Apr 2025 15:14:05.302 # Configuration loaded 69313:M 23 Apr 2025 15:14:05.302 * monotonic clock: POSIX clock_gettime Redis 6.2.17 (00000000/0) 64 bit Running in standalone mode Port: 6379 PID: 69313 https://redis.io 69313:M 23 Apr 2025 15:14:05.303 # Server initialized 69313:M 23 Apr 2025 15:14:05.303 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. 69313:M 23 Apr 2025 15:14:05.303 * Ready to accept connectionsNo cliente Redis, conecte-se ao servidor e execute um teste.
Execute o seguinte comando para conectar-se ao servidor Redis:
redis-cli -h 192.168.0.25 -p 6379Execute o seguinte comando para iniciar um teste de estresse com o redis-benchmark.
O seguinte comando simula 100 clientes enviando 1.000.000 de solicitações SET ao servidor:
redis-benchmark -h 192.168.0.25 -p 6379 -n 1000000 -t set -c 100
Para um teste de estresse com carga mista, execute vários processos após ativar o SMC-R. Primeiro, implante um segundo cliente Redis seguindo as etapas acima. Depois, inicie os testes de estresse em ambos os clientes e monitore as operações por segundo (OPS) no servidor Redis.
Exemplo de comando para iniciar oito processos de teste de estresse SET em um cliente Redis:
redis-benchmark -h 192.168.0.25 -p 6379 -n 100000000 -t set --threads 8 -c 100Exemplo de comando para iniciar oito processos de teste de estresse GET em um cliente Redis:
redis-benchmark -h 192.168.0.25 -p 6379 -n 1000000 -t get --threads 8 -c 100Exemplo de comando para verificar as OPS no servidor Redis:
redis-cli -h 192.168.0.25 -p 6379 info | grep instantaneous_ops_per_secNotaExecute o comando em uma nova janela de conexão remota.
