1、 Cgroup介紹網絡
-
Cgroup是什麼 Cgroups是control groups的縮寫,是Linux內核提供的一種能夠限制、記錄、隔離進程組(process groups)所使用的物理資源(如:cpu,memory,IO等等)的機制。最初由google的工程師提出,後來被整合進Linux內核。Cgroups也是LXC爲實現虛擬化所使用的資源管理手段,能夠說沒有cgroups就沒有LXC。框架
-
Cgroup能作什麼google
Cgroups最初的目標是爲資源管理提供的一個統一的框架,既整合現有的cpuset等子系統,也爲將來開發新的子系統提供接口。如今的cgroups適用於多種應用場景,從單個進程的資源控制,到實現操做系統層次的虛擬化(OS Level Virtualization)。Cgroups提供了一下功能:spa
- 限制進程組可使用的資源數量(Resource limiting )。好比:memory子系統能夠爲進程組設定一個memory使用上限,一旦進程組使用的內存達到限額再申請內存,就會出發OOM(out of memory)。
- 進程組的優先級控制(Prioritization )。好比:可使用cpu子系統爲某個進程組分配特定cpu share。
- 記錄進程組使用的資源數量(Accounting )。好比:可使用cpuacct子系統記錄某個進程組使用的cpu時間
- 進程組隔離(isolation)。好比:使用ns子系統可使不一樣的進程組使用不一樣的namespace,以達到隔離的目的,不一樣的進程組有各自的進程、網絡、文件系統掛載空間。
- 進程組控制(control)。好比:使用freezer子系統能夠將進程組掛起和恢復。
- Cgroup能作什麼 相關概念
- 任務(task)。在cgroups中,任務就是系統的一個進程。
- 控制族羣(control group)。控制族羣就是一組按照某種標準劃分的進程。Cgroups中的資源控制都是以控制族羣爲單位實現。一個進程能夠加入到某個控制族羣,也從一個進程組遷移到另外一個控制族羣。一個進程組的進程可使用cgroups以控制族羣爲單位分配的資源,同時受到cgroups以控制族羣爲單位設定的限制。
- 層級(hierarchy)。控制族羣能夠組織成hierarchical的形式,既一顆控制族羣樹。控制族羣樹上的子節點控制族羣是父節點控制族羣的孩子,繼承父控制族羣的特定的屬性。
- 子系統(subsytem)。一個子系統就是一個資源控制器,好比cpu子系統就是控制cpu時間分配的一個控制器。子系統必須附加(attach)到一個層級上才能起做用,一個子系統附加到某個層級之後,這個層級上的全部控制族羣都受到這個子系統的控制。
相互關係操作系統
- 每次在系統中建立新層級時,該系統中的全部任務都是那個層級的默認 cgroup(咱們稱之爲 root cgroup ,此cgroup在建立層級時自動建立,後面在該層級中建立的cgroup都是此cgroup的後代)的初始成員。
- 一個子系統最多隻能附加到一個層級。
- 一個層級能夠附加多個子系統。
- 一個任務能夠是多個cgroup的成員,可是這些cgroup必須在不一樣的層級。
- 系統中的進程(任務)建立子進程(任務)時,該子任務自動成爲其父進程所在 cgroup 的成員。而後可根據須要將該子任務移動到不一樣的 cgroup 中,但開始時它老是繼承其父任務 的cgroup。
Cgroups子系統介紹 blkio -- 這個子系統爲塊設備設定輸入/輸出限制,好比物理設備(磁盤,固態硬盤,USB 等等)。 cpu -- 這個子系統使用調度程序提供對 CPU 的 cgroup 任務訪問。 cpuacct -- 這個子系統自動生成 cgroup 中任務所使用的 CPU 報告。 cpuset -- 這個子系統爲 cgroup 中的任務分配獨立 CPU(在多核系統)和內存節點。 devices -- 這個子系統可容許或者拒絕 cgroup 中的任務訪問設備。 freezer -- 這個子系統掛起或者恢復 cgroup 中的任務。 memory -- 這個子系統設定 cgroup 中任務使用的內存限制,並自動生成由那些任務使用的內存資源報告。 net_cls -- 這個子系統使用等級識別符(classid)標記網絡數據包,可容許 Linux 流量控制程序(tc)識別從具體 cgroup 中生成的數據包。 ns -- 名稱空間子系統。繼承