It's fairly easy to use tc with Stochastic Fairness Queueing (SFQ) to configure fair bandwidth sharing between flows, but an application can open multiple flows and get an unfair share of bandwidth. Is it possible to configure fair bandwidth sharing between applications instead?
Grouping each application into a cgroup seems like a clear first step. If SFQ supported hashing on the class ID, it would be easy to use tc filter to assign each cgroup a class ID. Unfortunately, SFQ doesn't seem to support this. Another promising approach is to use CBQ, which does Weighted Round Robin across classes. Unfortunately, making the weights all equal doesn't seem to work.
Is there another way to fairly share bandwidth between cgroups?