David Brazdil | 0f672f6 | 2019-12-10 10:32:29 +0000 | [diff] [blame^] | 1 | ======================= |
| 2 | Network priority cgroup |
| 3 | ======================= |
| 4 | |
| 5 | The Network priority cgroup provides an interface to allow an administrator to |
| 6 | dynamically set the priority of network traffic generated by various |
| 7 | applications |
| 8 | |
| 9 | Nominally, an application would set the priority of its traffic via the |
| 10 | SO_PRIORITY socket option. This however, is not always possible because: |
| 11 | |
| 12 | 1) The application may not have been coded to set this value |
| 13 | 2) The priority of application traffic is often a site-specific administrative |
| 14 | decision rather than an application defined one. |
| 15 | |
| 16 | This cgroup allows an administrator to assign a process to a group which defines |
| 17 | the priority of egress traffic on a given interface. Network priority groups can |
| 18 | be created by first mounting the cgroup filesystem:: |
| 19 | |
| 20 | # mount -t cgroup -onet_prio none /sys/fs/cgroup/net_prio |
| 21 | |
| 22 | With the above step, the initial group acting as the parent accounting group |
| 23 | becomes visible at '/sys/fs/cgroup/net_prio'. This group includes all tasks in |
| 24 | the system. '/sys/fs/cgroup/net_prio/tasks' lists the tasks in this cgroup. |
| 25 | |
| 26 | Each net_prio cgroup contains two files that are subsystem specific |
| 27 | |
| 28 | net_prio.prioidx |
| 29 | This file is read-only, and is simply informative. It contains a unique |
| 30 | integer value that the kernel uses as an internal representation of this |
| 31 | cgroup. |
| 32 | |
| 33 | net_prio.ifpriomap |
| 34 | This file contains a map of the priorities assigned to traffic originating |
| 35 | from processes in this group and egressing the system on various interfaces. |
| 36 | It contains a list of tuples in the form <ifname priority>. Contents of this |
| 37 | file can be modified by echoing a string into the file using the same tuple |
| 38 | format. For example:: |
| 39 | |
| 40 | echo "eth0 5" > /sys/fs/cgroups/net_prio/iscsi/net_prio.ifpriomap |
| 41 | |
| 42 | This command would force any traffic originating from processes belonging to the |
| 43 | iscsi net_prio cgroup and egressing on interface eth0 to have the priority of |
| 44 | said traffic set to the value 5. The parent accounting group also has a |
| 45 | writeable 'net_prio.ifpriomap' file that can be used to set a system default |
| 46 | priority. |
| 47 | |
| 48 | Priorities are set immediately prior to queueing a frame to the device |
| 49 | queueing discipline (qdisc) so priorities will be assigned prior to the hardware |
| 50 | queue selection being made. |
| 51 | |
| 52 | One usage for the net_prio cgroup is with mqprio qdisc allowing application |
| 53 | traffic to be steered to hardware/driver based traffic classes. These mappings |
| 54 | can then be managed by administrators or other networking protocols such as |
| 55 | DCBX. |
| 56 | |
| 57 | A new net_prio cgroup inherits the parent's configuration. |