5 pontos por GN⁺ 2024-07-29 | Ainda não há comentários. | Compartilhar no WhatsApp

Stack de rede do Linux

Recepção de pacotes de rede no Linux

  • No dispositivo de rede, a NIC (Network Interface Card) gera uma IRQ (Interrupt Request) para indicar que um pacote chegou
  • O manipulador de IRQ é executado com prioridade muito alta e bloqueia a geração de IRQs adicionais
  • O sistema softIRQ é usado para processar tarefas fora do contexto de IRQ do driver do dispositivo
  • A thread de kernel softIRQ é criada, e a estrutura softnet_data é criada
  • A NIC usa DMA (Direct Memory Access) para fazer com que os dados de rede sejam gravados no buffer em anel da RAM
  • O loop de polling do NAPI softIRQ é iniciado
  • O loop net_rx_action verifica a estrutura NAPI e encaminha os pacotes para napi_gro_receive
  • Os pacotes são encaminhados para a pilha de protocolos por meio de netif_receive_skb

Transmissão de rede no kernel Linux

  • Quando a aplicação envia uma mensagem, o cabeçalho TCP é criado e o manipulador L3 é chamado
  • O pacote é fragmentado, e a função de transmissão L2 é chamada
  • O driver coloca o pacote na fila do buffer em anel tx
  • A NIC busca o pacote na RAM e o transmite
  • Quando a transmissão é concluída, a NIC gera uma IRQ de hardware
  • O driver processa essa IRQ e agenda o sistema de polling do NAPI

Ajuste de desempenho de rede

HOWTO rápido

/proc/net/softnet_stat & /proc/net/sockstat
  • O arquivo /proc/net/softnet_stat fornece estatísticas de cada núcleo de CPU
  • O arquivo /proc/net/sockstat fornece estatísticas de uso de sockets
ss
  • ss é um utilitário para inspecionar estatísticas de sockets e pode ser usado para verificar o uso de memória
netstat
  • netstat é um utilitário de linha de comando que fornece estatísticas de conexões de rede e da pilha de protocolos
sysctl
  • É possível usar o comando sysctl para alterar configurações do sistema/rede
  • Você pode editar o arquivo /etc/sysctl.conf para alterar valores de forma permanente

Buffer em anel da NIC

  • O buffer em anel da NIC é um buffer FIFO de tamanho fixo, localizado na RAM
  • Pode ser necessário aumentar essa fila para acomodar conexões em rajada com mais suavidade

Resumo do GN⁺

  • Este guia explica em detalhes como a stack de rede do Linux funciona e apresenta vários métodos para otimizar o desempenho de rede
  • É importante entender o papel de IRQ e softIRQ no processo de recepção e transmissão de pacotes de rede
  • É possível melhorar o desempenho ajustando configurações do sistema com o comando sysctl e redimensionando o buffer em anel da NIC
  • O ajuste de desempenho de rede pode variar de acordo com os requisitos específicos do sistema, e é necessário experimentar diferentes configurações

Ainda não há comentários.

Ainda não há comentários.