章 2. 使​​​用​​​控​​​制​​​群​​​組​​​

控​​​制​​​群​​​組​​​最​​​容​​​易​​​的​​​使​​​用​​​方​​​法​​​就​​​是​​​安​​​裝​​​ libcgroup 套​​​件​​​,此​​​套​​​件​​​包​​​含​​​了​​​數​​​個​​​與​​​ cgroup 相​​​聯​​​的​​​指​​​令​​​列​​​工​​​具​​​程​​​式​​​,以​​​及​​​其​​​相​​​聯​​​的​​​ man page。​​​您​​​可​​​「​​​掛​​​載​​​」​​​階​​​層​​​,並​​​使​​​用​​​任​​​何​​​系​​​統​​​上​​​的​​​ shell 指​​​令​​​和​​​工​​​具​​​程​​​式​​​,設​​​置​​​ cgroup 參​​​數​​​(非​​​一​​​致​​​性​​​)。​​​然​​​而​​​,使​​​用​​​ libcgroup 所​​​提​​​供​​​的​​​工​​​具​​​程​​​式​​​可​​​簡​​​化​​​程​​​序​​​與​​​延​​​伸​​​功​​​能​​​。​​​因​​​此​​​,本​​​指​​​南​​​內​​​容​​​專​​​注​​​於​​​ libcgroup 指​​​令​​​。​​​在​​​大​​​部​​​分​​​情​​​況​​​下​​​,我​​​們​​​皆​​​包​​​含​​​了​​​相​​​等​​​的​​​ shell 指​​​令​​​,以​​​協​​​助​​​描​​​述​​​基​​​礎​​​機​​​制​​​。​​​然​​​而​​​,我​​​們​​​建​​​議​​​您​​​使​​​用​​​ libcgroup 指​​​令​​​。​​​

注意

若​​​要​​​使​​​用​​​ cgroups,首​​​先​​​請​​​以​​​ root 身​​​份​​​,透​​​過​​​下​​​列​​​指​​​令​​​確​​​認​​​ libcgroup 套​​​件​​​已​​​安​​​裝​​​在​​​您​​​的​​​系​​​統​​​上​​​:
~]# yum install libcgroup

2.1. cgconfig 服​​​務​​​

透​​​過​​​ libcgroup 套​​​件​​​安​​​裝​​​的​​​ cgconfig 服​​​務​​​,提​​​供​​​了​​​方​​​便​​​地​​​建​​​立​​​階​​​層​​​、​​​將​​​子​​​系​​​統​​​連​​​接​​​至​​​階​​​層​​​,並​​​在​​​這​​​些​​​階​​​層​​​中​​​管​​​理​​​ cgroup 的​​​方​​​式​​​。​​​我​​​們​​​建​​​議​​​您​​​使​​​用​​​ cgconfig 來​​​管​​​理​​​您​​​系​​​統​​​上​​​的​​​階​​​層​​​和​​​ cgroup。​​​
就​​​預​​​設​​​值​​​,在​​​ Red Hat Enterprise Linux 6 上​​​,cgconfig 服​​​務​​​不​​​會​​​被​​​啟​​​用​​​。​​​當​​​您​​​透​​​過​​​ chkconfig 啟​​​用​​​該​​​項​​​服​​​務​​​時​​​,它​​​會​​​讀​​​取​​​控​​​制​​​群​​​組​​​配​​​置​​​檔​​​案​​​ /etc/cgconfig.conf。​​​如​​​此​​​一​​​來​​​,控​​​制​​​群​​​組​​​會​​​在​​​ session 執​​​行​​​時​​​重​​​新​​​建​​​立​​​,並​​​持​​​續​​​運​​​行​​​。​​​根​​​據​​​配​​​置​​​檔​​​案​​​的​​​內​​​容​​​,cgconfig 會​​​建​​​立​​​階​​​層​​​、​​​掛​​​載​​​所​​​需​​​的​​​檔​​​案​​​系​​​統​​​、​​​建​​​立​​​控​​​制​​​群​​​組​​​、​​​並​​​為​​​每​​​個​​​群​​​組​​​設​​​定​​​子​​​系​​​統​​​。​​​
與​​​ libcgroup 套​​​件​​​一​​​起​​​安​​​裝​​​的​​​預​​​設​​​ /etc/cgconfig.conf 檔​​​案​​​,會​​​為​​​各​​​系​​​統​​​建​​​立​​​與​​​掛​​​載​​​個​​​別​​​的​​​階​​​層​​​,並​​​將​​​子​​​系​​​統​​​連​​​接​​​至​​​這​​​些​​​階​​​層​​​。​​​
若​​​您​​​停​​​用​​​了​​​ cgconfig 服​​​務​​​(透​​​過​​​ service cgconfig stop),它​​​會​​​將​​​它​​​所​​​掛​​​載​​​的​​​所​​​有​​​階​​​層​​​卸​​​載​​​。​​​

2.1.1. cgconfig.conf 檔​​​案​​​

/etc/cgconfig.conf 檔​​​案​​​包​​​含​​​了​​​兩​​​種​​​主​​​要​​​的​​​條​​​目​​​:mount 與​​​ group。​​​掛​​​載​​​條​​​目​​​會​​​建​​​立​​​、​​​掛​​​載​​​階​​​層​​​,使​​​之​​​成​​​為​​​虛​​​擬​​​檔​​​案​​​系​​​統​​​;並​​​把​​​子​​​系​​​統​​​連​​​結​​​到​​​這​​​些​​​階​​​層​​​上​​​。​​​舉​​​例​​​來​​​說​​​:
mount {
    <controller> = <path>;
    …
}
範​​​例​​​用​​​法​​​請​​​見​​​〈​​​範例 2.1, “建​​​立​​​掛​​​載​​​點​​​”〉​​​。​​​

範例 2.1. 建​​​立​​​掛​​​載​​​點​​​

以​​​下​​​範​​​例​​​會​​​為​​​ cpuset 子​​​系​​​統​​​建​​​立​​​一​​​組​​​階​​​層​​​:
mount {
    cpuset = /cgroup/cpu;
}
這​​​命​​​令​​​列​​​相​​​當​​​於​​​:
~]# mkdir /cgroup/cpu
~]# mount -t cgroup -o cpu cpu /cgroup/cpu
群​​​組​​​條​​​目​​​會​​​建​​​立​​​控​​​制​​​群​​​組​​​,並​​​設​​​定​​​子​​​系​​​統​​​參​​​數​​​。​​​群​​​組​​​條​​​目​​​會​​​透​​​過​​​以​​​下​​​語​​​法​​​定​​​義​​​:
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 daemon 建​​​立​​​控​​​制​​​群​​​組​​​,賦​​​予​​​ sqladmin 群​​​組​​​的​​​使​​​用​​​者​​​把​​​任​​​務​​​加​​​入​​​控​​​制​​​群​​​組​​​的​​​權​​​限​​​,並​​​賦​​​予​​​ root 使​​​用​​​者​​​修​​​改​​​子​​​系​​​統​​​參​​​數​​​的​​​權​​​限​​​。​​​
group daemons/sql {
    perm {
        task {
            uid = root;
            gid = sqladmin;
        } admin {
            uid = root;
            gid = root;
        }
    } cpu {
        cpu.shares = 100;
    }
}
跟​​​〈​​​範例 2.1, “建​​​立​​​掛​​​載​​​點​​​”〉​​​裡​​​的​​​掛​​​載​​​點​​​範​​​例​​​結​​​合​​​之​​​後​​​,相​​​當​​​於​​​以​​​下​​​指​​​令​​​:
~]# 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

注意

要​​​讓​​​ /etc/cgconfig.conf 裡​​​的​​​改​​​變​​​生​​​效​​​,請​​​重​​​新​​​啟​​​動​​​ cgconfig 服​​​務​​​:
~]# service cgconfig restart
當​​​您​​​安​​​裝​​​ cgroups 時​​​,配​​​置​​​範​​​例​​​會​​​寫​​​入​​​ /etc/cgconfig.conf。​​​以​​​ # 符​​​號​​​開​​​始​​​的​​​每​​​一​​​行​​​表​​​示​​​註​​​解​​​,cgconfig 服​​​務​​​不​​​會​​​處​​​理​​​。​​​