Docker Cgroups
Docker中利用namespace來做權限控制,用cgroups來做資源控制,這兩個都是非常重要的,下面是整理了一些關于cgroups相關的。
cgroups全稱control groups ,是Linux內核提供的一種機制,用來限制、控制與分離一個進程組的資源(如CPU、內存、磁盤輸入輸出等)。
cgroups最初的目標是為資源管理提供的一個統一的框架,即整合現有的cpuset等子系統,也為未來開發新的子系統提供接口。現在的cgroups適用于多種應用場景,從單個進程的資源控制,到實現操作系統層次的虛擬化,cgroups提供了以下功能:
cgroup的API以一個偽文件系統的方式實現,即用戶可以通過文件操作實現cgroup的組織管理。
cgroup 的組織管理操作單元可以細粒度到線程級別,用戶態代碼也可以針對系統分配的資源創建和銷毀cgroup,從而實現資源再分配和管理。
所有資源管理的功能都以subsystem(子系統)的方式實現。
子進程創建之初與其父進程處于同一個cgroups的控制組。
術語:
task(任務)
系統中的進程。
cgroup(控制組)
cgroups中的資源控制都以cgroup為單位實現。cgroup表示按某種資源控制標準劃分而成的任務組,包含一個或多個子系統。一個任務可以加入某個cgroup,也可以從某個cgroup遷移到另外一個cgroup。
?
subsystem(子系統)
cgroups中的subsystem就是一個資源調度控制器(Resource Controller)。比如CPU子系統可以控制CPU時間分配,內存子系統可以限制cgroup內存使用量。
?
hierarchy(層級樹)
hierarchy由一系列cgroup以一個樹狀結構排列而成,每個hierarchy通過綁定對應的subsystem進行資源調度。hierarchy中的cgroup節點可以包含0或者多個子節點,子節點繼承父節點屬性。整個系統可以有多個hierarchy。
?
cgroup是分層管理的,類似進程,且子cgroup會繼承上級cgroup的一些屬性。
?
下面簡單做一個對指定進程cpu使用率限制的例子感受下。
先用mount命令查看掛載目錄
mount -t cgroup
?
cd 過去創建一個測試的節點(文件夾)
cd /sys/fs/cgroup/cpu
sudo mkdir cpu_limit_demo
?
創建好cpu_limit_demo目錄后cd過去會發現系統會自動創建很多文件。
?
跟上一層路徑下面的文件很像,可以理解成是樹的更深一個層的節點。
?
cfs_period 和 cfs_quota兩個文件,這兩個參數需要組合使用,可以用來限制進程在長度為cfs_period 的一段時間內,只能被分配到總量為cfs_quota 的 CPU 時間。
看下默認值:
?
-1表示不啟用,假如現在想控制某個進程cpu上限是50%,就在quota里面直接插入一個50000(period的一半)。
?
先跑一個whlie1 把 cpu 打滿
while : ; do : ; done &
?
然后執行 echo 50000 > cpu.cfs_quota_us?限制50% 使用率,然后再把需要限制的pid卸載tasks里面 echo 30880 > tasks
?
還有很多其他限制例子,可以看下這個
https://www.cnblogs.com/wdliu/p/10509045.html
?
?
?
?
?
總結
以上是生活随笔為你收集整理的Docker Cgroups的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker 底层实现
- 下一篇: Docker 修改运行中的容器端口映射