I have 2 services, both operate over the same interface.
Service A goal is keep high bandwidth while sending massive amount of data.
Service B goal is low latency.
Service B packets should always be in favor of Service's A packets.
I need a TC structure to be able to :
- Rate limit both service A & B
- Give service B packets priority with 0% latency affect by service A packets.
- Let each service utilize the whole line (or up to its limit) if the other service isn't transmitting.
I tried about an htb structure where I have
class htb classid x which may be rate/ceil limit and
qdisc prio (say handle y:0) below as child (it shall auto create i.e. classes y:1, y:2 & y:3) and use filters by src ip to redirect packets to y:1 / y:2.
However, it doesn't seem to work.
class x and it's children traffic seem to be 0. (used
tc -s class/qdisc/filter show dev dev to see)
When watching the filters I can clearly see the "hits" so the data was supposed to get redirected correctly.
Here are the commands I execute :
tc qdisc add dev dev root handle 1: htb tc class add dev dev parent 1:0 classid 1:1 htb rate 10gbit ceil 10gbit # class x tc class add dev dev parent 1:1 classid 1:2 htb rate 10gbit ceil 10gbit # auto creates classes 21:1, 21:2 and 21:3 tc qdisc add dev dev parent 1:2 handle 21: prio # example for service b filter (latency driven) tc filter add dev dev parent 1:0 prio 2 u32 match ip src x.x.x.x/32 flowid 21:1 # example for service a filter tc filter add dev dev parent 1:0 prio 2 u32 match ip src x.x.x.x/32 flowid 21:2