| Network priority cgroup | |
| ------------------------- | |
| The Network priority cgroup provides an interface to allow an administrator to | |
| dynamically set the priority of network traffic generated by various | |
| applications | |
| Nominally, an application would set the priority of its traffic via the | |
| SO_PRIORITY socket option. This however, is not always possible because: | |
| 1) The application may not have been coded to set this value | |
| 2) The priority of application traffic is often a site-specific administrative | |
| decision rather than an application defined one. | |
| This cgroup allows an administrator to assign a process to a group which defines | |
| the priority of egress traffic on a given interface. Network priority groups can | |
| be created by first mounting the cgroup filesystem. | |
| # mount -t cgroup -onet_prio none /sys/fs/cgroup/net_prio | |
| With the above step, the initial group acting as the parent accounting group | |
| becomes visible at '/sys/fs/cgroup/net_prio'. This group includes all tasks in | |
| the system. '/sys/fs/cgroup/net_prio/tasks' lists the tasks in this cgroup. | |
| Each net_prio cgroup contains two files that are subsystem specific | |
| net_prio.prioidx | |
| This file is read-only, and is simply informative. It contains a unique integer | |
| value that the kernel uses as an internal representation of this cgroup. | |
| net_prio.ifpriomap | |
| This file contains a map of the priorities assigned to traffic originating from | |
| processes in this group and egressing the system on various interfaces. It | |
| contains a list of tuples in the form <ifname priority>. Contents of this file | |
| can be modified by echoing a string into the file using the same tuple format. | |
| for example: | |
| echo "eth0 5" > /sys/fs/cgroups/net_prio/iscsi/net_prio.ifpriomap | |
| This command would force any traffic originating from processes belonging to the | |
| iscsi net_prio cgroup and egressing on interface eth0 to have the priority of | |
| said traffic set to the value 5. The parent accounting group also has a | |
| writeable 'net_prio.ifpriomap' file that can be used to set a system default | |
| priority. | |
| Priorities are set immediately prior to queueing a frame to the device | |
| queueing discipline (qdisc) so priorities will be assigned prior to the hardware | |
| queue selection being made. | |
| One usage for the net_prio cgroup is with mqprio qdisc allowing application | |
| traffic to be steered to hardware/driver based traffic classes. These mappings | |
| can then be managed by administrators or other networking protocols such as | |
| DCBX. | |
| A new net_prio cgroup inherits the parent's configuration. |