Sto lavorando su un'applicazione, che esegue il routing IP e QoS. Oggi abbiamo implementato la QoS, con 3 priorità (bassa, normale e alta) e per ogni livello creiamo una coda e non appena i pacchetti vengono messi in coda, lo inoltriamo in un modo FIFO (lo schedulatore spende il 60% del tempo con la coda alta, il 30% il tempo con normale e il 10% con la coda bassa). Funziona, ma come FIFO ha alcuni svantaggi come:
-
Un traffico aggressivo riempirà la coda e tutti gli altri flussi con la stessa priorità saranno bloccati
-
in condizioni di utilizzo elevato, TCP rallenterà e UDP manterrà la nostra coda inondata. Significa che alla fine i flussi UDP avranno una migliore priorità rispetto ai flussi TCP
Stavo pensando a come migliorarlo e la mia idea è di implementare un SFQ con il seguente algoritmo:
-
mantieni alto, normale, basso, ma non sono solo 3 code, ma uno per (visto) protocollo
-
Lo schedulatore spende ancora il 60% del tempo che impieghiamo con le code alte, il 30% il tempo con il normale e il 10% con le code basse. Ma ora, fa un round-robin tra le code con la stessa priorità. La coda scelta, inoltra i pacchetti in un modo FIFO.
svantaggi da questa implementazione:
- è più costoso per la CPU
Mi manca qualcosa? Qualche raccomandazione?