第 2 章 使​​​用​​​控​​​制​​​组​​​群​​​

使​​​用​​​ cgroup 的​​​最​​​简​​​单​​​的​​​方​​​法​​​是​​​安​​​装​​​ libcgroup 软​​​件​​​包​​​,该​​​软​​​件​​​包​​​包​​​含​​​大​​​量​​​与​​​ cgroup 有​​​关​​​的​​​命​​​令​​​行​​​工​​​具​​​及​​​其​​​相​​​关​​​ man page。​​​您​​​可​​​以​​​使​​​用​​​ shell 命​​​令​​​和​​​可​​​在​​​任​​​意​​​系​​​统​​​中​​​使​​​用​​​的​​​工​​​具​​​挂​​​载​​​层​​​级​​​并​​​设​​​定​​​ cgroup 参​​​数​​​(不​​​保​​​留​​​)。​​​但​​​是​​​,使​​​用​​​ libcgroup 提​​​供​​​的​​​工​​​具​​​可​​​简​​​化​​​过​​​程​​​并​​​扩​​​展​​​功​​​能​​​。​​​因​​​此​​​,本​​​指​​​南​​​着​​​重​​​全​​​面​​​介​​​绍​​​ libcgroup 命​​​令​​​。​​​在​​​大​​​多​​​数​​​情​​​况​​​下​​​,我​​​们​​​会​​​将​​​对​​​等​​​的​​​ shell 命​​​令​​​包​​​括​​​在​​​内​​​以​​​便​​​清​​​楚​​​阐​​​述​​​基​​​础​​​机​​​理​​​。​​​我​​​们​​​建​​​议​​​您​​​在​​​可​​​行​​​的​​​情​​​况​​​下​​​尽​​​量​​​使​​​用​​​ libcgroup 命​​​令​​​。​​​

注意

要​​​使​​​用​​​ cgroup,首​​​先​​​请​​​确​​​定​​​在​​​您​​​的​​​系​​​统​​​中​​​安​​​装​​​ libcgroup 软​​​件​​​包​​​,方​​​法​​​为​​​作​​​为​​​ root 运​​​行​​​:
~]# yum install libcgroup

2.1. cgconfig 服​​​务​​​

由​​​ libcgroup 软​​​件​​​包​​​安​​​装​​​的​​​ cgconfig 服​​​务​​​可​​​提​​​供​​​创​​​建​​​层​​​级​​​的​​​方​​​便​​​方​​​法​​​,并​​​在​​​层​​​级​​​中​​​附​​​加​​​子​​​系​​​统​​​,且​​​在​​​那​​​些​​​层​​​级​​​中​​​管​​​理​​​ cgroup。​​​我​​​们​​​建​​​议​​​您​​​使​​​用​​​ cgconfig 在​​​您​​​的​​​系​​​统​​​中​​​管​​​理​​​层​​​级​​​和​​​ cgroup。​​​
红​​​帽​​​企​​​业​​​版​​​ Linux  6 不​​​默​​​认​​​启​​​动​​​ cgconfig 服​​​务​​​。​​​当​​​使​​​用​​​ chkconfig 启​​​动​​​该​​​服​​​务​​​时​​​,它​​​读​​​取​​​ cgroup 配​​​置​​​文​​​件​​​ -- /etc/cgconfig.conf。​​​Cgroup 因​​​此​​​会​​​在​​​不​​​同​​​会​​​话​​​间​​​重​​​新​​​创​​​建​​​并​​​保​​​留​​​。​​​根​​​据​​​配​​​置​​​文​​​件​​​的​​​内​​​容​​​,cgconfig 可​​​创​​​建​​​层​​​级​​​、​​​挂​​​载​​​所​​​需​​​文​​​件​​​系​​​统​​​、​​​创​​​建​​​ cgroup 以​​​及​​​为​​​每​​​个​​​组​​​群​​​设​​​定​​​子​​​系​​​统​​​参​​​数​​​。​​​
libcgroup 软​​​件​​​包​​​默​​​认​​​安​​​装​​​的​​​ /etc/cgconfig.conf 文​​​件​​​为​​​每​​​个​​​子​​​系​​​统​​​创​​​建​​​并​​​挂​​​载​​​独​​​立​​​层​​​级​​​,并​​​在​​​这​​​些​​​层​​​级​​​中​​​附​​​加​​​子​​​系​​​统​​​。​​​
如​​​果​​​您​​​停​​​止​​​ cgconfig 服​​​务​​​(使​​​用​​​ service cgconfig stop 命​​​令​​​),则​​​会​​​卸​​​载​​​它​​​挂​​​载​​​的​​​所​​​有​​​层​​​级​​​。​​​

2.1.1. cgconfig.conf 文​​​件​​​

cgconfig.conf 文​​​件​​​包​​​含​​​两​​​个​​​主​​​要​​​类​​​型​​​的​​​条​​​目​​​ -- mount 和​​​ group。​​​挂​​​载​​​条​​​目​​​生​​​成​​​并​​​挂​​​载​​​层​​​级​​​并​​​将​​​其​​​作​​​为​​​虚​​​拟​​​文​​​件​​​系​​​统​​​,同​​​时​​​将​​​子​​​系​​​统​​​附​​​加​​​到​​​那​​​些​​​层​​​级​​​中​​​。​​​挂​​​载​​​条​​​目​​​使​​​用​​​以​​​下​​​语​​​法​​​定​​​义​​​:
mount {
    <controller> = <path>;
    …
}
示​​​例​​​用​​​法​​​请​​​参​​​考​​​ 例 2.1 “创​​​建​​​挂​​​载​​​条​​​目​​​”。​​​

例 2.1. 创​​​建​​​挂​​​载​​​条​​​目​​​

以​​​下​​​示​​​例​​​为​​​ cpuset 子​​​系​​​统​​​创​​​建​​​层​​​级​​​:
mount {
    cpuset = /cgroup/cpu;
}
对​​​等​​​的​​​ shell 命​​​令​​​:
~]# mkdir /cgroup/cpu
~]# mount -t cgroup -o cpu cpu /cgroup/cpu
组​​​群​​​条​​​目​​​创​​​建​​​ cgroup 并​​​设​​​定​​​子​​​系​​​统​​​参​​​数​​​。​​​组​​​群​​​条​​​目​​​使​​​用​​​以​​​下​​​语​​​法​​​定​​​义​​​:
group <name> {
    [<permissions>]
    <controller> {
        <param name> = <param value>;
        …
    }
    …
}
请​​​注​​​意​​​ permissions 部​​​分​​​是​​​可​​​选​​​的​​​。​​​要​​​为​​​组​​​群​​​条​​​目​​​定​​​义​​​权​​​限​​​,请​​​使​​​用​​​以​​​下​​​语​​​法​​​:
perm {
    task {
        uid = <task user>;
        gid = <task group>;
    }
    admin {
       uid = <admin name>;
       gid = <admin group>;
    }
}
示​​​例​​​用​​​法​​​请​​​参​​​考​​​ 例 2.2 “创​​​建​​​组​​​群​​​条​​​目​​​”

例 2.2. 创​​​建​​​组​​​群​​​条​​​目​​​

以​​​下​​​示​​​例​​​为​​​ sql 守​​​护​​​进​​​程​​​创​​​建​​​ cgroup,可​​​为​​​ sqladmin 组​​​群​​​中​​​的​​​用​​​户​​​在​​​ cgroup 中​​​添​​​加​​​任​​​务​​​,并​​​让​​​ root 用​​​户​​​修​​​改​​​子​​​系​​​统​​​参​​​数​​​:
group daemons/sql {
    perm {
        task {
            uid = root;
            gid = sqladmin;
        } admin {
            uid = root;
            gid = root;
        }
    } cpu {
        cpu.shares = 100;
    }
}
当​​​与​​​ 例 2.1 “创​​​建​​​挂​​​载​​​条​​​目​​​” 中​​​的​​​挂​​​载​​​条​​​目​​​示​​​例​​​合​​​并​​​时​​​,对​​​等​​​的​​​ shell 命​​​令​​​为​​​:
~]# mkdir -p /cgroup/cpu/daemons/sql
~]# chown root:root /cgroup/cpu/daemons/sql/*
~]# chown root:sqladmin /cgroup/cpu/daemons/sql/tasks
~]# echo 100 > /cgroup/cpu/daemons/sql/cpu.shares

注意

您​​​必​​​须​​​重​​​启​​​ cgconfig 服​​​务​​​方​​​可​​​使​​​ /etc/cgconfig.conf 中​​​的​​​更​​​改​​​生​​​效​​​:
~]# service cgconfig restart
当​​​安​​​装​​​ cgroups 软​​​件​​​包​​​时​​​,会​​​在​​​ /etc/cgconfig.conf 中​​​写​​​入​​​示​​​例​​​配​​​置​​​文​​​件​​​。​​​每​​​行​​​开​​​始​​​的​​​ # 符​​​号​​​将​​​该​​​行​​​注​​​释​​​出​​​来​​​以​​​便​​​ cgconfig 服​​​务​​​忽​​​略​​​它​​​。​​​