网络优先级cgroup
网络优先级cgroup提供了一个接口,允许管理员动态设置由各种应用程序生成的网络流量的优先级。
通常情况下,应用程序会通过SO_PRIORITY套接字选项设置其流量的优先级。然而,这并不总是可能,因为:
- 应用程序可能没有编码来设置这个值
- 应用程序流量的优先级通常是站点特定的管理决定,而不是应用程序定义的决定。
这个cgroup允许管理员将一个进程分配到一个定义了在给定接口上出口流量优先级的组中。网络优先级组可以通过首先挂载cgroup文件系统来创建:
# mount -t cgroup -onet_prio none /sys/fs/cgroup/net_prio
通过上述步骤,作为父计费组的初始组将在'/sys/fs/cgroup/net_prio'下可见。这个组包括系统中的所有任务。'/sys/fs/cgroup/net_prio/tasks'列出了这个cgroup中的任务。
每个net_prio cgroup包含两个特定于子系统的文件:
net_prio.prioidx
- 这个文件是只读的,只是提供信息。它包含一个唯一的整数值,内核使用它作为这个cgroup的内部表示。
net_prio.ifpriomap
- 这个文件包含一个映射,指定了来自该组中进程并在各个接口上出口系统的流量的优先级。它包含一系列以形式的元组。可以通过向文件中回映射格式的字符串进行修改。例如:
echo "eth0 5" > /sys/fs/cgroups/net_prio/iscsi/net_prio.ifpriomap
这个命令将强制任何属于iscsi net_prio cgroup的进程生成并在eth0接口上出口的流量的优先级设置为值5。父计费组也有一个可写的'net_prio.ifpriomap'文件,可以用来设置系统默认优先级。
优先级是在将帧排队到设备排队规则(qdisc)之前立即设置的,因此优先级将在进行硬件队列选择之前分配。
net_prio cgroup的一个用途是与mqprio qdisc一起,允许将应用程序流量引导到基于硬件/驱动程序的流量类别。这些映射可以由管理员或其他网络协议(如DCBX)管理。
新的net_prio cgroup继承父级的配置。