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?
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.
3