Contexto:
Solicitação da equipe de operações: adicionar notas de uso para o NetACC, com revisão e validação item por item.
O NetACC é uma biblioteca em modo usuário que acelera aplicações TCP via eRDMA com interfaces de socket compatíveis, sem necessidade de alterações no código.
O NetACC está em preview público.
Casos de uso
O NetACC é ideal para cenários com alta sobrecarga de rede.
Cargas de trabalho com alta taxa de pacotes por segundo (PPS), especialmente tráfego de pacotes pequenos. O NetACC reduz a sobrecarga da CPU e melhora o throughput, como no processamento de requisições pelo Redis.
Cargas sensíveis à latência: o eRDMA oferece latência menor que o TCP e acelera as respostas de rede.
Conexões frequentes de curta duração: o NetACC acelera o estabelecimento de conexões, reduz o tempo de criação e melhora o desempenho.
Instale o NetACC
-
Métodos de instalação
-
Use o driver eRDMA para instalar o NetACC
O NetACC é instalado automaticamente junto com o driver eRDMA. Consulte Ativar eRDMA no tópico "Usar eRDMA".
-
Instale o NetACC separadamente
Para instalar uma versão específica do NetACC ou usá-lo temporariamente em uma instância ECS, execute:
sudo curl -fsSL https://netacc-release.oss-cn-hangzhou.aliyuncs.com/release/netacc_download_install.sh | sudo sh
-
-
Arquivo de configuração e parâmetros otimizados
Após a instalação, o sistema gera automaticamente o arquivo de configuração
/etc/netacc.conf. Ajuste os seguintes parâmetros conforme sua carga de trabalho:NACC_SOR_MSG_SIZE: tamanho do buffer.NACC_RDMA_MR_MIN_INC_SIZE: tamanho da primeira Memory Region (MR) registrada pelo RDMA.NACC_RDMA_MR_MAX_INC_SIZE: tamanho máximo da MR registrada pelo RDMA.NACC_SOR_CONN_PER_QP: conexões por Queue Pair (QP).NACC_SOR_IO_THREADS: número de threads do NetACC.
Veja a seguir um exemplo de arquivo de configuração:
Use o NetACC
Utilize o NetACC em aplicações executando o comando netacc_run ou definindo a variável de ambiente LD_PRELOAD. Leia a seção Notas de uso antes de prosseguir.
Execute o comando netacc_run
O netacc_run carrega o NetACC na inicialização da aplicação. Adicione o prefixo netacc_run ao comando da sua aplicação para iniciá-la com o NetACC ativado.
O netacc_run aceita parâmetros como -t (threads de I/O) e -p (conexões por QP). Os parâmetros especificados ao executar o comando netacc_run substituem os valores do arquivo de configuração.
-
Exemplos:
Os exemplos abaixo utilizam o Redis. Adicione o prefixo
netacc_runa um comando do Redis para iniciá-lo com o NetACC.-
Inicie o Redis com o NetACC:
netacc_run redis-server -
Inicie o redis-benchmark com o NetACC:
netacc_run redis-benchmark
-
Configure a variável de ambiente **LD_PRELOAD**
A variável de ambiente LD_PRELOAD especifica bibliotecas compartilhadas pré-carregadas na inicialização do programa. Defina-a como a biblioteca do NetACC na variável LD_PRELOAD para automatizar o carregamento.
-
Consulte a localização da biblioteca dinâmica do NetACC:
ldconfig -p | grep netaccSaída de exemplo:

-
Defina a variável de ambiente
LD_PRELOADpara a biblioteca compartilhada do NetACC:LD_PRELOAD=/lib64/libnetacc-preload.so your_applicationSubstitua
your_applicationpela aplicação desejada.Exemplos (Redis):
-
Inicie o Redis com o NetACC:
LD_PRELOAD=/lib64/libnetacc-preload.so redis-server -
Inicie o redis-benchmark com o NetACC:
LD_PRELOAD=/lib64/libnetacc-preload.so redis-benchmark
-
Monitore o NetACC
O netacc_ss é a ferramenta de monitoramento do NetACC. Execute o comando netacc_ss para verificar o status de transferência de dados dos processos TCP acelerados pelo NetACC. É possível executá-lo tanto no servidor quanto no cliente.
Consulte o status de transferência de dados dos processos TCP acelerados pelo NetACC:
netacc_ss -s all -p <Process ID>
Para consultar um id de processo, execute ps -ef | grep <Process name>.
Notas de uso
-
Apenas conexões TCP estabelecidas por meio de ENIs com o recurso eRDMA Interface (ERI) ativado são convertidas para conexões RDMA. As demais conexões permanecem como TCP.
NotaSe nenhuma das extremidades da comunicação possuir uma ENI com ERI ativado, o NetACC reverte para TCP.
-
Descritores de arquivo de socket RDMA não podem ser enviados a outros processos via IPC do kernel.
NotaAs conexões RDMA estão vinculadas a QPs específicos que não podem ser compartilhados entre processos.
O NetACC não suporta IPv6. Para evitar conflitos, desative o IPv6 executando
sysctl net.ipv6.conf.all.disable_ipv6=1.Não há suporte para atualizações a quente no NetACC. Interrompa todos os processos acelerados pelo NetACC antes de atualizá-lo.
O NetACC não suporta algumas opções de socket TCP, como SO_REUSEPORT, SO_ZEROCOPY e TCP_INQ.
O NetACC depende da glibc e não funciona em ambientes sem glibc, como Golang.
-
Antes de usar o NetACC, defina a memória bloqueável máxima como ilimitada executando
ulimit -l unlimited.NotaSe o valor de ulimit -l for muito baixo, o RDMA pode falhar ao registrar MRs que excedam o limite.
-
Quando uma aplicação acelerada pelo NetACC escuta em uma porta TCP, o NetACC também escuta em uma porta RDMA (porta TCP + 20000) para transferência de dados via RDMA.
NotaSe a porta RDMA estiver ocupada ou fora do intervalo válido, a conexão falhará. Aloque as portas adequadamente para evitar conflitos.
-
Um processo filho não herda conexões de socket estabelecidas pelo processo pai após uma chamada
fork().NotaO processo filho deve estabelecer uma nova conexão de socket.
-
A reutilização de QP é desativada por padrão.
Para ativar a reutilização de QP, defina conexões por QP (-p) com um valor maior que 1 por meio do parâmetro
NACC_SOR_CONN_PER_QPno arquivo de configuração do NetACC ou no comandonetacc_run.A reutilização de QP reduz a quantidade de QPs, a sobrecarga de gerenciamento e o consumo de recursos, melhorando a eficiência da comunicação em cenários de alta concorrência.
-
Com a reutilização de QP ativada, múltiplas conexões RDMA podem compartilhar um número de porta local, pois os números de porta identificam QPs, e não conexões individuais.
NotaSe suas aplicações exigirem números de porta local distintos (por exemplo, para serviços diferentes), desative a reutilização de QP para evitar conflitos de porta.
Use o NetACC em aplicações Redis
Benefícios do NetACC para aplicações Redis
-
Melhoria no throughput do sistema
O NetACC reduz a sobrecarga da CPU e aumenta o throughput em cargas de trabalho Redis com alto PPS.
-
Respostas de rede aceleradas
O NetACC aproveita a baixa latência do eRDMA para acelerar as respostas de rede do Redis.
NetACC em benchmarks de desempenho do Redis
O Redis-benchmark é um utilitário nativo do Redis que mede o desempenho do servidor simulando requisições simultâneas de clientes.
Cenário de teste
Use o NetACC com o redis-benchmark para simular 100 clientes em 4 threads enviando 5 milhões de requisições SET.
Pré-requisitos
Crie duas instâncias ECS compatíveis com eRDMA. Selecione Auto-install eRDMA Driver e eRDMA Interface para ativar o ERI na ENI primária. Use uma instância como servidor Redis e a outra como cliente.
Configurações das instâncias:
Imagem: Alibaba Cloud Linux 3
Tipo de instância: ecs.g8ae.4xlarge
-
Endereço ip privado da ENI primária: 172.17.0.90 (servidor) e 172.17.0.91 (cliente). Substitua pelos valores reais no seu benchmark.
NotaEste benchmark ativa o ERI nas ENIs primárias. 172.17.0.90 é o ip privado da ENI primária da instância do servidor Redis.
Se o ERI estiver ativado em ENIs secundárias, use seus endereços ip privados. Consulte Ativar eRDMA no tópico "Usar eRDMA".
Procedimento
-
Conecte-se a ambas as instâncias ECS (servidor e cliente Redis).
Consulte Usar o Workbench para fazer login em uma instância Linux via SSH.
-
Verifique se o driver eRDMA está instalado.
Após o início das instâncias, execute
ibv_devinfopara verificar o status do driver eRDMA.-
A saída a seguir indica que o driver está instalado.

-
A saída a seguir indica que o driver está sendo instalado. Aguarde alguns minutos e tente novamente.

-
-
Instale o Redis em ambas as instâncias:
sudo yum install -y redisA saída a seguir indica que o Redis foi instalado.

-
Faça o benchmark do desempenho do Redis com o
redis-benchmark.Realize um benchmark usando o NetACC
-
Na instância do servidor Redis, inicie o Redis com o NetACC:
netacc_run redis-server --port 6379 --protected-mode noNotaSubstitua 6379 pela sua porta real. Consulte Parâmetros comuns usados com o comando redis-server.
Este exemplo usa
netacc_run. Para outros métodos, consulte Usar o NetACC.
A saída a seguir indica que o Redis foi iniciado com sucesso.

-
Na instância cliente do Redis, inicie o redis-benchmark com o NetACC:
netacc_run redis-benchmark -h 172.17.0.90 -p 6379 -c 100 -n 5000000 -r 10000 --threads 4 -d 512 -t setNotaSubstitua 172.17.0.90 pelo ip do servidor Redis e 6379 pela porta real. Consulte Parâmetros de comando comuns usados com redis-benchmark.
Os resultados do benchmark podem variar conforme as condições da rede. Os dados neste tópico servem apenas como referência.
O resumo mostra aproximadamente 770.000 requisições/segundo. Para detalhes das métricas, consulte Métricas comuns nos resultados de benchmark do redis-benchmark.
Realize um benchmark sem o NetACC
-
Na instância do servidor Redis, inicie o Redis:
redis-server --port 6379 --protected-mode no --saveNotaSubstitua 6379 pela sua porta real. Consulte Parâmetros comuns usados com o comando redis-server.
A saída a seguir indica que o Redis foi iniciado com sucesso.

-
Na instância cliente do Redis, inicie o redis-benchmark:
redis-benchmark -h 172.17.0.90 -c 100 -n 5000000 -r 10000 --threads 4 -d 512 -t setNotaSubstitua 172.17.0.90 pelo ip do servidor Redis e 6379 pela porta real. Consulte Parâmetros de comando comuns usados com redis-benchmark.
Os resultados do benchmark podem variar conforme as condições da rede. Os dados neste tópico servem apenas como referência.
O resumo mostra aproximadamente 330.000 requisições/segundo. Para detalhes das métricas, consulte Métricas comuns nos resultados de benchmark do redis-benchmark.
-


