Há um servidor para medições em execução no Ubuntu no meu laboratório. E existe o programa C, que recebe dados através da conexão TCP e deve enviar o mais rapidamente possível uma resposta.
Configuração
- Processadores: 2 processadores x 4 núcleos - CPU Intel (R) Xeon (E) E5345 a 2,33 GHz
- RAM: 12 GB
- NIC: Controladora Gigabit Ethernet da Intel Corporation 80003ES2LAN / Controladora Gigabit Ethernet 82546EB
- Comutador de rede: Cisco Catalyst 2960
- Informação de dados: Os blocos de dados são fornecidos aprox. cada 10 milissegundos. O tamanho do bloco de dados é de aprox. 1000 bytes.
A latência da rede ao receber pacotes é muito crítica (dezenas de microssegundos são importantes). Otimizei o programa ao máximo, mas não tenho experiência em ajustar o Ubuntu.
O que pode ser configurado no Ubuntu para reduzir o atraso local do processamento / envio de pacotes?
Respostas:
Honestamente, eu não usaria o Ubuntu para isso ... mas há opções que podem ser aplicadas a qualquer variante do Linux.
Você deseja criar seus buffers de pilha de rede:
Se o aplicativo estiver gravando no disco, talvez seja necessário alterar o agendador / elevador (por exemplo, o
deadline
elevador).No nível do servidor, você pode modificar o governador da CPU e o gerenciamento de energia e frequência da CPU (Estados-P, Estados-C).
No nível do sistema operacional, você pode alterar a prioridade em tempo real do seu aplicativo (
chrt
), otimizando para reduzir as interrupções, fixando-o a uma CPU ou grupo de CPUs (taskset
) e interrompendo quaisquer serviços ou daemons desnecessários.Você também pode ver algumas sugestões em: Como solucionar problemas de latência entre dois hosts Linux
É difícil ser mais específico sem conhecer o hardware ou o equipamento de rede envolvido.
fonte
Se você está seguindo o caminho do alto desempenho, normalmente deseja executar o mínimo possível de outros processos (agendados), pois eles interferem no seu aplicativo.
O Linux, como os sistemas operacionais UNIX clássicos, foi projetado para executar vários aplicativos simultaneamente de uma maneira justa e tenta evitar a falta de recursos, e você estará buscando o oposto, deixando de lado todo o resto, exceto seu aplicativo. Etapas simples no nível do sistema operacional estão alterando o bom nível e a prioridade em tempo real do seu aplicativo, alterando o agendador ou optando por um kernel em tempo real .
O TCP / IP geralmente é ajustado para evitar quedas de conexão e fazer uso eficiente da largura de banda disponível. Para obter a menor latência possível de um link muito rápido, em vez de obter a maior largura de banda possível de uma conexão em que alguns links intermediários são mais restritos, você ajustará o ajuste da pilha de rede.
mostrará uma série de configurações de kernels que você pode ajustar. As configurações dependem de você estar usando IPv4 ou IPv6 ou não e o que exatamente você já faz no seu aplicativo, mas que pode ser do seu interesse:
net.ipv4.tcp_window_scaling=1
RFC 1323 - suporte para tamanhos de janela TCP IPV4 maiores que 64 K - geralmente necessários em redes de alta largura de bandanet.ipv4.tcp_reordering=3
O número máximo de vezes que um pacote IPV4 pode ser reordenado em um fluxo de pacotes TCP sem que o TCP assuma a perda de pacotes e inicie lentamente.net.ipv4.tcp_low_latency=1
destina-se a dar preferência a baixa latência em vez de maior rendimento; setting = 1 desativa o processamento da pré-fila IPV4 tcpnet.ipv4.tcp_sack=0
a configuração como 1 ativa o reconhecimento seletivo para IPV4, o que requer a ativação de tcp_timestamps e adiciona alguma sobrecarga de pacote, que você não precisa se não tiver perda de pacotenet.ipv4.tcp_timestamps=0
Aconselhado apenas nos casos em que é necessário saco.net.ipv4.tcp_fastopen=1
Habilite para enviar dados no pacote SYN de abertura.A maioria, se não todos, está melhor documentada na fonte do kernel .
É claro que você pode codificar soquetes TCP brutos e ignorar amplamente a pilha TCP / IP do kernel.
Geralmente, os sistemas altamente ajustados são executados em uma rede confiável e terão seus firewalls locais (tabelas de ip) desativados.
fonte