使用cgroups控制進程cpu配額

Linux下的cgroups溃蔫,全稱叫Control Groups健提,最初由Google工程師提出并實現(xiàn),linux從2.6開始將這個特性納入內(nèi)核伟叛。cgroups主要對進程按組(Group)進行資源配額的控制私痹,包括CPU、內(nèi)存统刮、IO等紊遵,相比古老的ulimit,cgroups更為平滑和易用侥蒙,成為容器技術(shù)(比如docker)的基礎(chǔ)暗膜。

cgroups的形態(tài)

cgroups.png
  • hierarchy:cgroups從用戶態(tài)看,提供了一種叫cgroup類型的文件系統(tǒng)(Filesystem)鞭衩,這是一種虛擬的文件系統(tǒng)学搜,并不真正保存文件娃善,類似/proc。通過對這個文件系統(tǒng)的操作(讀瑞佩,寫会放,創(chuàng)建子目錄),告訴內(nèi)核钉凌,你希望內(nèi)核如何控制進程對資源的使用咧最。文件系統(tǒng)本身是層級的,所以構(gòu)成了hierarchy御雕。
  • task:進程(process)在cgroups中稱為task矢沿,taskid就是pid
  • subsystem:cgroups支持的所有可配置的資源稱為subsystem酸纲。例如cpu是一種subsystem捣鲸,memory也是一種subsystem。linux內(nèi)核在演進過程中subsystem是不斷增加的闽坡。
  • libcgroup:一個開源軟件栽惶,提供了一組支持cgroups的應(yīng)用程序和庫,方便用戶配置和使用cgroups疾嗅。目前許多發(fā)行版都附帶這個軟件外厂。

事實上,使用cgroups是非常簡單的代承,幾行shell命令就可以汁蝶。下面以CPU子系統(tǒng)為例,來嘗試控制一個進程的CPU利用率论悴。

掛載cgroup文件系統(tǒng)

首先掛載cgroup文件系統(tǒng):

# mkdir -p /cgroup/mave
# mount -t cgroup -o cpu mave /cgroup/mave
# cat /proc/mounts
...
mave /cgroup/mave cgroup rw,relatime,cpu 0 0

上面的命令掛載了一個cpu子系統(tǒng)掖棉,目錄為/cgroup/mave,名字叫mave膀估。cpu子系統(tǒng)用于控制進程的cpu總體占用率幔亥,是最常用的子系統(tǒng)。內(nèi)核會根據(jù)配額的設(shè)置在調(diào)度進程上做出相應(yīng)的調(diào)整察纯。

觀察/cgroup/mave目錄:

# ls  /cgroup/mave
cgroup.event_control
cpu.cfs_period_us
cpu.rt_period_us
cpu.shares
notify_on_release
cgroup.procs
cpu.cfs_quota_us
cpu.rt_runtime_us
cpu.stat
release_agent
tasks

這些文件是自動創(chuàng)建出來的帕棉,且都跟cpu這個子系統(tǒng)有關(guān)。不同的子系統(tǒng)會創(chuàng)建出不同的文件捐寥。我們重點關(guān)注:

  • cpu.cfs_period_us
  • cpu.cfs_quota_us
  • tasks

tasks

這個文件里面可以寫入一個或多個taskid(pid)笤昨,/cgroup/mave這個組中的配額設(shè)置將影響這些task祖驱。

cpu.cfs_period_us

# cat /cgroup/mave/cpu.cfs_period_us
100000

表示將cpu時間片分成100000份握恳。

cpu.cfs_quota_us

# cat /cgroup/mave/cpu.cfs_period_us
200000

表示當(dāng)前這個組中的task(/cgroup/mave/tasks中的taskid)將分配多少比例的cpu時間片。由于是雙核cpu捺僻,這里就表示最多可以用到200%的CPU乡洼。

創(chuàng)建一個控制組

盡管根目錄(/cgroup/mave)也可以設(shè)置配額崇裁,但是習(xí)慣上,我們在這個目錄下創(chuàng)建一個目錄束昵,作為一個控制組拔稳,這個控制組可以單獨設(shè)置配額,而不影響其他控制組

# mkdir /cgroup/mave/steam
# ls  /cgroup/mave/steam
cgroup.event_control
cpu.cfs_period_us
cpu.rt_period_us
cpu.shares
notify_on_release
cgroup.procs
cpu.cfs_quota_us
cpu.rt_runtime_us
cpu.stat
tasks

可以看到锹雏,創(chuàng)建的steam目錄下也會自動創(chuàng)建出一堆cpu子系統(tǒng)相關(guān)的文件巴比,幾乎和根目錄(/cgroup/mave)完全一樣。現(xiàn)在我們再來理解一下什么是hierarchy

hierarchy.png

hierarchy就是一個帶有繼承關(guān)系的目錄層次礁遵,每一層形成一個控制組轻绞,單獨控制其中的task。

一個文件系統(tǒng)可以同時掛載多種子系統(tǒng)

手動設(shè)置配額

采集器進程在不受限制的情況下全速采集佣耐,CPU占用率達到50%

eoic1.png

將5000寫入cpu.cfs_quota_us政勃,表示希望CPU占用率控制在(5000/100000=5%)以內(nèi):

# echo 5000 > /cgroup/mave/steam/cpu.cfs_quota_us

然后將進程號30126寫入tasks

# echo 30126 >> /cgroup/mave/steam/tasks

觀察cpu占用率,瞬間降到4%兼砖。

eoic2.png

自動設(shè)置

可以看到奸远,使用cgroups十分簡單,效果很好讽挟。然而懒叛,進程id并不是每次都保持不變。我們需要一些自動化的機制耽梅。上文提到過libcgroup芍瑞,這個庫提供了掛載、配置和運行的程序和庫褐墅。

附:cgroups中的子系統(tǒng)

  • blkio 設(shè)置限制每個塊設(shè)備的輸入輸出控制拆檬。例如:磁盤,光盤以及usb等等妥凳。
  • cpu 使用調(diào)度程序為cgroup任務(wù)提供cpu的訪問竟贯。
  • cpuacct 產(chǎn)生cgroup任務(wù)的cpu資源報告。
  • cpuset 如果是多核心的cpu逝钥,這個子系統(tǒng)會為cgroup任務(wù)分配單獨的cpu和內(nèi)存屑那。
  • devices 允許或拒絕cgroup任務(wù)對設(shè)備的訪問。
  • freezer 暫停和恢復(fù)cgroup任務(wù)艘款。
  • memory 設(shè)置每個cgroup的內(nèi)存限制以及產(chǎn)生內(nèi)存資源報告持际。
  • net_cls 標(biāo)記每個網(wǎng)絡(luò)包以供cgroup方便使用。
  • ns 名稱空間子系統(tǒng)哗咆。
  • perf_event 增加了對每group的監(jiān)測跟蹤的能力蜘欲,即可以監(jiān)測屬于某個特定的group的所有線程以及運行在特定CPU上的線程,此功能對于監(jiān)測整個group非常有用晌柬。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末姥份,一起剝皮案震驚了整個濱河市郭脂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌澈歉,老刑警劉巖展鸡,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異埃难,居然都是意外死亡莹弊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門涡尘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來箱硕,“玉大人,你說我怎么就攤上這事悟衩【缯郑” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵座泳,是天一觀的道長惠昔。 經(jīng)常有香客問我,道長挑势,這世上最難降的妖魔是什么镇防? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮潮饱,結(jié)果婚禮上来氧,老公的妹妹穿的比我還像新娘。我一直安慰自己香拉,他們只是感情好啦扬,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凫碌,像睡著了一般扑毡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盛险,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天瞄摊,我揣著相機與錄音,去河邊找鬼苦掘。 笑死换帜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鹤啡。 我是一名探鬼主播惯驼,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼揉忘!你這毒婦竟也來了跳座?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤泣矛,失蹤者是張志新(化名)和其女友劉穎疲眷,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體您朽,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡狂丝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了哗总。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片几颜。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖讯屈,靈堂內(nèi)的尸體忽然破棺而出蛋哭,到底是詐尸還是另有隱情,我是刑警寧澤涮母,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布谆趾,位于F島的核電站,受9級特大地震影響叛本,放射性物質(zhì)發(fā)生泄漏沪蓬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一来候、第九天 我趴在偏房一處隱蔽的房頂上張望跷叉。 院中可真熱鬧,春花似錦营搅、人聲如沸云挟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽植锉。三九已至,卻和暖如春峭拘,著一層夾襖步出監(jiān)牢的瞬間俊庇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工鸡挠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辉饱,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓拣展,卻偏偏與公主長得像彭沼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子备埃,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

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

  • 轉(zhuǎn)載自 http://blog.opskumu.com/docker.html 一姓惑、Docker 簡介 Docke...
    極客圈閱讀 10,501評論 0 120
  • 一褐奴、Docker 簡介 Docker 兩個主要部件:Docker: 開源的容器虛擬化平臺Docker Hub: 用...
    R_X閱讀 4,388評論 0 27
  • muahao閱讀 2,070評論 0 3
  • 圓夢巨人一個關(guān)于夢的故事,影片改編自羅爾德·達爾在1982所著的中篇童話《好心眼巨人》,是達爾最受歡迎的作品之一于毙。...
    圓謹(jǐn)閱讀 1,208評論 0 1
  • A 整理好背包丟完最后一片垃圾敦冬,我刷卡也要回去,公交卡順道也一起出來唯沮,所以開個門也沒有那么干凈利索脖旱,略顯尷尬有些。...
    夏威一一閱讀 256評論 0 0