Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
4.2. 定义网络流量的优先级
在单一服务器系统中运行多项与网络相关的服务时,定义这些服务的网络优先级是很重要的。定义优先级可以保证源自特定服务的数据包比源自其它服务的数据包享有更高优先级。例如,当一台服务器系统同时起到 NFS 服务器和 Samba 服务器的作用时,优先级就显得尤为重要。NFS 必须享有高优先权,因为用户会预期较高吞吐量。Samba 的优先级可以较低,以确保 NFS 服务器有更佳表现。
net_prio
管控器可以用来为 cgroup 中的进程设定网络优先级。之后,优先级会被转译为 Type Of Service(TOS,服务类型)比特,并嵌入每一个数据包中。请参照过程 4.2, “为共享服务的文件设定网络优先级” 中的步骤给两份文件共享的服务(NFS 和 Samba)配置优先级。
过程 4.2. 为共享服务的文件设定网络优先级
net_prio
管控器并未编译进 kernel,它是一个必须手动装载的模块。如需装载,请输入:~]#
modprobe netprio_cgroup
- 请将
net_prio
子系统附加到/cgroup/net_prio
cgroup 中:~]#
mkdir sys/fs/cgroup/net_prio
~]#mount -t cgroup -o net_prio none sys/fs/cgroup/net_prio
- 请为各项服务创建其 cgroup:
~]#
mkdir sys/fs/cgroup/net_prio/nfs_high
~]#mkdir sys/fs/cgroup/net_prio/samba_low
- 如希望
nfs
服务被自动移至nfs_high
cgroup,请将下列行添至/etc/sysconfig/nfs
文件:CGROUP_DAEMON="net_prio:nfs_high"
此配置可确保nfs
服务启动或重启时,nfs
服务进程已被移至nfs_high
cgroup。 smbd
后台驻留程序在/etc/sysconfig
目录中没有配置文件。为实现将smbd
后台驻留程序自动移至samba_low
cgroup,请添加下列行至/etc/cgrules.conf
文件:*:smbd net_prio samba_low
请注意:此规则会将每一个smbd
后台驻留程序(不仅仅是/usr/sbin/smbd
)移至samba_low
cgroup 。您可以用相似的方式为nmbd
和winbindd
后台驻留程序定义规则,将它们移至samba_low
cgroup。- 请启动
cgred
服务,以载入之前步骤的配置:~]#
systemctl start cgred
Starting CGroup Rules Engine Daemon: [ OK ] - 至于此示例的目的,让我们假设两项服务都使用
eth1
网络接口;给每一个 cgroup 定义优先级:1
表示优先级低,10
表示优先级高:~]#
echo "eth1 1" > /sys/fs/cgroup/net_prio/samba_low/net_prio.ifpriomap
~]#echo "eth1 10" > /sys/fs/cgroup/net_prio/nfs_high/net_prio.ifpriomap
- 请启动
nfs
和smb
服务以检查各自的进程是否已被移至正确的 cgroup:~]#
systemctl start smb
Starting SMB services: [ OK ] ~]#cat /sys/fs/cgroup/net_prio/samba_low/tasks
16122 16124 ~]#systemctl start nfs
Starting NFS services: [ OK ] Starting NFS quotas: [ OK ] Starting NFS mountd: [ OK ] Stopping RPC idmapd: [ OK ] Starting RPC idmapd: [ OK ] Starting NFS daemon: [ OK ] ~]#cat sys/fs/cgroup/net_prio/nfs_high/tasks
16321 16325 16376现在,源自于 NFS 的网络信息传输比源自于 Samba 的信息传输有更高的优先级。
与过程 4.2, “为共享服务的文件设定网络优先级” 相似,
net_prio
子系统可以用来为客户应用程序(如火狐)设定网络优先级。