Kalle Valo wrote:
Hello,
I have been trying to understand how applications should use network
QoS. My interest have been mostly from wireless perspective,
especially how to utilise WMM and U-APSD properly, but naturally this
applicable to all networks.
I have done some research about this, but I haven't managed to get
anywhere. For example, from my point of view DiffServ is just one big
mess and I can't see how in practise it can help applications.
I wrote a small wiki page to sum up my findings:
http://wireless.kernel.org/en/developers/Documentation/qos
I would like to clear up all this by and I'm willing to write a
document for application developers about network QoS. But I need help
to understand what's the proper way to mark different QoS
prioritities.
In the wiki page I have tried to come up with different possible
solutions (copied below), but I'm sure there are even more ways.
Please comment. I would like to get some understanding about this.
----------------------------------------------------------------------
Solution 1: SO_PRIORITY with values 0-7
Easy, applications need to just use setsockopt() and be done with it.
It's unknown how widely supported values 0-7 are and the exact meaning
of them, but at least they make sense (0 default, 1 lowest priority
and 7 highest priority). The problem is that the priority is used only
in the first link, rest of the route is not able to benefit from the
classification.
Pros:
* easy for applications
* works with both IPv4 and IPv6
Cons:
* only visible in in the first L2 link, not visible to upper
layers (IP)
* no well defined meaning for the priority values
Solution 2: SO_PRIORITY with values 256-263
You can actually encode any class handle in SO_PRIORITY, all classful
qdiscs support classification based on this.