Ho una configurazione in cui un sistema Linux "master" comunica con 3 sistemi "slave" che eseguono anche Linux su un'interfaccia Ethernet dedicata (solo il master e i 3 slave). Gli slave inviano i dati al master via UDP ogni 5 ms circa. Inoltre, il master ha app che estraggono continuamente file da tutti e 3 gli slave tramite protocolli FTP, SCP, ecc.
I pacchetti UDP devono essere raccolti dal master il più rapidamente possibile, preferibilmente entro 3-4 ms. Quando eseguo l'installazione con solo l'app di ricezione UDP in esecuzione sul master, vedo che questa condizione è facilmente soddisfatta. Tuttavia, quando FTP / SCP / ecc. anche le app rimangono in esecuzione, ci sono picchi nel tempo di ricezione. La dimensione dei file trasferiti è piuttosto inferiore, ma un secondo file viene recuperato da ogni slave circa ogni secondo circa.
Il fatto che i risultati siano buoni quando si esegue l'installazione senza le app di trasferimento file attive indica che la "messa in coda / programmazione" della rete Linux sembra dare una priorità simile sia a UDP che agli altri protocolli. Forse sta addirittura trattenendo UDP se è attivo un FTP?
C'è un modo per dire a Linux (programmaticamente / comandi) di dare la massima priorità alla comunicazione UDP e "mettere in pausa" altre cose come il trasferimento di file quando un messaggio UDP è pronto per la ricezione?
Modifica 1: li ho aggiunti per controllare il traffico in base al tipo di protocollo (UDP è il protocollo 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
Il terzo è quello che penso sia un "filtro per tutte le partite". Tuttavia, questo non ha fatto differenza. Ottengo ancora gli stessi picchi.