Todos os produtos
Search
Central de documentação

Elastic Compute Service:Acelere aplicações TCP com o NetACC

Última atualização: Nov 03, 2026

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.

Importante

O NetACC está em preview público.

Casos de uso

O NetACC é indicado 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 de CPU e aumenta a throughput, como quando o Redis processa requisições.

  • Cargas de trabalho sensíveis a latência: o eRDMA oferece latência menor que o TCP, acelerando as respostas de rede.

  • Conexões de curta duração frequentes: o NetACC acelera o estabelecimento de conexões, reduzindo o tempo de criação e melhorando o desempenho.

Instalar o NetACC

  • Métodos de instalação

    • Usar o driver eRDMA para instalar o NetACC

      O NetACC é instalado automaticamente com o driver eRDMA. Consulte Ativar o eRDMA no tópico "Usar o eRDMA".

    • Instalar 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 arquivo de configuração /etc/netacc.conf é gerado automaticamente. Você pode ajustar os seguintes parâmetros de acordo com a 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.

    O exemplo a seguir mostra um arquivo de configuração de amostra:

    Arquivo de configuração de amostra /etc/netacc.conf

    [netacc]
    # The size of a buffer. If a data block to be sent is large, you can increase the size to improve performance or reduce the size to save memory.
    # int
    NACC_SOR_MSG_SIZE=16384
    
    # The size of the first MR registered by RDMA. You can reduce the size to save memory.
    # Set this parameter to a value that is the Nth power multiple of 2 of the NACC_SOR_MSG_SIZE value. The minimum multiple is 1.
    NACC_RDMA_MR_MIN_INC_SIZE=16384
    
    # The maximum size of an MR registered by RDMA, which ranges from 1 MB to 512 MB. You can reduce the size to save memory.
    # Set this parameter to a value that is the Nth power multiple of 2 of the NACC_RDMA_MR_MIN_INC_SIZE value. The minimum multiple is 1.
    NACC_RDMA_MR_MAX_INC_SIZE=8388608
    
    # The number of connections per QP. You can increase the value to improve performance. In specific scenarios, set this parameter to 1.
    # int
    NACC_SOR_CONN_PER_QP=1
    
    # The number of NetACC threads. If the throughput is high, increase the value.
    # int
    NACC_SOR_IO_THREADS=1
    
    # The expiration time of empty QPs. Unit: milliseconds. A value of 0 specifies that the empty QPs immediately expire. A value of -1 specifies that the empty QPs never expire.
    NACC_EMPTY_QP_EXPIRE_MS=60000
    
    # The maximum number of empty QPs allowed.
    NACC_EMPTY_QP_MAX_ALL=100
    
    # The maximum number of empty QPs allowed for each destination address.
    NACC_EMPTY_QP_MAX_PER=10
    
    # The probability of using RDMA to establish connections. Valid values: 0 to 100.
    NACC_CONNECT_RDMA_PERCENT=100
    
    # Specifies whether RDMA is enabled by default.
    NACC_ENABLE_RDMA_DEFAULT=1
    
    # The log level.
    # 0: TRACE
    # 1: DEBUG
    # 2: INFO
    # 3: WARN
    # 4: ERROR
    # 5: FATAL
    NACC_LOG_LEVEL=3
    
    # The log path.
    NACC_LOG_PATH="/tmp/netacc.log"
    
    # The following parameters are infrequently used or do not need to be configured.
    
    # The thread affinity.
    # string
    NACC_SOR_AFFINITY=""
    
    # Specifies whether to preferentially use TCP to establish a connection.
    # bool
    NACC_CONN_TCP_FIRST=0

Usar o NetACC

Use 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.

Executar 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.

Parâmetros do comando netacc_run

netacc_run -h
Usage: netacc_run [ OPTIONS ] COMMAND

Run COMMAND using NetACC for TCP sockets

OPTIONS:
   -f <path>   set config file, default /etc/netacc.conf
   -p <num>    set max connections per QP, default 1
   -t <num>    set netacc io threads, default 4
   -s <num>    set netacc message size, default 16384
   -F <num>    fast connect mode, default 0
   -d          enable debug mode
   -T          use TCP first in connect
   -P <num>    polling cq time ms
   -A <str>    affinity CPU list, 0 | 1-3 | 1,3,4
   -i <num>    set cq comp_vector, default 0
   -h          display this message
   -v          display version info
  • Exemplos:

    Os exemplos a seguir usam o Redis. Adicione o prefixo netacc_run a um comando do Redis para iniciá-lo com o NetACC.

    • Iniciar o Redis com o NetACC:

      netacc_run redis-server
    • Iniciar o redis-benchmark com o NetACC:

      netacc_run redis-benchmark

Configurar a variável de ambiente LD_PRELOAD

A variável de ambiente LD_PRELOAD especifica as 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.

  1. Consulte a localização da biblioteca dinâmica do NetACC:

    ldconfig -p | grep netacc

    Saída de amostra:

    [ecs-user@i          ~]$ ldconfig -p | grep netacc
    libnetacc-preload.so (libc6,x86-64) => /lib64/libnetacc-preload.so
    libnetacc_cx.so (libc6,x86-64) => /lib64/libnetacc_cx.so
    [ecs-user@i          ~]$
  2. Defina a variável de ambiente LD_PRELOAD como a biblioteca compartilhada do NetACC:

    LD_PRELOAD=/lib64/libnetacc-preload.so your_application

    Substitua your_application pela aplicação de destino.

    Exemplos (Redis):

    • Iniciar o Redis com o NetACC:

      LD_PRELOAD=/lib64/libnetacc-preload.so redis-server
    • Iniciar o redis-benchmark com o NetACC:

      LD_PRELOAD=/lib64/libnetacc-preload.so redis-benchmark

    Configurar a variável de ambiente LD_PRELOAD em um script

    Para carregar automaticamente o NetACC para aplicações usadas com frequência ou gerenciar várias aplicações com um script, defina LD_PRELOAD em um script wrapper. Por exemplo, crie um script chamado run_with_netacc.

    #!/bin/bash
    LD_PRELOAD=/lib64/libnetacc-preload.so $@

    Inicie uma aplicação com o NetACC:

    ./run_with_netacc.sh your_application

    Exemplos (Redis):

    • Iniciar o Redis com o NetACC:

      ./run_with_netacc.sh redis-server
    • Iniciar o redis-benchmark com o NetACC:

      ./run_with_netacc.sh redis-benchmark

Monitorar 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.

Comando netacc_ss

netacc_ss -h
Usage:
 netacc_ss: [-p] <pid> [options]...
 Show monitoring information of specified netacc process

Options:
 -c   clear unused sock file
 -h   display this help
 -s   display specified monitoring metric[s]. [all|cfg|cnt|mem|qp|sock]
      all: all monitoring information
      cfg: configuration information
      cnt: counter information[default]
      mem: memory information
      qp : queue pair information
      sock: socket information
 -v   display netacc version

Examples:
 netacc_ss -p 12345 -s mem,cnt

Consulte o status de transferência de dados dos processos TCP acelerados pelo NetACC:

netacc_ss -s all -p <Process ID>
Nota

Para consultar um ID de processo, execute ps -ef | grep <Process name>.

Notas de uso

  • Apenas as 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.

    Nota

    Se nenhum dos lados da comunicação tiver uma ENI com ERI ativado, o NetACC usa o TCP como fallback.

  • Os descritores de arquivo de socket RDMA não podem ser enviados para outros processos via IPC do kernel.

    Nota

    As conexões RDMA estão vinculadas a QPs específicos que não podem ser compartilhados entre processos.

  • O NetACC não oferece suporte ao IPv6. Para evitar conflitos, desative o IPv6 executando sysctl net.ipv6.conf.all.disable_ipv6=1.

  • O NetACC não oferece suporte a atualizações a quente. Pare todos os processos acelerados pelo NetACC antes de atualizá-lo.

  • O NetACC não oferece suporte a determinadas opções de socket TCP, como SO_REUSEPORT, SO_ZEROCOPY e TCP_INQ.

  • O NetACC depende do glibc e não pode ser executado em ambientes sem glibc, como o Golang.

  • Antes de usar o NetACC, defina o limite máximo de memória bloqueável como ilimitado executando ulimit -l unlimited.

    Nota

    Se 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.

    Nota

    Se a porta RDMA estiver ocupada ou fora do intervalo válido, a conexão falhará. Aloque as portas corretamente para evitar conflitos.

  • Um processo filho não herda as conexões de socket estabelecidas pelo processo pai após uma chamada fork().

    Nota

    O processo filho deve estabelecer uma nova conexão de socket.

  • A reutilização de QP está 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_QP no arquivo de configuração do NetACC ou no comando netacc_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, várias conexões RDMA podem compartilhar um número de porta local, pois os números de porta identificam QPs, não conexões individuais.

      Nota

      Se as 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.

Usar o NetACC em aplicações Redis

Benefícios do NetACC para aplicações Redis

  • Aumento da throughput do sistema

    O NetACC reduz a sobrecarga de CPU e aumenta a throughput para 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.

Benchmarks de desempenho do Redis com o NetACC

O Redis-benchmark é um utilitário integrado do Redis que mede o desempenho do servidor simulando requisições de clientes concorrentes.

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.

Parâmetros comuns usados com o comando redis-server

O comando redis-server inicia o servidor Redis. Execute redis-server -h para ver os parâmetros disponíveis. Exemplo:

redis-server --port 6379 --protected-mode no
  • --port 6379: a porta para iniciar o Redis. Padrão: 6379.

  • --protected-mode no: desativa o modo protegido. Quando o modo protegido está ativado, o Redis aceita apenas conexões do localhost (127.0.0.1) e rejeita conexões externas. Definir esse parâmetro como no permite conexões de todos os endereços IP.

    Importante

    Desativar o modo protegido em um ambiente de produção expõe o servidor a riscos de segurança. Tenha cautela em ambientes de rede abertos.

Parâmetros comuns usados com o redis-benchmark

O redis-benchmark é uma ferramenta de teste de carga do Redis que simula vários clientes enviando requisições. Execute redis-benchmark --help para ver os parâmetros disponíveis. Exemplo:

redis-benchmark -h 172.17.0.90 -p 6379 -c 100 -n 5000000 -r 10000 --threads 4 -d 512 -t set
  • -h 172.17.0.90: o hostname ou endereço IP do servidor Redis. Neste exemplo, defina como 172.17.0.90.

  • -p 6379: a porta do Redis. Padrão: 6379.

    Nota

    Para verificar a porta do Redis, execute sudo grep "^port" /<Path in which the redis.conf file is stored>/redis.conf. Por padrão, o redis.conf está em /etc/redis.conf.

  • -c 100: o número de conexões simultâneas.

  • -n 5000000: o número total de requisições.

  • -r 10000: o intervalo de chaves aleatórias. O comando SET usa inteiros aleatórios de 0 a 9999 como parte das chaves.

  • --threads 4: o número de threads. Por padrão, o redis-benchmark usa uma thread.

  • -d 512: o tamanho dos dados por requisição SET em bytes.

  • -t set: executa apenas o teste especificado. O parâmetro -t é seguido pelo nome do comando a ser testado. Aqui, set testa apenas o comando SET.

Esse comando usa 4 threads para estabelecer 100 conexões simultâneas com o servidor Redis em 172.17.0.90 e envia 5 milhões de requisições SET com payloads de 512 bytes usando chaves aleatórias de 0 a 9999.

Métricas comuns nos resultados do benchmark do redis-benchmark

  • Resumo de throughput:

    rps: requisições que o servidor Redis processa por segundo. Por exemplo, 332933.81 requests per second significa aproximadamente 332.934 requisições/segundo.

  • Resumo de latência (unidade: milissegundos):

    • avg: o tempo médio de resposta em todas as requisições.

    • min: o tempo mínimo de resposta em todas as requisições.

    • p50: 50% das requisições são concluídas dentro dessa latência.

    • p95: 95% das requisições são concluídas dentro dessa latência.

    • p99: 99% das requisições são concluídas dentro dessa latência.

    • max: o tempo máximo de resposta em todas as requisições.

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.

    Nota
    • Este 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 nas ENIs secundárias, use os endereços IP privados delas. Consulte Ativar o eRDMA no tópico "Usar o eRDMA".

Exemplo de como configurar parâmetros específicos durante a criação de instâncias ECS

Observe os seguintes parâmetros ao criar as instâncias. Para outros parâmetros, consulte Iniciar instâncias ECS personalizadas.

  • Instances & Images: selecione um tipo de instância compatível com eRDMA e instale o driver eRDMA.

    • Instance: consulte Limitations.

    • Images: selecione Public Image e depois selecione Install eRDMA Driver. O driver eRDMA é instalado automaticamente quando a instância é iniciada.

  • ENIs: à direita de Primary ENI, ative o recurso ERI para vincular um ERI à instância ECS.

    Nota

    Ao criar uma instância de nível empresarial, você pode ativar o recurso ERI apenas para a ENI primária. Se precisar configurar o eRDMA para uma ENI secundária, ative o recurso ERI para a ENI secundária no console ou chamando uma operação de API. Para mais informações, consulte Elastic RDMA network interface (ERI).

Procedimento

  1. Conecte-se a ambas as instâncias ECS (servidor Redis e cliente).

    Consulte Usar o Workbench para fazer logon em uma instância Linux via SSH.

  2. Verifique se o driver eRDMA está instalado.

    Após o início das instâncias, execute ibv_devinfo para verificar o status do driver eRDMA.

    • A saída a seguir indica que o driver está instalado.

      [root@redis-server ~]# ibv_devinfo
      hca_id: erdma_0
      	transport:			eRDMA (1)
      	fw_ver:				0.2.0
      	node_guid:			0216:3eff:fe10:d924
      	sys_image_guid:			0216:3eff:fe10:d924
      	vendor_id:			0x1ded
      	vendor_part_id:			4223
      	hw_ver:				0x0
      	phys_port_cnt:			1
      		port:	1
      			state:			PORT_ACTIVE (4)
      			max_mtu:		1024 (3)
      			active_mtu:		1024 (3)
      			sm_lid:			0
      			port_lid:		0
      			port_lmc:		0x00
      			link_layer:		Ethernet
      
      [root@redis-server ~]#
    • A saída a seguir indica que o driver está sendo instalado. Aguarde alguns minutos e tente novamente.

      [root@ixxxxxxxxxxxxx Z ~]# ibv_deninfo
      -bash: ibv_deninfo: command not found
  3. Instale o Redis em ambas as instâncias:

    sudo yum install -y redis

    A saída a seguir indica que o Redis foi instalado.

    [root@redis-server ~]# sudo yum install -y redis
    Last metadata expiration check: 0:06:35 ago on Tue 03 Sep 2024 10:50:07 AM CST.
    Dependencies resolved.
    ================================================================================
     Package          Architecture       Version              Repository       Size
    ================================================================================
    Installing:
     redis            x86_64             6.2.7-1.0.2.al8      alinux3-updates  1.2 M
    
    Transaction Summary
    ================================================================================
    Install  1 Package
    
    Total download size: 1.2 M
    Installed size: 4.3 M
    Downloading Packages:
    redis-6.2.7-1.0.2.al8.x86_64.rpm                    15 MB/s | 1.2 MB     00:00
    --------------------------------------------------------------------------------
    Total                                                15 MB/s | 1.2 MB     00:00
    Running transaction check
    Transaction check succeeded.
    Running transaction test
    Transaction test succeeded.
    Running transaction
      Preparing        :                                                        1/1
      Running scriptlet: redis-6.2.7-1.0.2.al8.x86_64                           1/1
      Installing       : redis-6.2.7-1.0.2.al8.x86_64                           1/1
      Running scriptlet: redis-6.2.7-1.0.2.al8.x86_64                           1/1
      Verifying        : redis-6.2.7-1.0.2.al8.x86_64                           1/1
    
    Installed:
      redis-6.2.7-1.0.2.al8.x86_64
    
    Complete!
    [root@redis-server ~]#
  4. Execute o benchmark de desempenho do Redis com o redis-benchmark.

    Executar um benchmark usando o NetACC
    1. Na instância do servidor Redis, inicie o Redis com o NetACC:

      netacc_run redis-server --port 6379 --protected-mode no
      Nota

      A saída a seguir indica que o Redis foi iniciado com êxito.

      [root@redis-server ~]# netacc_run redis-server --port 6379 --protected-mode no
      114379:C 03 Sep 2024 10:59:24.477 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
      114379:C 03 Sep 2024 10:59:24.477 # Redis version=6.2.7, bits=64, commit=00000000, modified=0, pid=114379, just started
      114379:C 03 Sep 2024 10:59:24.477 # Configuration loaded
      114379:M 03 Sep 2024 10:59:24.478 * monotonic clock: POSIX clock_gettime
      114379:M 03 Sep 2024 10:59:24.479 # A key '__redis__compare_helper' was added to Lua globals which is not on the globals allow list nor listed on the deny list.
      
                      Redis 6.2.7 (00000000/0) 64 bit
      
                      Running in standalone mode
                      Port: 6379
                      PID: 114379
      
                      https://redis.io
      
      114379:M 03 Sep 2024 10:59:24.479 # Server initialized
      114379:M 03 Sep 2024 10:59:24.479 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. 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.
      114379:M 03 Sep 2024 10:59:24.479 * Ready to accept connections
    2. Na instância do cliente 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 set
      Nota
      • Substitua 172.17.0.90 pelo IP do servidor Redis e 6379 pela porta real. Consulte Parâmetros comuns usados com o redis-benchmark.

      • Os resultados do benchmark podem variar de acordo com as condições da rede. Os dados neste tópico são apenas para referência.

      Resultado de amostra do benchmark do Redis

      ====== SET ======
        5000000 requests completed in 6.52 seconds
        100 parallel clients
        512 bytes payload
        keep alive: 1
        host configuration "save": 3600 1 300 100 60 10000
        host configuration "appendonly": no
        multi-thread: yes
        threads: 4
      
      Latency by percentile distribution:
      0.000% <= 0.039 milliseconds (cumulative count 3)
      50.000% <= 0.127 milliseconds (cumulative count 2677326)
      75.000% <= 0.143 milliseconds (cumulative count 3873096)
      87.500% <= 0.151 milliseconds (cumulative count 4437348)
      93.750% <= 0.159 milliseconds (cumulative count 4715347)
      96.875% <= 0.175 milliseconds (cumulative count 4890339)
      98.438% <= 0.183 milliseconds (cumulative count 4967042)
      99.609% <= 0.191 milliseconds (cumulative count 4991789)
      99.902% <= 0.207 milliseconds (cumulative count 4995847)
      99.951% <= 0.263 milliseconds (cumulative count 4997733)
      99.976% <= 0.303 milliseconds (cumulative count 4998853)
      99.988% <= 0.343 milliseconds (cumulative count 4999403)
      99.994% <= 0.367 milliseconds (cumulative count 4999704)
      99.997% <= 0.391 milliseconds (cumulative count 4999849)
      99.998% <= 2.407 milliseconds (cumulative count 4999924)
      99.999% <= 5.407 milliseconds (cumulative count 4999962)
      100.000% <= 6.847 milliseconds (cumulative count 4999981)
      100.000% <= 8.423 milliseconds (cumulative count 4999991)
      100.000% <= 8.919 milliseconds (cumulative count 4999996)
      100.000% <= 9.271 milliseconds (cumulative count 4999998)
      100.000% <= 9.471 milliseconds (cumulative count 4999999)
      100.000% <= 9.583 milliseconds (cumulative count 5000000)
      100.000% <= 9.583 milliseconds (cumulative count 5000000)
      
      Cumulative distribution of latencies:
      18.820% <= 0.103 milliseconds (cumulative count 941003)
      99.917% <= 0.207 milliseconds (cumulative count 4995847)
      99.977% <= 0.303 milliseconds (cumulative count 4998853)
      99.998% <= 0.407 milliseconds (cumulative count 4999879)
      99.998% <= 0.503 milliseconds (cumulative count 4999903)
      99.998% <= 0.703 milliseconds (cumulative count 4999904)
      99.998% <= 0.807 milliseconds (cumulative count 4999905)
      99.998% <= 0.903 milliseconds (cumulative count 4999906)
      99.998% <= 1.007 milliseconds (cumulative count 4999908)
      99.998% <= 1.103 milliseconds (cumulative count 4999909)
      99.998% <= 1.207 milliseconds (cumulative count 4999912)
      99.998% <= 1.407 milliseconds (cumulative count 4999913)
      99.998% <= 1.503 milliseconds (cumulative count 4999915)
      99.998% <= 1.607 milliseconds (cumulative count 4999916)
      99.998% <= 1.703 milliseconds (cumulative count 4999917)
      99.998% <= 1.807 milliseconds (cumulative count 4999918)
      99.998% <= 1.903 milliseconds (cumulative count 4999919)
      99.998% <= 2.103 milliseconds (cumulative count 4999920)
      99.999% <= 3.103 milliseconds (cumulative count 4999931)
      99.999% <= 4.103 milliseconds (cumulative count 4999944)
      99.999% <= 5.103 milliseconds (cumulative count 4999958)
      99.999% <= 6.103 milliseconds (cumulative count 4999971)
      100.000% <= 7.103 milliseconds (cumulative count 4999984)
      100.000% <= 8.103 milliseconds (cumulative count 4999989)
      100.000% <= 9.103 milliseconds (cumulative count 4999996)
      100.000% <= 10.103 milliseconds (cumulative count 5000000)
      
      Summary:
        throughput summary: 767341.94 requests per second
        latency summary (msec):
                avg       min       p50       p95       p99       max
              0.126     0.032     0.127     0.167     0.183     9.583

      O Summary mostra aproximadamente 770.000 requisições/segundo. Para detalhes das métricas, consulte Métricas comuns nos resultados do benchmark do redis-benchmark.

    Usar o netacc_ss para monitorar o servidor Redis durante o benchmark

    Durante o benchmark, use o netacc_ss na instância do servidor Redis para monitorá-lo.

    • Consulte o ID do processo redis-server:

      ps -ef | grep redis-server

      A saída a seguir mostra que o ID do processo redis-server é 114379.

      [root@redis-server ~]# ps -ef | grep redis-server
      root    114379  51259  8 10:59 pts/0    00:00:09 redis-server *:6379
      root    114628  114601  0 11:01 pts/2    00:00:00 grep --color=auto redis-server
      [root@redis-server ~]#
    • Consulte o status de conexão e transferência de dados do Redis:

      netacc_ss -p 114379 -s all
      Nota

      Substitua 114379 pelo ID real do processo Redis. Consulte Comando netacc_ss.

      A saída mostra uma conexão RDMA porque o ERI está ativado em ambas as instâncias. As quatro colunas mais à direita mostram contagens e volumes de mensagens.

      [root@redis-server ~]# netacc_ss -p 114379 -s all
      ************ messages below from process 114379 ************
      [NACC_AUTO_BIND] = [1]
      [NACC_CONNECT_RDMA_PERCENT] = [100]
      [NACC_CONN_TCP_FIRST] = [0]
      [NACC_CQ_COMP_VECTOR] = [-1]
      [NACC_CQ_FLUSH_BACH_SIZE] = [64]
      [NACC_DIS_MONITOR] = [0]
      [NACC_EMPTY_QP_EXPIRE_MS] = [60000]
      [NACC_EMPTY_QP_MAX_ALL] = [100]
      [NACC_EMPTY_QP_MAX_PER_GROUP] = [10]
      [NACC_ENABLE_RDMA_DEFAULT] = [1]
      [NACC_FAST_CONN_MODE] = [0]
      [NACC_INIT_MODE] = [0]
      [NACC_LOG_LEVEL] = [3]
      [NACC_LOG_TO_STDERR] = [0]
      [NACC_MEM_SIZE_FALLBACK_MB] = [-1]
      [NACC_POLLING_TIME_US] = [0]
      [NACC_RDMA_FORK_SAFE] = [1]
      [NACC_RDMA_MAX_INLINE_SIZE] = [64]
      [NACC_RDMA_MAX_QP_WR] = [32]
      [NACC_RDMA_MR_MAX_INC_SIZE] = [8388608]
      [NACC_RDMA_MR_MIN_INC_SIZE] = [524288]
      [NACC_SINGLE_THREAD_MODE] = [0]
      [NACC_SOR_CONN_PER_QP] = [1]
      [NACC_SOR_IO_THREADS] = [1]
      [NACC_SOR_MSG_SIZE] = [16384]
      [NACC_SOR_WR_PER_CONN] = [32]
      [NACC_ALLOW_CONNECT_PORTS] = []
      [NACC_ALLOW_LISTEN_PORTS] = []
      [NACC_LOG_PATH] = [/tmp/netacc.log]
      [NACC_SOR_AFFINITY] = []
      GIT_COMMIT_HASH = bdc5dbec27bc0f1670121b379c0d7300b1bd8887
      
      type    fd    state    qp-id    local-address        peer-address          pid      conn-id  send_buffers    recv_messages            recv_bytes    send_messages    send_bytes
      socket  223   10       200      172.17.0.90:26379    172.17.0.91:54509     114379   0        0               13055       7258580      13055        65275
      socket  221   10       199      172.17.0.90:26379    172.17.0.91:55931     114379   0        0               13060       7261360      13060        65300
      socket  219   10       198      172.17.0.90:26379    172.17.0.91:40734     114379   0        0               13056       7259136      13056        65280
      socket  217   10       197      172.17.0.90:26379    172.17.0.91:56005     114379   0        0               13065       7264140      13065        65325
      socket  215   10       196      172.17.0.90:26379    172.17.0.91:37587     114379   0        0               13058       7260248      13058        65290
      socket  213   10       195      172.17.0.90:26379    172.17.0.91:56468     114379   0        0               13062       7262472      13062        65310
      socket  211   10       194      172.17.0.90:26379    172.17.0.91:53755     114379   0        0               13055       7258580      13055        65275
    Executar um benchmark sem o NetACC
    1. Na instância do servidor Redis, inicie o Redis:

      redis-server --port 6379 --protected-mode no --save
      Nota

      Substitua 6379 pela porta real. Consulte Parâmetros comuns usados com o comando redis-server.

      A saída a seguir indica que o Redis foi iniciado com êxito.

      [root@redis-server ~]# redis-server --port 6379 --protected-mode no --save
      114198:C 03 Sep 2024 10:57:28.957 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
      114198:C 03 Sep 2024 10:57:28.957 # Redis version=6.2.7, bits=64, commit=00000000, modified=0, pid=114198, just started
      114198:C 03 Sep 2024 10:57:28.957 # Configuration loaded
      114198:M 03 Sep 2024 10:57:28.958 * monotonic clock: POSIX clock_gettime
      114198:M 03 Sep 2024 10:57:28.958 # A key '__redis__compare_helper' was added to Lua globals which is not on the globals allow list nor listed on the deny list.
      
                      Redis 6.2.7 (00000000/0) 64 bit
                      Running in standalone mode
                      Port: 6379
                      PID: 114198
      
                      https://redis.io
      
      114198:M 03 Sep 2024 10:57:28.958 # Server initialized
      114198:M 03 Sep 2024 10:57:28.958 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. 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.
      114198:M 03 Sep 2024 10:57:28.958 * Ready to accept connections
    2. Na instância do cliente Redis, inicie o redis-benchmark:

       redis-benchmark -h 172.17.0.90 -c 100 -n 5000000 -r 10000 --threads 4 -d 512 -t set
      Nota
      • Substitua 172.17.0.90 pelo IP do servidor Redis e 6379 pela porta real. Consulte Parâmetros comuns usados com o redis-benchmark.

      • Os resultados do benchmark podem variar de acordo com as condições da rede. Os dados neste tópico são apenas para referência.

      Resultado de amostra do benchmark do Redis

      ====== SET ======
        5000000 requests completed in 15.02 seconds
        100 parallel clients
        512 bytes payload
        keep alive: 1
        host configuration "save":
        host configuration "appendonly": no
        multi-thread: yes
        threads: 4
      
      Latency by percentile distribution:
      0.000% <= 0.055 milliseconds (cumulative count 27)
      50.000% <= 0.287 milliseconds (cumulative count 2635010)
      75.000% <= 0.335 milliseconds (cumulative count 3782931)
      87.500% <= 0.367 milliseconds (cumulative count 4459136)
      93.750% <= 0.391 milliseconds (cumulative count 4720397)
      96.875% <= 0.415 milliseconds (cumulative count 4855130)
      98.438% <= 0.439 milliseconds (cumulative count 4936478)
      99.219% <= 0.455 milliseconds (cumulative count 4965765)
      99.609% <= 0.471 milliseconds (cumulative count 4984031)
      99.805% <= 0.487 milliseconds (cumulative count 4993326)
      99.902% <= 0.495 milliseconds (cumulative count 4995579)
      99.951% <= 0.511 milliseconds (cumulative count 4997659)
      99.976% <= 0.551 milliseconds (cumulative count 4998848)
      99.988% <= 0.599 milliseconds (cumulative count 4999468)
      99.994% <= 0.631 milliseconds (cumulative count 4999722)
      99.997% <= 0.663 milliseconds (cumulative count 4999862)
      99.998% <= 0.695 milliseconds (cumulative count 4999924)
      99.999% <= 0.759 milliseconds (cumulative count 4999964)
      100.000% <= 0.807 milliseconds (cumulative count 4999982)
      100.000% <= 1.935 milliseconds (cumulative count 4999993)
      100.000% <= 2.071 milliseconds (cumulative count 4999996)
      100.000% <= 2.111 milliseconds (cumulative count 4999998)
      100.000% <= 2.119 milliseconds (cumulative count 4999999)
      100.000% <= 2.143 milliseconds (cumulative count 5000000)
      100.000% <= 2.143 milliseconds (cumulative count 5000000)
      
      Cumulative distribution of latencies:
      0.028% <= 0.103 milliseconds (cumulative count 1377)
      0.985% <= 0.207 milliseconds (cumulative count 49228)
      60.094% <= 0.303 milliseconds (cumulative count 3004705)
      96.325% <= 0.407 milliseconds (cumulative count 4816230)
      99.938% <= 0.503 milliseconds (cumulative count 4996887)
      99.991% <= 0.607 milliseconds (cumulative count 4999546)
      99.999% <= 0.703 milliseconds (cumulative count 4999927)
      100.000% <= 0.807 milliseconds (cumulative count 4999982)
      100.000% <= 0.903 milliseconds (cumulative count 4999987)
      100.000% <= 1.903 milliseconds (cumulative count 4999990)
      100.000% <= 2.007 milliseconds (cumulative count 4999995)
      100.000% <= 2.103 milliseconds (cumulative count 4999997)
      100.000% <= 3.103 milliseconds (cumulative count 5000000)
      
      Summary:
        throughput summary: 332955.97 requests per second
        latency summary (msec):
                avg       min       p50       p95       p99       max
              0.292     0.048     0.287     0.399     0.447     2.143

      O Summary mostra aproximadamente 330.000 requisições/segundo. Para detalhes das métricas, consulte Métricas comuns nos resultados do benchmark do redis-benchmark.