O Elastic RDMA (eRDMA) oferece latência ultrabaixa para acelerar o processamento de solicitações. Este tópico descreve como implantar o Shared Memory Communications (SMC) e o Redis com eRDMA e, em seguida, avaliar seu desempenho.
Informações de contexto
O Shared Memory Communications (SMC) é uma pilha de protocolos de alto desempenho no espaço do kernel que usa memória compartilhada e é compatível com a camada de soquetes. O SMC tem duas versões, de acordo com a tecnologia de memória compartilhada usada: SMC over DMA (SMC-D), baseado na memória compartilhada interna (ISM), e o SMC over RDMA (SMC-R), baseado no acesso remoto direto à memória (RDMA). Para obter mais informações, consulte SMC applicability.
O Alibaba Cloud Linux 3 usa o Elastic RDMA (eRDMA) para fornecer a aceleração do SMC-R. Para usar o SMC-R no Alibaba Cloud, é necessário criar instâncias do ECS compatíveis com eRDMA.
Pré-requisitos
Crie duas instâncias do ECS compatíveis com eRDMA. Durante a criação das instâncias, selecione a opção para instalar automaticamente o driver de eRDMA e ativar a interface de eRDMA na ENI primária. Uma instância do ECS servirá como servidor e a outra como cliente. Para obter mais informações, consulte Create an instance by using the wizard.
Este tópico utiliza 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.
NotaEste tópico usa um exemplo no qual a interface de 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 da instância do servidor.
Se ativar a interface de 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 Step 3: Bind an ERI to an ECS instance.
Etapa 1: Implantar o SMC
-
Conecte-se remotamente às instâncias do ECS do servidor e do cliente.
Para obter mais informações, consulte Connect to a Linux instance by using Workbench.
-
Em ambas as instâncias do ECS, execute o comando a seguir para implantar o módulo SMC-R:
modprobe smc && modinfo smc -
Em ambas as instâncias, execute o comando a seguir para desativar o IPv6 e permitir o estabelecimento de conexões eRDMA pela interface de eRDMA.
ImportanteOs dispositivos eRDMA do Alibaba Cloud e o SMC atualmente não oferecem suporte a endereços IPv6. Se sua aplicação usar um endereço IPv6, o SMC fará fallback para TCP. Para obter mais informações, consulte SMC falls back to TCP with IPv6 addresses.
A partir do
ANCK 5.10.134-17.3, o SMC oferece suporte a endereçosIPv4-mapped IPv6.
sysctl net.ipv6.conf.all.disable_ipv6=1 -
Em ambas as instâncias, execute o comando a seguir para habilitar o SMC para eRDMA e priorizar o tráfego por eRDMA.
Os soquetes TCP recém-criados são convertidos em soquetes SMC. Os soquetes TCP existentes não são afetados.
sysctl net.smc.tcp2smc=1 -
Em ambas as instâncias, execute o comando a seguir 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 monitorar e diagnosticar o SMC-R. Ele oferece ferramentas completas de diagnóstico e rastreamento para o SMC-R, incluindo:
smcr: fornece estatísticas sobre os recursos do SMC-R.
smcss: fornece informações sobre os soquetes SMC.
yum install -y smc-toolsApós concluir a 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 do ECS, implante o Redis.
-
Conecte-se remotamente às instâncias do ECS do servidor e do cliente.
Para obter mais informações, consulte Connect to a Linux instance by using Workbench.
-
Execute o comando a seguir para instalar o Redis em ambas as instâncias:
sudo yum install -y redis -
Na instância do servidor, execute o comando a seguir 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.
[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 connections -
No cliente Redis, conecte-se ao servidor e execute um teste.
-
Execute o comando a seguir para se conectar ao servidor Redis:
redis-cli -h 192.168.0.25 -p 6379 -
Execute o comando a seguir para iniciar um teste de estresse com o redis-benchmark.
O comando a seguir simula 100 clientes enviando 1.000.000 de solicitações SET para o servidor:
redis-benchmark -h 192.168.0.25 -p 6379 -n 1000000 -t set -c 100
-
Para um teste de estresse com carga de trabalho mista, execute vários processos após ativar o SMC-R. Primeiro, implante um segundo cliente Redis seguindo as etapas anteriores. Em seguida, 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 100 -
Exemplo 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 100 -
Exemplo 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.