cgroup限制計(jì)算機(jī)資源

Namespace:環(huán)境隔離,未對(duì)計(jì)算機(jī)資源使用上的隔離,如進(jìn)程使用的CPU、內(nèi)存、磁盤等

Linux CGroup全稱Linux Control Group, 是Linux內(nèi)核的一個(gè)功能,用來(lái)限制,控制與分離一個(gè)進(jìn)程組群的資源(如CPU、內(nèi)存、磁盤輸入輸出等)。這個(gè)項(xiàng)目最早是由Google的工程師在2006年發(fā)起(主要是Paul Menage和Rohit Seth),最早的名稱為進(jìn)程容器(process containers)。在2007年時(shí),因?yàn)樵贚inux內(nèi)核中,容器(container)這個(gè)名詞太過(guò)廣泛,為避免混亂,被重命名為cgroup,并且被合并到2.6.24版的內(nèi)核中去。然后,其它開(kāi)始了他的發(fā)展。

Linux CGroupCgroup 可讓您為系統(tǒng)中所運(yùn)行任務(wù)(進(jìn)程)的用戶定義組群分配資源 — 比如 CPU 時(shí)間、系統(tǒng)內(nèi)存、網(wǎng)絡(luò)帶寬或者這些資源的組合。您可以監(jiān)控您配置的 cgroup,拒絕 cgroup 訪問(wèn)某些資源,甚至在運(yùn)行的系統(tǒng)中動(dòng)態(tài)配置您的 cgroup。

主要提供功能

Resource limitation: 限制資源使用,比如內(nèi)存使用上限以及文件系統(tǒng)的緩存限制。
Prioritization: 優(yōu)先級(jí)控制,比如:CPU利用和磁盤IO吞吐。
Accounting: 一些審計(jì)或一些統(tǒng)計(jì),主要目的是為了計(jì)費(fèi)。
Control: 掛起進(jìn)程,恢復(fù)執(zhí)行進(jìn)程。

主要用途

隔離一個(gè)進(jìn)程集合(比如:nginx的所有進(jìn)程),并限制他們所消費(fèi)的資源,比如綁定CPU的核。
為這組進(jìn)程 分配其足夠使用的內(nèi)存
為這組進(jìn)程分配相應(yīng)的網(wǎng)絡(luò)帶寬和磁盤存儲(chǔ)限制
限制訪問(wèn)某些設(shè)備(通過(guò)設(shè)置設(shè)備的白名單)

(base) root@dell:~ # mount -t cgroup
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,name=systemd)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
CGroup的子系統(tǒng)

blkio — 這個(gè)子系統(tǒng)為塊設(shè)備設(shè)定輸入/輸出限制,比如物理設(shè)備(磁盤,固態(tài)硬盤,USB 等等)。
cpu — 這個(gè)子系統(tǒng)使用調(diào)度程序提供對(duì) CPU 的 cgroup 任務(wù)訪問(wèn)。
cpuacct — 這個(gè)子系統(tǒng)自動(dòng)生成 cgroup 中任務(wù)所使用的 CPU 報(bào)告。
cpuset — 這個(gè)子系統(tǒng)為 cgroup 中的任務(wù)分配獨(dú)立 CPU(在多核系統(tǒng))和內(nèi)存節(jié)點(diǎn)。
devices — 這個(gè)子系統(tǒng)可允許或者拒絕 cgroup 中的任務(wù)訪問(wèn)設(shè)備。
freezer — 這個(gè)子系統(tǒng)掛起或者恢復(fù) cgroup 中的任務(wù)。
memory — 這個(gè)子系統(tǒng)設(shè)定 cgroup 中任務(wù)使用的內(nèi)存限制,并自動(dòng)生成內(nèi)存資源使用報(bào)告。
net_cls — 這個(gè)子系統(tǒng)使用等級(jí)識(shí)別符(classid)標(biāo)記網(wǎng)絡(luò)數(shù)據(jù)包,可允許 Linux 流量控制程序(tc)識(shí)別從具體 cgroup 中生成的數(shù)據(jù)包。
net_prio — 這個(gè)子系統(tǒng)用來(lái)設(shè)計(jì)網(wǎng)絡(luò)流量的優(yōu)先級(jí)
hugetlb — 這個(gè)子系統(tǒng)主要針對(duì)于HugeTLB系統(tǒng)進(jìn)行限制,這是一個(gè)大頁(yè)文件系統(tǒng)。

相關(guān)術(shù)語(yǔ)
  • 任務(wù)(Tasks):就是系統(tǒng)的一個(gè)進(jìn)程。
  • 控制組(Control Group):一組按照某種標(biāo)準(zhǔn)劃分的進(jìn)程,比如官方文檔中的Professor和Student,或是WWW和System之類的,其表示了某進(jìn)程組。Cgroups中的資源控制都是以控制組為單位實(shí)現(xiàn)。一個(gè)進(jìn)程可以加入到某個(gè)控制組。而資源的限制是定義在這個(gè)組上,就像上面示例中我用的haoel一樣。簡(jiǎn)單點(diǎn)說(shuō),cgroup的呈現(xiàn)就是一個(gè)目錄帶一系列的可配置文件。
  • 層級(jí)(Hierarchy):控制組可以組織成hierarchical的形式,既一顆控制組的樹(shù)(目錄結(jié)構(gòu))??刂平M樹(shù)上的子節(jié)點(diǎn)繼承父結(jié)點(diǎn)的屬性。簡(jiǎn)單點(diǎn)說(shuō),hierarchy就是在一個(gè)或多個(gè)子系統(tǒng)上的cgroups目錄樹(shù)。
  • 子系統(tǒng)(Subsystem):一個(gè)子系統(tǒng)就是一個(gè)資源控制器,比如CPU子系統(tǒng)就是控制CPU時(shí)間分配的一個(gè)控制器。子系統(tǒng)必須附加到一個(gè)層級(jí)上才能起作用,一個(gè)子系統(tǒng)附加到某個(gè)層級(jí)以后,這個(gè)層級(jí)上的所有控制族群都受到這個(gè)子系統(tǒng)的控制。Cgroup的子系統(tǒng)可以有很多,也在不斷增加中。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容