cgroup主要由core和controllers两个部分,core部分主要是负责组织进程,而controller则负责具体的资源控制。cgroup是一个树状结构,系统中的每一个进程只能属于一个controller group中,一个进程中的所有线程需要属于同一个controller group中,进程在创建时,所有进程都放在父进程当时所属的 controller group 中。一个进程可以迁移到另一个controller group。进程的迁移不会影响已经存在的后代进程。创建一个controller group默认启用哪些controller是由父controller group中的cgroup.subtree_control来控制。cgroup.controllers文件是当前controller group开启的controller列表,cgroup.subtree_control只能是cgroup.controllers的子集。可以通过下面这种方式来添加controller,使得新创建的controller group默认启用这些controller。
echo '+cpuset +cpu +io +memory +pids' > /sys/fs/cgroup/cgroup.subtree_control