linux中的CGroup介紹

2021-08-30 17:39:19 字數 2266 閱讀 8724

cgroup 是 control groups 的縮寫,是 linux 核心提供的一種可以限制、記錄、隔離程序組 (process groups) 所使用的物力資源 (如 cpu memory i/o 等等) 的機制。2007 年進入 linux 2.6.24 核心,cgroups 不是全新創造的,它將程序管理從 cpuset 中剝離出來,作者是 google 的 paul menage。cgroups 也是 lxc 為實現虛擬化所使用的資源管理手段。

cgroup 是將任意程序進行分組化管理的 linux 核心功能。cgroup 本身是提供將程序進行分組化管理的功能和介面的基礎結構,i/o 或記憶體的分配控制等具體的資源管理功能是通過這個功能來實現的。這些具體的資源管理功能稱為 cgroup 子系統或控制器。cgroup 子系統有控制記憶體的 memory 控制器、控制程序排程的 cpu 控制器等。執行中的核心可以使用的 cgroup 子系統由/proc/cgroup 來確認。

cgroup 提供了乙個 cgroup 虛擬檔案系統,作為進行分組管理和各子系統設定的使用者介面。要使用 cgroup,必須掛載 cgroup 檔案系統。這時通過掛載選項指定使用哪個子系統。

cgroups提供了以下功能:

1.限制程序組可以使用的資源數量(resource limiting )。比如:memory子系統可以為程序組設定乙個memory使用上限,一旦程序組使用的記憶體達到限額再申請記憶體,就會出發oom(out of memory)。

2.程序組的優先順序控制(prioritization )。比如:可以使用cpu子系統為某個程序組分配特定cpu share。

3.記錄程序組使用的資源數量(accounting )。比如:可以使用cpuacct子系統記錄某個程序組使用的cpu時間

4.程序組隔離(isolation)。比如:使用ns子系統可以使不同的程序組使用不同的namespace,以達到隔離的目的,不同的程序組有各自的程序、網路、檔案系統掛載空間。

5.程序組控制(control)。比如:使用freezer子系統可以將程序組掛起和恢復。

cgroup會mount一些檔案系統來實現自己的機制

mount -t cgroup

cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)

cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)

cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)

cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_prio,net_cls)

cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)

cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)

cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)

cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)

cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)

cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)

cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)

Linux的資源控制 cgroup

1 cgroup cgroup與程序類似,是分等級的。各個屬性繼承于父程序。使用者可以通過cgroup為其控制的任務分配資源,如 cpu 記憶體 網路頻寬等。cgroup包含了多個子系統,每個子系統代表乙個單一的資源。以redhat企業版6為例,共有9個子系統。分別為 a blkio 用於限制每個塊...

003 Linux的Cgroup《例項詳解》

為什麼要有cgroup linux系統中經常有個需求就是希望能限制某個或者某些程序的分配資源。也就是能完成一組容器的概念,在這個容器中,有分配好的特定比例的cpu時間,io時間,可用記憶體大小等。於是就出現了cgroup的概念,cgroup就是controller group,最初由google的工...

cgroup簡單的操作

cgroup技術被廣泛的用於linux作業系統的環境下的物理分割,是linux container技術的底基礎技術,是虛擬化技術的基礎。cgroup是control groups的縮寫,是linux核心提供的一種可以限制 記錄 隔離程序組所使用的物理資源的機制。可以將任意程序進行分組化管理的linu...