為什麼要有cgroup

2021-06-22 20:02:46 字數 1572 閱讀 1551

linux系統中經常有個需求就是希望能限制某個或者某些程序的分配資源。也就是能完成一組容器的概念,在這個容器中,有分配好的特定比例的cpu時間,io時間,可用記憶體大小等。於是就出現了cgroup的概念,cgroup就是controller group,最初由google的工程師提出,後來被整合進linux核心中。

cgroup是將任意程序進行分組化管理的linux核心功能。cgroup本身提供將程序進行分組化管理的功能和介面的基礎結構。

而後的android作業系統也就憑藉著這個技術,為每個應用程式分配不同的cgroup,將每個程式進行隔離,達到了乙個應用程式不會影響其他應用程式環境的目的。

乙個程序

控制族群,按照某種標準劃分的程序組

層級,control group可以形成樹形的結構,有父節點,子節點,每個節點都是乙個control group,子節點繼承父節點的特定屬性。

子系統。

子系統就是資源控制器,每種子系統就是乙個資源的分配器,比如cpu子系統是控制cpu時間分配的。

可以使用lssubsys -al來列出系統支援多少種子系統,和使用ls /sys/fs/cgroup/ (ubuntu)來顯示已經掛載的子系統:

可以看到這裡的幾個子系統,比如cpu是控制cpu時間片的,memory是控制記憶體使用的。

apt-get install cgroup-bin

首先明白下,是先掛載子系統,然後才有control group的。意思就是比如想限制某些程序的資源,那麼,我會先掛載memory子系統,然後在memory子系統中建立乙個cgroup節點,在這個節點中,將需要控制的程序id寫入,並且將控制的屬性寫入。

拿memory子系統為例:

通過檢視cgroup的配置檔案:

看到memory子系統是掛載在目錄/sys/fs/cgroup/memory下

進入這個目錄

建立乙個資料夾,就建立了乙個control group了

mkdir test

發現test目錄下自動建立了許多檔案:

這些檔案的含義如下:

於是,限制記憶體使用我們就可以設定memory.limit_in_bytes

將乙個程序加入到這個test中

echo $$ > tasks

這樣就將當前這個終端程序加入到了記憶體限制的cgroup中了。

將這個cgroup刪除只要刪除目錄就行了

rmdir test

為什麼要有多型?

include include using namespace std 岳不群 class yuebuqun virtual void fight virtual表7示修飾的乙個成員方法時乙個虛函式,和虛繼承含義不同 string kongfu 林平之類 class linpingzhi publi...

為什麼要有 hashCode

當你把物件加入 hashset 時,hashset 會先計算物件的 hashcode 值來判斷物件加入的位 置,同時也會與其他已經加入的物件的 hashcode 值作比較,如果沒有相符的hashcode,hashset會假設物件沒有重複出現。但是如果發現有相同 hashcode 值的物件,這時會呼叫...

2 1 1 為什麼要有uboot

2.1.1.1 計算機系統 1 計算機系統是用cpu作為核心來執行的系統,典型的有pc機 台式電腦 筆記本 嵌入式系統 手機 平板 遊戲機 微控制器 電飯鍋 空調 2 計算機系統的組成部件很多,而且不同計算機系統的組成部件也不同,各有特色,但是所有計算機系統執行時都需要3個核心部件 cpu 外部儲存...