Prioriza o UDP sobre FTP, SCP, etc. no Linux

0

Eu tenho uma configuração em que um sistema Linux "mestre" se comunica com 3 sistemas "escravos" que também executam o Linux em uma interface Ethernet dedicada (apenas o mestre e os 3 escravos). Os escravos enviam dados para o mestre via UDP a cada 5 ms ou mais. Além disso, o mestre possui aplicativos que extraem continuamente arquivos de todos os três escravos via protocolos FTP, SCP, etc.

Os pacotes UDP precisam ser coletados pelo mestre o mais rápido possível, preferencialmente dentro de 3-4 ms. Quando executo a configuração apenas com o aplicativo de recepção UDP em execução no mestre, vejo que essa condição é facilmente atendida. No entanto, quando o FTP / SCP / etc. aplicativos também são deixados em execução, há picos no tempo de recepção. O tamanho dos arquivos que estão sendo transferidos é bem menor, mas um novo arquivo é recuperado de cada escravo a cada segundo, aproximadamente.

O fato de que os resultados são bons ao executar a configuração sem que os aplicativos de transferência de arquivos estejam ativos informa que a "fila / programação" da rede Linux parece estar dando prioridade semelhante a UDP & os outros protocolos. Talvez seja mesmo segurando UDP se um FTP está acontecendo?

Existe uma maneira de dizer ao Linux (programaticamente / comandos) para dar maior prioridade à comunicação UDP & "pausa" outras coisas, como transferência de arquivos, quando uma mensagem UDP está pronta para recepção?

Editar 1: adicionei estes para controlar o tráfego com base no tipo de protocolo (UDP é o protocolo 17)

tc qdisc add dev eth0 root handle 10: prio
tc filter add dev eth0 parent 10: protocol ip prio 1 u32 match ip protocol 17 0xff flowid 10:1
tc filter add dev eth0 parent 10: prio 3 protocol all u32 match u32 0 0 flowid 10:3

O terceiro é o que eu acho que é um "filtro de todos os jogos". No entanto, isso não fez diferença. Eu ainda recebo os mesmos picos.

    
por John Smith 19.10.2017 / 17:47

1 resposta

1

Primeiro: o Linux não é um sistema operacional em tempo real. Não há como dizer ao kernel que alguns aplicativos precisam reagir a algum evento em um determinado período de tempo, como 3-4 ms, e dar uma garantia de que isso aconteça. Então, sempre que o sistema for carregado, você terá que assumir que haverá atrasos.

Dito isso, você pode ajustar as coisas em favor do seu aplicativo de recebimento de pacotes UDP:

  • O Linux tem controle de tráfego de rede (veja, por exemplo, Traffic Control HOWTO , exemplo de script para DSL com largura de banda limitada ) que pode utilizar para configurar diferentes filas com diferentes prioridades. para seus pacotes UDP e para pacotes grandes.

  • O Linux tem cgroups (grupos de controle), que você pode usar para atribuir diferentes prioridades de E / S e limites para seu processo de recebimento de UDP e os processos ftpd / sshd etc., porque meu palpite é que a E / S de disco de outros processos também pode parar seu aplicativo de recebimento de pacote UDP (experimente para descobrir se isso é verdade ).

Novamente: não há como garantir nada.

    
por 20.10.2017 / 07:21