linux – 在Ubuntu 12.04 LTS上找不到cgroup中的网络子系统
我正在尝试使用cgroup来限制进程的网络带宽,如
this answer中所述.但是,我无法找到它们引用的“文件”.我正在使用安装了cgroup-bin的Ubuntu 12.04 LTS. cgroups自动挂载在/ sys / fs / cgroup下,但是,我只看到以下子系统:
$ls -l /sys/fs/cgroup/ total 0 drwxr-xr-x 3 root root 0 Mar 8 09:51 cpu drwxr-xr-x 3 root root 0 Mar 8 09:51 cpuacct drwxr-xr-x 3 root root 0 Mar 8 09:51 devices drwxr-xr-x 3 root root 0 Mar 8 09:51 freezer drwxr-xr-x 3 root root 0 Mar 8 09:51 memory 此外,我试图手动挂载“net”子系统但没有成功: # mkdir -p /sys/fs/cgroup/net # mount -t cgroup -o net net /sys/fs/cgroup/net/ mount: special device net does not exist 有人可以帮忙吗? 解决方法
我知道只有2个与网络相关的cgroup,net_prio(设置网络流量的优先级)和
net_cls(标记数据包以允许通过Linux tc识别).
> net_prio已经在Linux Kernel 3.3中引入了,所以你不会在Ubuntu LTS 12.04中看到它是正常的,除非你安装了LTS硬件支持堆栈(它可以获得Linux内核3.5),最后看到. net_cls配置 如何设置net_cls显然不是自动完成的.首先检查一下你是否支持它(只是为了让你知道我是怎么发现的!): $grep CGROUP /boot/config-`uname -r` CONFIG_CGROUPS=y # CONFIG_CGROUP_DEBUG is not set CONFIG_CGROUP_FREEZER=y CONFIG_CGROUP_DEVICE=y CONFIG_CGROUP_CPUACCT=y CONFIG_CGROUP_MEM_RES_CTLR=y CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y CONFIG_CGROUP_MEM_RES_CTLR_SWAP_ENABLED=y CONFIG_CGROUP_PERF=y CONFIG_CGROUP_SCHED=y CONFIG_BLK_CGROUP=y # CONFIG_DEBUG_BLK_CGROUP is not set CONFIG_NET_CLS_CGROUP=m 这告诉你net_cls是一个模块而不是作为内核(m)的一部分编译. 既然你知道你有模块,那就让我们来看看吧: $find /lib/modules/`uname -r` -iname "*cgroup*" /lib/modules/3.2.0-38-generic/kernel/net/sched/cls_cgroup.ko 所以现在你知道模块名为cls_cgroup,只需加载它: $sudo modprobe cls_cgroup 跳完了!现在让我们进行安装.对于Ubuntu 12.04 LTS提供的内核,您获得的信息相当不正确.这不是因为Ubuntu,而是cgroups的API可能已经改变了.由于以下内容符合内核官方文档: $sudo mkdir /sys/fs/cgroup/net_cls $sudo mount -t cgroup -o net_cls none /sys/fs/cgroup/net_cls 现在你应该能够为tc标记你的数据包了. net_prio配置 对于net_prio,该过程非常相似.但是你需要安装一个更新的内核. Ubuntu 12.04 LTS支持他们称之为LTS Hardware Enablement Stack的内容,它为您提供了一个新的内核版本3.5.要安装它: $sudo apt-get install linux-generic-lts-quantal xserver-xorg-lts-quantal 重新启动后,您将使用Linux Kernel 3.5.如果您使用上面给出的grep命令,它将返回一个略有不同的列表.值得注意的是,你现在有了另一个模块CONFIG_NETPRIO_CGROUP = m.您可以使用与上面相同的find命令再次查找模块,您将找到netprio_cgroup,只需加载它: $sudo modprobe netprio_cgroup 然后像以前一样,你现在可以挂载cgroup: $sudo mkdir /sys/fs/cgroup/net_prio $sudo mount -t cgroup -o net_prio none /sys/fs/cgroup/net_prio 请参阅文档(请参阅第一个链接)以了解如何使用net_prio cgroup,或者您也可以参考此Red Hat documentation. 这些变化并不持久 正如标题所说,在下次重启时,更改将会丢失. 如果你想要持久编辑文件/etc/rc.local并添加上面创建目录并挂载cgroup的步骤.并将模块(两者或其中一个,取决于您要使用的)添加到文件/ etc / modules中,只需在新行上添加每个名称,例如: sudo bash -c "echo cls_cgroup >> /etc/modules" 警告:如果您不小心修改/ etc下的文件,则可能会破坏引导过程.没有一个知识渊博的人无法修复,但你最好小心,要么知道你要做什么,要么有朋友帮助你.此外,备份您宝贵的??数据总是一个好主意! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |