网络优先级 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
此文件包含一个优先级映射,这些优先级分配给源自此组中进程并通过不同接口出站的流量。它包含一个形如 <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 继承父级的配置。