中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Libvirt、Docker的基礎技術-CGroups介紹

發布時間:2020-06-19 22:58:06 來源:網絡 閱讀:482 作者:eflypro小普 欄目:開發技術

CGroups簡介

CGroup 是 Control Groups 的縮寫,是Linux 內核提供的一種可以限制、記錄、隔離進程組 (process groups) 所使用的物理資源 (如 cpu memory i/o等等)的機制,這種機制可以根據需求把一系列系統任務及其子任務整合(或分隔)到按資源劃分等級的不同組內,從而為系統資源管理提供一個統一的框架。Libvirt將創建的虛擬機放到Cgroups 劃分的資源區中,從而實現所有虛擬機、部分虛擬機、單個虛擬機的資源控制,例如控制虛擬機的磁盤IO帶寬。容器也是利用CGroups 來限制cpu、io、內存、 網絡等資源的。

CGroups的四大功能

資源限制:cgroups 可以對任務是要的資源總額進行限制。比如設定任務運行時使用的內存上限,一旦超出就發 OOM。

優先級分配:通過分配的 CPU 時間片數量和磁盤 IO 帶寬,實際上就等同于控制了任務運行的優先級。

資源統計:cgoups 可以統計系統的資源使用量,比如 CPU 使用時長、內存用量等。這個功能非常適合當前云端產品按使用量計費的方式。

任務控制:cgroups 可以對任務執行掛起、恢復等操作。

CGroups的4個重要概念

任務(task)。在 Cgroups 中,任務就是系統的一個進程或線程,在 linux 系統中,內核本身的調度和管理并不對進程和線程進行區分,只是根據 clone 時傳入的參數的不同來從概念上區分進程和線程;

控制組(Cgroup)。Cgroups 中的資源控制都是以Cgroup為單位實現。一個進程可以加入到某個Cgroup,也從一個進程組遷移到另一個Cgroup。一個Cgroup的進程可以使用 CGroups 以Cgroup為單位分配的資源,同時受到 CGroups 以 Cgroup 為單位設定的限制;

層級(hierarchy)。層級有一系列 cgroup 以一個樹狀結構排列而成,每個層級通過綁定對應的子系統進行資源控制。層級中的 cgroup 節點可以包含零個或多個子節點,子節點繼承父節點掛載的子系統。一個操作系統中可以有多個層級

子系統(subsystem)。一個子系統就是一個資源控制器,比如 cpu 子系統就是控制 cpu 時間分配的一個控制器,內存子系統可以限制內存的使用量。子系統必須附加(attach)到一個層級上才能起作用,一個子系統附加到某個層級以后,這個層級上的所有控制族群都受到這個子系統的控制。

CGroups和CGroup的區別

1.CGroups:cgroups是Linux內核中的一個機制,我們用它來作容器資源的限制等功能。

2.CGroup:cgroup中文叫做控制組。它是cgroups實現資源控制的一個基本單位。cgroup表示按某種資源控制標準劃分而成的一個任務組。它其中包含有一個或多個任務。

4個重要概念之間的相互關系

1.每次在系統中創建新層級時,該系統中的所有任務都是那個層級的默認 cgroup(我們稱之為 root cgroup,此 cgroup 在創建層級時自動創建,后面在該層級中創建的 cgroup 都是此 cgroup 的后代)的初始成員

2.一個子系統最多只能附加到一個層級;

3.一個層級可以附加多個子系統;

4.一個任務可以是多個 cgroup 的成員,但是這些 cgroup 必須在不同的層級;

5.系統中的進程(任務)創建子進程(任務)時,該子任務自動成為其父進程所在 cgroup 的成員。然后可根據需要將該子任務移動到不同的 cgroup 中,但開始時它總是繼承其父任務的 cgroup。

CGroups 層級圖示例
Libvirt、Docker的基礎技術-CGroups介紹

如圖所示的 CGroup 層級關系顯示,CPU 和 Memory 兩個子系統有自己獨立的層級系統,而又通過 Task Group 取得關聯關系。

Cgroups子系統介紹

1.cpuset這個子系統為 cgroup 中的任務分配獨立 CPU(在多核系統)和內存節點。

2.cpu 這個子系統使用調度程序提供對 CPU 的 cgroup 任務訪問。

3.cpuacct這個子系統自動生成 cgroup 中任務所使用的 CPU 報告。

4.blkio 這個子系統為塊設備設定I/O訪問控制,比如物理設備(磁盤,固態硬盤,USB 等等)。

5.memory這個子系統設定 cgroup 中任務使用的內存限制,并自動生成由那些任務使用的內存資源報告。

6.devices 這個子系統可允許或者拒絕 cgroup 中的任務訪問設備。

7.freezer 這個子系統掛起或者恢復 cgroup 中的任務。

8.net_cls 這個子系統使用等級識別符(classid)標記網絡數據包,這讓linux流量控制器(tc)可以識別來自特定cgroup任務的數據包,并進行網絡限制。

9.perf_event:這個子系統可以使cgroup中的任務進行統一的性能測試。

可以在/proc/cgroups查看當前內核支持的子系統
Libvirt、Docker的基礎技術-CGroups介紹

CGroups典型應用架構

Libvirt、Docker的基礎技術-CGroups介紹

如圖所示,CGroups 技術可以被用來在操作系統底層限制物理資源,起到 Container 的作用。圖中每一個 JVM 進程對應一個 Container Cgroup 層級,通過 CGroup 提供的各類子系統,可以對每一個 JVM 進程對應的線程級別進行物理限制,這些限制包括 CPU、內存等等許多種類的資源。
CGroups的相關文件

CGroups 以文件的方式提供應用接口,我們可以通過 mount 命令來查看 cgroups 的掛載點:
Libvirt、Docker的基礎技術-CGroups介紹

查看下cgroups的子系統:
Libvirt、Docker的基礎技術-CGroups介紹

查看下cpu子系統下的控制組:
Libvirt、Docker的基礎技術-CGroups介紹

如圖目錄machine、system.slice、user.slice是現在已有的控制組。

這期就先到著,下期我們繼續學習CGroups在Libvirt上的應用。
Libvirt、Docker的基礎技術-CGroups介紹

睿江云官網鏈接:https://www.eflycloud.com/home?from=RJ0035

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

庆安县| 丁青县| 逊克县| 稷山县| 宜春市| 邵阳县| 张家界市| 汉寿县| 丽水市| 洞头县| 邯郸县| 科尔| 澄江县| 泰来县| 丁青县| 湖口县| 靖远县| 乐陵市| 阿荣旗| 太和县| 金阳县| 太白县| 丰台区| 大安市| 扶绥县| 永胜县| 象州县| 油尖旺区| 通化市| 武夷山市| 襄城县| 龙州县| 肥东县| 靖宇县| 同仁县| 新和县| 富顺县| 霞浦县| 台南市| 郁南县| 静安区|