小白解說之資源控制技術(shù)cgroup

大家好,我是小白者祖。今天給大家講解一下Linux下的資源控制cgroup。

提到cgroup绢彤,可能有的同學(xué)一時(shí)不太清楚做什么用的七问,但大家應(yīng)該都用過公有云虛擬機(jī)或者容器,套餐1C2G杖虾,如何限制資源使用實(shí)現(xiàn)的呢烂瘫,答案就是cgroup啦~

一媒熊、何為cgroup

Linux cgroups 的全稱是 Linux Control Groups奇适,它是 Linux 內(nèi)核的特性,主要作用是限制芦鳍、記錄和隔離進(jìn)程組(process groups)使用的物理資源(cpu嚷往、memory、IO 等)柠衅。

cgroups 從設(shè)計(jì)之初使命就很明確皮仁,為進(jìn)程提供資源控制,它主要的功能包括:

  • 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)程

目前 cgroups 已經(jīng)成為很多技術(shù)的基礎(chǔ)粟耻,比如 Openstack查近、LXC、Docker挤忙、Kubernetes霜威、systemd等。

二册烈、Cgroup概念

cgroup 全程control group戈泼,除了它本身的概念,還有Task(進(jìn)程)赏僧、 Hierarchy(層級(jí)結(jié)構(gòu)) 和 subsystem(子系統(tǒng)) 的概念

1. cgroups子系統(tǒng)

cgroups為每種可以控制的資源定義了一個(gè)子系統(tǒng)矮冬。典型的子系統(tǒng)介紹如下:

? ? cpu 子系統(tǒng),主要限制進(jìn)程的 cpu 使用率次哈。

? ? cpuacct 子系統(tǒng)胎署,可以統(tǒng)計(jì) cgroups 中的進(jìn)程的 cpu 使用報(bào)告。

? ? cpuset 子系統(tǒng)窑滞,可以為 cgroups 中的進(jìn)程分配單獨(dú)的 cpu 節(jié)點(diǎn)或者內(nèi)存節(jié)點(diǎn)琼牧。

? ? memory 子系統(tǒng),可以限制進(jìn)程的 memory 使用量哀卫。

? ? blkio 子系統(tǒng)巨坊,可以限制進(jìn)程的塊設(shè)備 io。

? ? devices 子系統(tǒng)此改,可以控制進(jìn)程能夠訪問某些設(shè)備趾撵。

? ? net_cls 子系統(tǒng),可以標(biāo)記 cgroups 中進(jìn)程的網(wǎng)絡(luò)數(shù)據(jù)包共啃,然后可以使用 tc 模塊(traffic control)對(duì)數(shù)據(jù)包進(jìn)行控制占调。

? ? freezer 子系統(tǒng),可以掛起或者恢復(fù) cgroups 中的進(jìn)程移剪。

? ? ns 子系統(tǒng)究珊,可以使不同 cgroups 下面的進(jìn)程使用不同的 namespace。

這里面每一個(gè)子系統(tǒng)都需要與內(nèi)核的其他模塊配合來完成資源的控制纵苛,比如對(duì) cpu 資源的限制是通過進(jìn)程調(diào)度模塊根據(jù) cpu 子系統(tǒng)的配置來完成的剿涮;對(duì)內(nèi)存資源的限制則是內(nèi)存模塊根據(jù) memory 子系統(tǒng)的配置來完成的,而對(duì)網(wǎng)絡(luò)數(shù)據(jù)包的控制則需要 Traffic Control 子系統(tǒng)來配合完成攻人。本文不會(huì)討論內(nèi)核是如何使用每一個(gè)子系統(tǒng)來實(shí)現(xiàn)資源的限制取试,而是重點(diǎn)放在內(nèi)核是如何把 cgroups 對(duì)資源進(jìn)行限制的配置有效的組織起來的,和內(nèi)核如何把cgroups 配置和進(jìn)程進(jìn)行關(guān)聯(lián)的怀吻,以及內(nèi)核是如何通過 cgroups 文件系統(tǒng)把cgroups的功能暴露給用戶態(tài)的瞬浓。


2. cgroups 層級(jí)結(jié)構(gòu)(Hierarchy)


內(nèi)核使用 cgroup 結(jié)構(gòu)體來表示一個(gè) control group 對(duì)某一個(gè)或者某幾個(gè) cgroups 子系統(tǒng)的資源限制。cgroup 結(jié)構(gòu)體可以組織成一顆樹的形式烙博,每一棵cgroup 結(jié)構(gòu)體組成的樹稱之為一個(gè) cgroups 層級(jí)結(jié)構(gòu)瑟蜈。cgroups層級(jí)結(jié)構(gòu)可以 attach 一個(gè)或者幾個(gè) cgroups 子系統(tǒng)烟逊,當(dāng)前層級(jí)結(jié)構(gòu)可以對(duì)其 attach 的 cgroups 子系統(tǒng)進(jìn)行資源的限制。每一個(gè) cgroups 子系統(tǒng)只能被 attach 到一個(gè) cpu 層級(jí)結(jié)構(gòu)中铺根。

3. cgroup概念間的關(guān)系

? ? 系統(tǒng)創(chuàng)建hierarchy 之后宪躯,所有的進(jìn)程都會(huì)加入這個(gè)hierarchy的cgroup的根節(jié)點(diǎn)。在這個(gè)cgroup根節(jié)點(diǎn)是hierarchy默認(rèn)創(chuàng)建的位迂。

? ? 一個(gè)subsystem只能附加到一個(gè)hierarchy上面访雪。

? ? 一個(gè)進(jìn)程可以作為多個(gè)cgroup的成員,但是cgroup必須在不同的hierarchy中掂林。

? ? 一個(gè)進(jìn)程fork的子進(jìn)程和父進(jìn)程在同一個(gè)cgroup中也可以根據(jù)需要移到其他cgroup中臣缀。

三、容器如何使用cgroup的

1. Docker容器和cgroup

Docker 容器的內(nèi)存限制放在了 /sys/fs/cgroup/memory/docker 目錄下泻帮,比如:

2. Kubernetes Pod和cgroup

CRI-O 是被設(shè)計(jì)面向 Kubernetes 的精置,所以在一些目錄名中就有濃濃的 k8s 風(fēng)格。

CRI-O 容器的內(nèi)存限制放在了 /sys/fs/cgroup/memory/kubepods.slice 目錄下锣杂,這一層目錄下脂倦,又根據(jù) QoS 創(chuàng)建了三個(gè)子目錄 kubepods-besteffort.slice、kubepods-burstable.slice元莫、kubepods-guaranteed.sice 分別表示三種不同 QoS Class的內(nèi)存限制赖阻。

#kubectl -n wcloud get pods

#docker inspect k8s_xxxx-scheduler_xxxx-scheduler-0_wcloud_e9ea0db4-cbbb-4902-99d2-21c9b9b3d20b_0 |grep CgroupParent


"CgroupParent": "/kubepods/besteffort/pode9ea0db4-cbbb-4902-99d2-21c9b9b3d20b",

Kubernete對(duì)資源的限制,靠的是cri-o踱蠢,cri-o對(duì)資源的限制火欧,靠的是Linux Cgroup 。


Linux Cgroup 限制資源茎截,是限制進(jìn)程苇侵,只需要在Cgroup配置目錄的tasks文件中,添加進(jìn)程ID稼虎,限制立即生效衅檀。

Linux Cgroup 不僅僅可以限制CPU,內(nèi)存霎俩,還可以限制磁盤IO等。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末沉眶,一起剝皮案震驚了整個(gè)濱河市打却,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谎倔,老刑警劉巖柳击,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異片习,居然都是意外死亡捌肴,警方通過查閱死者的電腦和手機(jī)蹬叭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來状知,“玉大人秽五,你說我怎么就攤上這事〖玻” “怎么了坦喘?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)西设。 經(jīng)常有香客問我瓣铣,道長(zhǎng),這世上最難降的妖魔是什么贷揽? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任棠笑,我火速辦了婚禮,結(jié)果婚禮上禽绪,老公的妹妹穿的比我還像新娘腐晾。我一直安慰自己,他們只是感情好丐一,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布藻糖。 她就那樣靜靜地躺著,像睡著了一般库车。 火紅的嫁衣襯著肌膚如雪巨柒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天柠衍,我揣著相機(jī)與錄音洋满,去河邊找鬼。 笑死珍坊,一個(gè)胖子當(dāng)著我的面吹牛牺勾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播阵漏,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼驻民,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了履怯?” 一聲冷哼從身側(cè)響起回还,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叹洲,沒想到半個(gè)月后柠硕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡运提,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年蝗柔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闻葵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡癣丧,死狀恐怖槽畔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坎缭,我是刑警寧澤竟痰,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站掏呼,受9級(jí)特大地震影響坏快,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜憎夷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一莽鸿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拾给,春花似錦祥得、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)额衙。三九已至,卻和暖如春窍侧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伟件。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工硼啤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人斧账。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像其骄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拯爽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 今天青石的票圈出鏡率最高的,莫過于張藝謀的新片終于定檔了三椿。 一張滿溢著水墨風(fēng)的海報(bào)一次次的出現(xiàn)在票圈里,也就是老謀...
    青石電影閱讀 10,336評(píng)論 1 2
  • 一搜锰、jQuery簡(jiǎn)介 JQ是JS的一個(gè)優(yōu)秀的庫(kù)耿战,大型開發(fā)必備蛋叼。在此剂陡,我想說的是,JQ里面很多函數(shù)使用和JS類似鸭栖,所...
    Welkin_qing閱讀 12,339評(píng)論 1 6
  • 字符串 1.什么是字符串 使用單引號(hào)或者雙引號(hào)括起來的字符集就是字符串。 引號(hào)中單獨(dú)的符號(hào)松却、數(shù)字捏题、字母等叫字符玻褪。 ...
    mango_2e17閱讀 7,510評(píng)論 1 7
  • 一場(chǎng)說走就走的旅行公荧。 簡(jiǎn)單地整理幾件必備旅行用品,7.18日早上8.00準(zhǔn)時(shí)出發(fā)了循狰,計(jì)劃一路南下然后繞西南一圈回恩...
    悠游魚閱讀 3,473評(píng)論 3 6
  • 原來看過一段話绪钥,第一厲害的人有能力沒脾氣灿里,第二厲害的人有能力有脾氣程腹,最差的是沒能力有脾氣的人。 以我最...
    涼風(fēng)豆豆閱讀 1,546評(píng)論 2 0