Cgroups是什么?
cgroups(Control Groups) 是 linux 內(nèi)核提供的一種機(jī)制,這種機(jī)制可以根據(jù)需求把一系列系統(tǒng)任務(wù)及其子任務(wù)整合(或分隔)到按資源劃分等級(jí)的不同組內(nèi),從而為系統(tǒng)資源管理提供一個(gè)統(tǒng)一的框架。簡(jiǎn)單說(shuō),cgroups 可以限制、記錄任務(wù)組所使用的物理資源。本質(zhì)上來(lái)說(shuō),cgroups 是內(nèi)核附加在程序上的一系列鉤子(hook),通過(guò)程序運(yùn)行時(shí)對(duì)資源的調(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)的呢?通過(guò)了解 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)度和管理并不對(duì)進(jìn)程和線程進(jìn)行區(qū)分,只是根據(jù) clone 時(shí)傳入的參數(shù)的不同來(lái)從概念上區(qū)分進(jìn)程和線程。這里使用 task 來(lái)表示系統(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 對(duì)塊設(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ù)訪問(wèn)設(shè)備。
freezer 暫停/恢復(fù) cgroup 中的任務(wù)。
hugetlb 限制使用的內(nèi)存頁(yè)數(shù)量。
memory 對(duì) cgroup 中的任務(wù)的可用內(nèi)存進(jìn)行限制,并自動(dòng)生成資源占用報(bào)告。
net_cls 使用等級(jí)識(shí)別符(classid)標(biāo)記網(wǎng)絡(luò)數(shù)據(jù)包,這讓 Linux 流量控制器(tc 指令)可以識(shí)別來(lái)自特定 cgroup 任務(wù)的數(shù)據(jù)包,并進(jìn)行網(wǎng)絡(luò)限制。
net_prio 允許基于 cgroup 設(shè)置網(wǎng)絡(luò)流量(netowork traffic)的優(yōu)先級(jí)。
perf_event 允許使用 perf 工具來(lái)監(jiān)控 cgroup。
pids 限制任務(wù)的數(shù)量。
Hierarchy(層級(jí)) 層級(jí)有一系列 cgroup 以一個(gè)樹(shù)狀結(jié)構(gòu)排列而成,每個(gè)層級(jí)通過(guò)綁定對(duì)應(yīng)的子系統(tǒng)進(jìn)行資源控制。層級(jí)中的 cgroup 節(jié)點(diǎn)可以包含零個(gè)或多個(gè)子節(jié)點(diǎn),子節(jié)點(diǎn)繼承父節(jié)點(diǎn)掛載的子系統(tǒng)。一個(gè)操作系統(tǒng)中可以有多個(gè)層級(jí)。
cgroups 的文件系統(tǒng)接口
cgroups 以文件的方式提供應(yīng)用接口,我們可以通過(guò) mount 命令來(lái)查看 cgroups 默認(rèn)的掛載點(diǎn):
復(fù)制代碼 代碼如下:
分享題目:linuxcgroups詳細(xì)介紹-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://aaarwkj.com/article2/dopjic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、定制開(kāi)發(fā)、響應(yīng)式網(wǎng)站、微信公眾號(hào)、網(wǎng)站收錄、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容