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


11

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


好吧,我在Ubuntu上的cgroups-bin软件包中获得了战利品,并且我敢肯定,如果我直接安装它,默认情况下它会“执行此操作”。我以为它需要设置,但是我想如果您有特殊需要的话就可以。我通过在root下有2个cpu线程,在用户下有2个cpu线程运行压力进行了测试,所有4个线程似乎共享50%的顶部,这使我认为它正在工作。这可能对我来说是“解决”的,但是,如果有任何我想采用更清晰的方法进行确认或更好地了解如何进行配置,请再次感谢!
NightwishFan 2010年

Answers:


12

内核文档通过示例对cgroup进行了全面介绍。

发行版已提供的cgroups-bin软件包(取决于libcgroup1)应该可以。

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

/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 Rules守护程序(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资源


学习cgroup,为此加了书签。谢谢。
Jigar 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.