linux – 在Ubuntu 12.04 LTS上找不到cgroup中的网络子系统

linux – 在Ubuntu 12.04 LTS上找不到cgroup中的网络子系统,第1张

概述我正在尝试使用cgroup来限制进程的网络带宽,如 this answer中所述.但是,我无法找到它们引用的“文件”.我正在使用安装了cgroup-bin的Ubuntu 12.04 LTS. cgroups自动挂载在/ sys / fs / cgroup下,但是,我只看到以下子系统: $ls -l /sys/fs/cgroup/total 0drwxr-xr-x 3 root root 0 M 我正在尝试使用cgroup来限制进程的网络带宽,如 this answer中所述.但是,我无法找到它们引用的“文件”.我正在使用安装了cgroup-bin的Ubuntu 12.04 LTS. cgroups自动挂载在/ sys / fs / cgroup下,但是,我只看到以下子系统:
$ls -l /sys/fs/cgroup/total 0drwxr-xr-x 3 root root 0 Mar  8 09:51 cpudrwxr-xr-x 3 root root 0 Mar  8 09:51 cpuacctdrwxr-xr-x 3 root root 0 Mar  8 09:51 devicesdrwxr-xr-x 3 root root 0 Mar  8 09:51 freezerdrwxr-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,我不知道它什么时候推出,但是有一个模块,它带有Ubuntu 12.04 LTS提供的3.2内核.

net_cls配置

如何设置net_cls显然不是自动完成的.首先检查一下你是否支持它(只是为了让你知道我是怎么发现的!):

$grep CGROUP /boot/config-`uname -r`CONfig_CGROUPS=y# CONfig_CGROUP_DEBUG is not setCONfig_CGROUP_FREEZER=yCONfig_CGROUP_DEVICE=yCONfig_CGROUP_cpuACCT=yCONfig_CGROUP_MEM_RES_CTLR=yCONfig_CGROUP_MEM_RES_CTLR_SWAP=yCONfig_CGROUP_MEM_RES_CTLR_SWAP_ENABLED=yCONfig_CGROUP_PERF=yCONfig_CGROUP_SCHED=yCONfig_BLK_CGROUP=y# CONfig_DEBUG_BLK_CGROUP is not setCONfig_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下的文件,则可能会破坏引导过程.没有一个知识渊博的人无法修复,但你最好小心,要么知道你要做什么,要么有朋友帮助你.此外,备份您宝贵的​​数据总是一个好主意!

总结

以上是内存溢出为你收集整理的linux – 在Ubuntu 12.04 LTS上找不到cgroup中的网络子系统全部内容,希望文章能够帮你解决linux – 在Ubuntu 12.04 LTS上找不到cgroup中的网络子系统所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1037310.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存