首页 理论教育 Ubuntu上的cgroup文件系统挂载情况

Ubuntu上的cgroup文件系统挂载情况

时间:2023-11-22 理论教育 版权反馈
【摘要】:控制组选择了后者,它提供了一种新的名为cgroup的文件系统。下面是在Ubuntu 14.04上的cgroup文件系统挂载情况:Ubuntu的做法是每一个cgroup文件系统的挂载只包含一个子系统。第二类是以“cgroup.”为前缀的文件和三个无前缀文件:notify_on_release、release_agent tasks,这些文件是通用文件,每个cgroup文件系统挂载中都会出现,无论挂载选项指定使用哪个或哪些子系统。cgroup.clone_children这个文件和一个标志关联,而此标志只被cpuset子系统使用。cgroup.sane_behavior显示cgroup文件系统的sane_behavior的状态。

Ubuntu上的cgroup文件系统挂载情况

作为内核中的一员,控制组子系统需要提供接口给用户态。有两个选择,一个是提供系统调用,另一个是提供伪文件系统。控制组选择了后者,它提供了一种新的名为cgroup的文件系统。

和所有文件系统一样,cgroup文件系统需要先挂载。用户通过mount命令的“-o”选项告诉内核这次挂载的cgroup文件系统包含哪些子系统。例如:

上述命令表示挂载一个包含CPU子系统的cgroup文件系统。用户还可以用“,”分隔多个子系统。例如:

上述命令表示用户挂载一个包含cpuset和devices的cgroup文件系统.

cgroup文件系统的一个特点是用户可以同时挂载多个cgroup文件系统,但是要保证每个cgroup文件系统用到的子系统没有重叠。也就是说,如果已经有一个cgroup文件系统的挂载包含了某一个子系统,那么就不能再有cgroup文件系统的挂载包含这个子系统。下面是在Ubuntu 14.04上的cgroup文件系统挂载情况:

Ubuntu的做法是每一个cgroup文件系统的挂载只包含一个子系统。

假设执行下列命令挂载了包含CPU子系统的cgroup文件系统:

下面看一下挂载在/sys/fs/cgroup/cpu下的cgroup文件系统中的内容:

上述内容可以粗略分为三类:第一类是目录,在cgroup文件系统中目录对应一个具体的控制组。第二类是以“cgroup.”为前缀的文件和三个无前缀文件:notify_on_release、release_agent tasks,这些文件是通用文件,每个cgroup文件系统挂载中都会出现,无论挂载选项指定使用哪个或哪些子系统。第三类是子系统专有文件,这些文件是配置子系统的接口,子系统不同,文件也不同。在上面的例子中,控制组CPU子系统的专有文件以“cpu.”为前缀。

在cgroup文件系统中创建一个目录就是创建一个控制组,删除一个目录就是删除一个控制组。创建目录后,目录下会自动产生许多文件。在cgroup文件系统的根目录下(在上面的例子中是/sys/fs/cgroup/cpu)的大多数文件都会出现在cgroup文件系统的下级目录中,除了少数在代码实现中标记为只在根目录中出现的文件,例如cgroup.sane_behavior。

各个子系统的专有文件比较琐碎,这里就不介绍了。下面介绍一下cgroup文件系统的通用文件。

(1)cgroup.procs(www.xing528.com)

此文件的内容和控制组中所有进程的进程号关联。这里的进程号实际上是线程组号(thread group ID)。向这个文件写入一个线程组号,就会把整个线程组中的线程都加入此文件所属的控制组。

(2)cgroup.clone_children

这个文件和一个标志关联,而此标志只被cpuset子系统使用。当此标志为1时,创建新的有关cpuset的cgroup时,子cgroup从父cgroup中复制cpuset配置。

(3)cgroup.sane_behavior

显示cgroup文件系统的sane_behavior的状态。随着内核控制组子系统的开发,一些旧的做法不再合适,但是为了兼容旧的应用又不好完全清除。于是开发者提供了一个选项“__DEVEL__sane_behavior”,供挂载时使用。如果有这个挂载选项,老旧的不合适的代码逻辑就不会出现,tasks、notify_on_release、release_agent这三个文件也不会出现。

(4)tasks

旧机制,尽量不要使用。此文件关联控制组中所有线程的线程号。

(5)notify_on_release

旧机制,尽量不要使用。通过它来存取notify_on_release标志。当此标志为1时,在cgroup退出时,内核要通知用户态。所谓退出是指此cgroup不再有进程,也不再有子cgroup。

(6)release_agent

旧机制,尽量不要使用。此文件中存有一个路径,当内核需要通知用户态cgroup退出事件时,内核运行此路径所指的可执行文件。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈