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.