如何配置 cgroup 以在用户之间公平共享资源?

如何配置 cgroup 以在用户之间公平共享资源?

cgroups 下曾经有一个名为 sched_user 或类似的内核配置选项。 (据我所知)这允许所有用户公平地共享系统资源。在 2.6.35 中它不可用。有没有一种方法可以将我的系统配置为在所有用户(包括 root?)之间自动共享 io/cpu/内存资源。我以前从未设置过 cgroup,有好的教程吗?非常感谢。

答案1

内核文档通过示例提供了 cgroup 的一般覆盖范围。

发行版已经提供的软件包(取决于 )应该没问题cgroups-binlibcgroup1

配置是通过编辑以下两个文件来完成的:

/etc/cgconfig.conf

libcgroup 使用它来定义控制组、其参数和安装点。

/etc/cgrules.conf

由 libcgroup 用于定义进程所属的控制组。

这些配置文件中已经有示例,因此请尝试根据您的要求进行调整。手册页很好地介绍了它们的配置。

然后,启动工作负载管理器和规则守护进程:

service cgconfig restart
service cgred restart

工作负载管理器(cgconfig)负责分配资源。
向管理器添加新进程:

cgexec [-g <controllers>:<path>] command [args]

将已经运行的进程添加到管理器:

cgclassify [-g <controllers>:<path>] <pidlist>

或者自动通过 cgrules.conf 文件和 CGroup 规则守护进程 (cgred),强制每个新生成的进程进入指定组。


示例 /etc/cgconfig.conf :

group group1 {
    perm {
            task {
                    uid = alice;
                    gid = alice;
            }
            admin {
                    uid = root;
                    gid = root;
            }
    }

    cpu {
            cpu.shares = 500;
    }

}

group group2 {
    perm {
            task {
                    uid = bob;
                    gid = bob;
            }
            admin {
                    uid = root;
                    gid = root;
            }
    }

    cpu {
            cpu.shares = 500;
    }

}

mount {
    cpu = /dev/cgroups/cpu;
    cpuacct = /dev/cgroups/cpuacct;
}

示例 /etc/cgrules.conf :

alice            cpu             group1/
bob              cpu             group2/

这将在用户“alice”和“bob”之间共享大约 50-50 的 CPU 资源

相关内容