Nig*_*Fan 11 linux performance kernel administration
cgroups 下曾经有一个名为 sched_user 或类似的内核配置选项。这允许(据我所知)所有用户公平地共享系统资源。在 2.6.35 中它不可用。有没有一种方法可以将我的系统配置为在所有用户(包括 root 用户)之间自动共享 io/cpu/内存资源?我以前从未设置过 cgroup,有没有好的教程可以这样做?非常感谢。
wag*_*wag 12
内核文档通过示例提供了 cgroup 的一般覆盖。
发行版已经提供的cgroups-bin包(取决于libcgroup1)应该没问题。
通过编辑以下两个文件来完成配置:
/etc/cgconfig.conf
Run Code Online (Sandbox Code Playgroud)
由 libcgroup 用于定义控制组、它们的参数和挂载点。
/etc/cgrules.conf
Run Code Online (Sandbox Code Playgroud)
由 libcgroup 用于定义进程所属的控制组。
这些配置文件中已经包含示例,因此请尝试根据您的要求调整它们。手册页很好地涵盖了它们的配置。
然后,启动工作负载管理器和规则守护进程:
service cgconfig restart
service cgred restart
Run Code Online (Sandbox Code Playgroud)
工作负载管理器 (cgconfig) 负责分配资源。
向管理器添加一个新进程:
cgexec [-g <controllers>:<path>] command [args]
Run Code Online (Sandbox Code Playgroud)
向管理器添加一个已经运行的进程:
cgclassify [-g <controllers>:<path>] <pidlist>
Run Code Online (Sandbox Code Playgroud)
或者自动覆盖 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;
}
Run Code Online (Sandbox Code Playgroud)
示例 /etc/cgrules.conf :
alice cpu group1/
bob cpu group2/
Run Code Online (Sandbox Code Playgroud)
这将在用户 'alice' 和 'bob' 之间共享大约 50-50 的 CPU 资源