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.
Both 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
Asked by SagiLow
(287 rep)
Jul 18, 2016, 06:48 PM
Last activity: Jun 24, 2025, 04:02 AM
Last activity: Jun 24, 2025, 04:02 AM