QoS implementation algorithm

algorithmsnetworking

I'm working on an application, that does IP routing and QoS. Today we have the QoS implemented, with 3 priorities (low, normal and high) and for each level we create a Queue and as soon as the packages are queued, we send it forward in a FIFO way (the scheduler spend 60% of time with the high queue, 30% the time with normal and 10% with the low queue). It works, but as FIFO it has some drawbacks like:

  • An aggressive traffic will fill in the queue and all other flows with the same priority will be stucked

  • under high usage, TCP will slow down and UDP will keep flooding our Queue. It means in the end UDP flows will have better priorization then TCP flows

I was thinking a way to improve it and my idea is to implement a SFQ with the following algorithm:

  • keep the high, normal, low, but they aren't just 3 queues, but one per (seen) protocol

  • The scheduler still spending 60% of time we spend with the high queues, 30% the time with normal and 10% with the low queues. But now, it does a round-robin between the queues with the same priority. The choosen Queue, will still forward the packets in a FIFO way.

drawbacks from this implementation:

  • it is more expensive to the CPU

Am I missing something? Any recommendation?

Best Answer

Have a look at Hurst or long range dependent network traffic for example this paper. If it is your problem, then you cannot reduce long range dependent traffic with queueing policies.

Related Topic