Linux cgroup 源碼解讀(一)

Linux cgroup 幾個重要的數據結構:

一個/多個cgroup_control子系統,組成一個樹形結構。

1. cgroup_root:cgroup(樹)的根,初始所有系統都掛載在全局默認cgrp_dfl_root上。一個cgroup_root可以掛載多個子系統。一個只系統,只能掛載在一個cgroup_root上。

2. cgroup:樹子節點。每在一個cgroup_root下創建一個目錄,就會創建一個cgroup。

3. cgroup_subsys_state:指定cgroup的子系統狀態。因爲無法確定一棵樹所掛載的子系統,所以cgroup包含一個所有子系統狀態的數組。

一個進程,一定是掛載多個子系統下,也即掛載多個不同的樹的cgroup下。所以爲了精簡task結構體的大小,單獨出一個css_set來表示。所以,css_set 包含一個系統當前所掛載的cgroup鏈表。

多個進程,可以在同一個css_set中,當把一個進程加入/移除某個cgroup,先在已有css_set查找是否已經存在這樣的css_set,爲了方便的查找是否已存在相應css_set,css_set還包括一個所有子系統狀態的列表,只有所有子系統狀態一樣,再進行進一步查找,確保對應的cgroup也一樣。

每次mount一個子/多個系統,就會創建一個cgroup_root,系統就會遍歷所有css_set,更新所有css_set的cgroup鏈表。

 

cgroup初始化流程如下圖:

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章