Docker學習系列:聊一聊資源限制使用的Cgroup技術
今天在看Docker技術實現的時候,看到了Cgroup這個技術,原先沒有深入瞭解Docker怎麼實現資源隔離也沒有怎麼關注過。這次看到了Cgroup,那麼順便也記錄Cgroup這個技術。
第一次接觸Cgroup
第一次接觸到Cgroup是去年在一家公司做大資料程式,有部分程式實現的程式碼需要把部署在伺服器上的程式與C語言程式進行系統資源隔離分開。
避免兩個程式進行資源的爭奪導致其他程式失敗,我們在實現的過程中就是採用的Cgroup。
什麼是Cgroup
Cgroup是Linux核心提供的一種可以限制,記錄,隔離程序組所使用的物力資源的機制。
作者是Goolge的Paul Menage,為LXC實現虛擬化所採用的 的資源管理手段。
其實Cgroup是從Linux的程序管理中的cpuset剝離出來的。
功能及組成
Cgroup 能夠將程序進行分組然後進行管理I/O,記憶體的分配,CPU的使用等等,這些資源管理功能稱為Cgroup的子系統或者控制系統。
核心使用Cgroup子系統由/proc/cgroup確認.
在想使用這些分組管理以及子系統,那麼在系統中需要掛載CGroup的檔案系統。
支援的子系統如下:
檔名稱 | 讀與寫 | 用途 |
---|---|---|
Task | 讀與寫 | 設定分組的執行緒的列表 |
Cgroup.procs | 讀 | 屬於分組的程序PID列表,包含多執行緒程序的執行緒leader的TID |
enent_control | 讀與寫 | 監視狀態變化和分組刪除事件的配置檔案 |
概念解釋
- 任務:系統的一個子程序。
- control group 控制族群。按照某一個標準出現的程序組。
- 層級:金字塔結構,底層繼承父層的屬性限制。
- 子系統:一個子系統就是資源控制器。子系統加入到某個層級以後,層級上的所有控制族群都受到子系統的控制。
架構圖

摘自IBM論壇
從架構圖中我們可以看到該技術是用在作業系統的底層上的,起到Container的作用。
Docker也利用了CGroup
我們在系統上建立多個容器,並且使用run 引數設定cpu,記憶體等資訊。其實機制也是利用了CGroup技術來達到的實現。
為什麼我們要限制資源?
如果我們在一個系統級別上創立了很多種容器。並且都沒有對容器進行資源的限制。
當使用這些容器執行時,就可能出現資源競爭的情況,並且可能存在某個容器把資源搶光的情景。
這就是CGroup需要做的事情了,進行資源的隔離。