Cgroups是什么?
金水ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!cgroups(Control Groups) 是 linux 內(nèi)核提供的一種機(jī)制,這種機(jī)制可以根據(jù)需求把一系列系統(tǒng)任務(wù)及其子任務(wù)整合(或分隔)到按資源劃分等級的不同組內(nèi),從而為系統(tǒng)資源管理提供一個(gè)統(tǒng)一的框架。簡單說,cgroups 可以限制、記錄任務(wù)組所使用的物理資源。本質(zhì)上來說,cgroups 是內(nèi)核附加在程序上的一系列鉤子(hook),通過程序運(yùn)行時(shí)對資源的調(diào)度觸發(fā)相應(yīng)的鉤子以達(dá)到資源追蹤和限制的目的。
本文以 Ubuntu 16.04 系統(tǒng)為例介紹 cgroups,所有的 demo 均在該系統(tǒng)中演示。
為什么要了解 cgroups
在以容器技術(shù)為代表的虛擬化技術(shù)大行其道的時(shí)代了解 cgroups 技術(shù)是非常必要的!比如我們可以很方便的限制某個(gè)容器可以使用的 CPU、內(nèi)存等資源,這究竟是如何實(shí)現(xiàn)的呢?通過了解 cgroups 技術(shù),我們可以窺探到 linux 系統(tǒng)中整個(gè)資源限制系統(tǒng)的脈絡(luò)。從而幫助我們更好的理解和使用 linux 系統(tǒng)。
cgroups 的主要作用
實(shí)現(xiàn) cgroups 的主要目的是為不同用戶層面的資源管理提供一個(gè)統(tǒng)一化的接口。從單個(gè)任務(wù)的資源控制到操作系統(tǒng)層面的虛擬化,cgroups 提供了四大功能:
相關(guān)概念
Task(任務(wù)) 在 linux 系統(tǒng)中,內(nèi)核本身的調(diào)度和管理并不對進(jìn)程和線程進(jìn)行區(qū)分,只是根據(jù) clone 時(shí)傳入的參數(shù)的不同來從概念上區(qū)分進(jìn)程和線程。這里使用 task 來表示系統(tǒng)的一個(gè)進(jìn)程或線程。
Cgroup(控制組) cgroups 中的資源控制以 cgroup 為單位實(shí)現(xiàn)。Cgroup 表示按某種資源控制標(biāo)準(zhǔn)劃分而成的任務(wù)組,包含一個(gè)或多個(gè)子系統(tǒng)。一個(gè)任務(wù)可以加入某個(gè) cgroup,也可以從某個(gè) cgroup 遷移到另一個(gè) cgroup。
Subsystem(子系統(tǒng)) cgroups 中的子系統(tǒng)就是一個(gè)資源調(diào)度控制器(又叫 controllers)。比如 CPU 子系統(tǒng)可以控制 CPU 的時(shí)間分配,內(nèi)存子系統(tǒng)可以限制內(nèi)存的使用量。以筆者使用的 Ubuntu 16.04.3 為例,其內(nèi)核版本為 4.10.0,支持的 subsystem 如下( cat /proc/cgroups):
blkio 對塊設(shè)備的 IO 進(jìn)行限制。
cpu 限制 CPU 時(shí)間片的分配,與 cpuacct 掛載在同一目錄。
cpuacct 生成 cgroup 中的任務(wù)占用 CPU 資源的報(bào)告,與 cpu 掛載在同一目錄。
cpuset 給 cgroup 中的任務(wù)分配獨(dú)立的 CPU(多處理器系統(tǒng)) 和內(nèi)存節(jié)點(diǎn)。
devices 允許或禁止 cgroup 中的任務(wù)訪問設(shè)備。
freezer 暫停/恢復(fù) cgroup 中的任務(wù)。
hugetlb 限制使用的內(nèi)存頁數(shù)量。
memory 對 cgroup 中的任務(wù)的可用內(nèi)存進(jìn)行限制,并自動(dòng)生成資源占用報(bào)告。
net_cls 使用等級識(shí)別符(classid)標(biāo)記網(wǎng)絡(luò)數(shù)據(jù)包,這讓 Linux 流量控制器(tc 指令)可以識(shí)別來自特定 cgroup 任務(wù)的數(shù)據(jù)包,并進(jìn)行網(wǎng)絡(luò)限制。
net_prio 允許基于 cgroup 設(shè)置網(wǎng)絡(luò)流量(netowork traffic)的優(yōu)先級。
perf_event 允許使用 perf 工具來監(jiān)控 cgroup。
pids 限制任務(wù)的數(shù)量。
Hierarchy(層級) 層級有一系列 cgroup 以一個(gè)樹狀結(jié)構(gòu)排列而成,每個(gè)層級通過綁定對應(yīng)的子系統(tǒng)進(jìn)行資源控制。層級中的 cgroup 節(jié)點(diǎn)可以包含零個(gè)或多個(gè)子節(jié)點(diǎn),子節(jié)點(diǎn)繼承父節(jié)點(diǎn)掛載的子系統(tǒng)。一個(gè)操作系統(tǒng)中可以有多個(gè)層級。
cgroups 的文件系統(tǒng)接口
cgroups 以文件的方式提供應(yīng)用接口,我們可以通過 mount 命令來查看 cgroups 默認(rèn)的掛載點(diǎn):
復(fù)制代碼 代碼如下:
網(wǎng)站名稱:linuxcgroups詳細(xì)介紹-創(chuàng)新互聯(lián)
當(dāng)前URL:http://weahome.cn/article/dopjic.html