Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
章 1. 控制群組(Cgroup)簡介
Red Hat Enterprise Linux 6 提供了一項新的 kernel 功能:control groups,在本指南中簡稱為 cgroup。Cgroup 能讓您分配資源 — 例如 CPU 時間、系統記憶體、網路頻寬,或這些資源的組合 — 於系統上,使用者定義的運作中工作群組(程序)。您可監控您所配置的 cgroup,拒絕 cgroup 對於特定資源的存取,甚至是在一部運作中的系統上,動態式地重新配置您的 cgroup。
cgconfig(“控制群組配置 ”)服務可被配置成在開機時啟用,並重新建立您預定義的 cgroup,如此便能使它們在重新開機時可保有一致性。
透過使用 cgroup,系統管理員能取得分配、處理優先順序、拒絕、管理,以及監控系統資源的細部控制。硬體資源可機敏地分配於工作與使用者之間,並提昇整體效率。
1.1. 如何管理控制群組
Cgroup 是透過階層式的方式來管理的,和程序、子群組相同,都會由它們的 parent 繼承部份屬性。然而,這兩個模型之間有所不同。
Linux 程序模型
Linux 系統上的所有程序皆為相同 parent 的子程序:
init 程序,由 kernel 在開機時執行,並啟用其它程序(並且可能會相應地啟用它們自己的子程序)。因為所有程序皆源自於單獨的父程序,因此 Linux 的程序模型屬於單獨的階層或樹狀目錄。
此外,所有除了
init 以外的程序皆會繼承其父程序的環境(例如 PATH 變數)[1] 與特定屬性(例如開放式的檔案描述元)。
Cgroup 模型
Cgroup 與程序的相似點為:
- 它們皆屬於階層式,並且
- 子 cgroup 會繼承其父群組的特定屬性。
基礎差異就是在同一部系統上,能夠同時存在許多不同的 cgroup 階層。若 Linux 程序模型是個程序的單樹狀,那麼 cgroup 模型便是個各別、未連接的樹狀工作(例如程序)。
多重各別的 cgroup 階層是必要的,因為各個階層皆連至了「一個或更多」個「子系統」。子系統[2]代表單獨的資源,例如 CPU 時間或記憶體。Red Hat Enterprise Linux 6 提供了九個控制群組子系統,以名稱和功能列在下方。
Red Hat Enterprise Linux 中的可用子系統
blkio— 此子系統可設置來自於,以及至區塊裝置(例如像是固態、USB 等等的實體磁碟)的輸入/輸出存取限制。cpu— 此子系統使用了排程器,以提供 CPU cgroup 工作的存取權限。cpuacct— 此子系統會自動產生 cgroup 中的工作所使用的 CPU 資源報告。cpuset— 此子系統會將個別的 CPU 與記憶體節點分配給 cgroup 中的工作。devices— 此子系統能允許或拒絕控制群組中的任務存取裝置。freezer— 此子系統可中止或復原控制群組中的工作。memory— 此子系統會根據使用於控制群組中的工作的記憶體資源,自動產生記憶體報告,然後設定這些工作所能使用的記憶體限制:net_cls— 此子系統會以一個 class 標識符號(classid)來標記網路封包,這能讓 Linux 流量控制器(tc)辨識源自於特定控制群組的封包。流量控制器能被配置來指定不同的優先順序給來自於不同控制群組的封包。ns— namespace 子系統。
注意
您在控制群組文件(例如 man page 或是 kernel 文件)中,可能會看見資源控制器(resource controller)或控制器(controller)這些名詞。這兩個名詞皆與“子系統”(subsystem)同義,這是因為子系統一般會排程資源,或套用限制至它所連至之階層中的控制群組。
子系統(資源控制器)的定義非常地一般:它是個會針對於工作群組(例如程序)進行動作的物件。