网络优先级 cgroup

网络优先级 cgroup 提供了一个接口,允许管理员动态设置各种应用程序生成的网络流量的优先级。

通常,应用程序会通过 SO_PRIORITY 套接字选项设置其流量的优先级。然而,这并非总是可行,因为:

  1. 应用程序可能未被编码以设置此值

  2. 应用程序流量的优先级通常是特定于站点的管理决策,而非应用程序自行定义。

此 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

此文件包含一个优先级映射,这些优先级分配给源自此组中进程并通过不同接口出站的流量。它包含一个形如 <ifname priority> 的元组列表。此文件的内容可以通过使用相同的元组格式将字符串 echo 到文件中进行修改。例如:

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 继承父级的配置。