成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Docker核心原理之 Cgroup詳解

瀏覽:230日期:2024-10-25 09:47:20

內核中強大的工具cgroup,不僅可以限制被NameSpace隔離起來的資源,還可以為資源設置權重,計算用量等

什么是cgroup

cgroup全稱是control groups

control groups:控制組,被整合在了linux內核當中,把進程(tasks)放到組里面,對組設置權限,對進程進行控制。可以理解為用戶和組的概念,用戶會繼承它所在組的權限。

cgroups是linux內核中的機制,這種機制可以根據特定的行為把一系列的任務,子任務整合或者分離,按照資源劃分的等級的不同,從而實現資源統一控制的框架,cgroup可以控制、限制、隔離進程所需要的物理資源,包括cpu、內存、IO,為容器虛擬化提供了最基本的保證,是構建docker一系列虛擬化的管理工具

對于開發cgroup的特點

API:實現管理

cgroup管理可以管理到線程界別

所有線程功能都是subsystem(子系統)統一的管理方式

子進程和父進程在一個cgroup里面,只需要控制父進程就可以

cgroup的作用

cgroup的內核通過hook鉤子來實現管理進程資源,提供了一個統一的接口,從單個進程的資源控制到操作系統層面的虛擬卡的過渡

cgroup提供了四個功能:

資源控制:cgroup通過進程組對資源總額進行限制。如:程序使用內存時,要為程序設定可以使用主機的多少內存,也叫作限額 優先級分配:使用硬件的權重值。當兩個程序都需要進程讀取cpu,哪個先哪個后,通過優先級來進行控制 資源統計:可以統計硬件資源的用量,如:cpu、內存…使用了多長時間 進程控制:可以對進程組實現掛起/恢復的操作,

術語表

task:表示系統中的某一個進程—PID cgroup:資源控制,以控制組(cgroup)為單位實現,cgroup中有都是task,可以有多個cgroup組,可以限制不同的內容,組名不能相同。 subsystem:子系統。資源調度控制器。具體控制內容。如:cpu的子系統控制cpu的時間分配,內存的子系統可以控制某個cgroup內的內存使用量,硬盤的子系統,可以控制硬盤的讀寫等等。 hierarchy:層級樹,一堆cgroup構成,包含多個cgroup的叫層級樹,,每個hierarchy通過綁定的子系統對資源進行調度,可以包含0個或多個子節點,子節點繼承父節點的屬性,整個系統可以有多個hierarchy,是一個邏輯概念

關系:一個cgroup里可以有多個task,subsystem相當于控制cgroup限制的類型, hierarchy里可以有多個cgroup,一個系統可以有多個hierarchy。

層級樹的四大規則

傳統的進程啟動,是以init為根節點,也叫父進程,由它來創建子進程,作為子節點,而每個子節點還可以創建新的子節點,這樣構成了樹狀結構。而cgroup的結構跟他類似的。子節點繼承父節點的屬性。他們最大的不同在于,系統的cgroup構成的層級樹允許有多個存在,如果進程模型是init為根節點形成一個樹,那cgroup的模型由多個層級樹來構成。

如果只有一個層級樹,所有的task都會受到一個subsystem的相同的限制,會給不需要這種限制的task造成麻煩

1.同一個層級樹(hierarchy)可以附加一個或多個子系統(subsystem)

Docker核心原理之 Cgroup詳解

可以看到在一個層級樹中,有一個cpu_mem_cg的cgroup組下還有兩個子節點cg1和cg2,如圖所示,也就意味著在cpu_mem_cg的組中,附加了cpu和mem內存兩個子系統,同時來控制cg1和cg2的cpu和內存的硬件資源使用

2.一個子系統(subsystem)可以附加到多個層級樹(hierarchy)中,但是僅僅是可以附加到多個沒有任何子系統的層級樹中。

Docker核心原理之 Cgroup詳解

如圖所示,cpu子系統先附加到層級樹A上,同時就不能附加到層級樹B上,因為B上已經有了一個mem子系統,如果B和A同時都是沒有任何子系統時,這時,cpu子系統可以同時附加到A和B兩個層級樹中

言外之意就是,如果多個層級樹中都沒有子系統,這個時候一個cpu子系統依次可以附加到這些層級樹中

3.一個進程(task)不能屬于同一個層級樹(hierarchy)的不同cgroup

Docker核心原理之 Cgroup詳解

系統每次新建一個層級樹(hierarchy)時,默認的構成了新的層級樹的初始化的cgroup,這個cgroup被稱為root cgroup,對于你自己成功的層級樹(hierarchy)來說,task只能存在這個層級樹的一個cgroup當中,意思就是一個層級樹中不能出現兩個相同的task,但是它可以存在不同的層級樹中的其他cgroup。

如果要將一個層級樹cgroup中的task添加到這個層級樹的其他cgroup時,會被從之前task所在的cgroup移除

如以上圖中示例:

httpd已經加入到層級樹(hierarchy)A中的cg1中,且pid為58950,此時就不能將這個httpd進程放入到cg2中,不然cg1中的httpd進程就會被刪除,但是可以放到層級樹(hierarchy)B的cg3控制組中

其實是為了防止出現進程矛盾,如:在層級樹A中的cg1中存在httpd進程,這時cpu對cg1的限制使用率為30%,cg2的限制使用率為50%,如果再將httpd進程添加到cg2中,這時httpd的cpu使用率限制就有了矛盾。

4.剛fork出的子進程在初始狀態與父進程處于同一個cgroup

Docker核心原理之 Cgroup詳解

進程task新開的一個子進程(child_task)默認是和原來的task在同一個cgroup中,但是child_task允許被移除到該層級樹的其他不同的cgroup中。

當fork剛完成之后,父進程和子進程是完全獨立的

如圖中所示中,httpd58950進程,當有人訪問時,會fork出另外一個子進程httpd58951,這個時候默認httpd58951和httpd58950都在cg1中,他們的關系也是父子進程,httpd58951是可以移動到cg2中,這時候就改變了他們的關系,都變為了獨立的進程。

Subsystem子系統

subsystem究竟可以控制什么東西

通過以下的操作來驗證

[root@localhost ~]# yum -y install libcgroup-tools安裝這個工具后就看可以通過使用cgroup命令來查看

列出系統中所有的cgroup控制組

[root@localhost ~]# lscgroupnet_cls,net_prio:/freezer:/hugetlb:/cpu,cpuacct:/cpu,cpuacct:/machine.slicecpu,cpuacct:/user.slicecpu,cpuacct:/system.slicecpu,cpuacct:/system.slice/network.servicecpu,cpuacct:/system.slice/docker.service...

查看subsystem可以控制的硬件

[root@localhost ~]# lssubsys -acpusetcpu,cpuacctmemorydevicesfreezernet_cls,net_prioblkioperf_eventhugetlbpids

以上查看到的,有存在的對應目錄,/sys/fs/cgroup

[root@localhost ~]# ll /sys/fs/cgroup/total 0drwxr-xr-x. 5 root root 0 Mar 25 04:50 blkiolrwxrwxrwx. 1 root root 11 Mar 25 04:50 cpu -> cpu,cpuacctlrwxrwxrwx. 1 root root 11 Mar 25 04:50 cpuacct -> cpu,cpuacctdrwxr-xr-x. 5 root root 0 Mar 25 04:50 cpu,cpuacctdrwxr-xr-x. 2 root root 0 Mar 25 04:50 cpusetdrwxr-xr-x. 5 root root 0 Mar 25 04:50 devicesdrwxr-xr-x. 2 root root 0 Mar 25 04:50 freezerdrwxr-xr-x. 2 root root 0 Mar 25 04:50 hugetlbdrwxr-xr-x. 5 root root 0 Mar 25 04:50 memorylrwxrwxrwx. 1 root root 16 Mar 25 04:50 net_cls -> net_cls,net_priodrwxr-xr-x. 2 root root 0 Mar 25 04:50 net_cls,net_priolrwxrwxrwx. 1 root root 16 Mar 25 04:50 net_prio -> net_cls,net_priodrwxr-xr-x. 2 root root 0 Mar 25 04:50 perf_eventdrwxr-xr-x. 5 root root 0 Mar 25 04:50 pidsdrwxr-xr-x. 5 root root 0 Mar 25 04:50 systemd

可以看到目錄中的內容是比命令查看到的多,是因為有幾個軟鏈接文件

# 以下三個都屬于cpu,cpuacctcpu -> cpu,cpuacctcpuacct -> cpu,cpuacctcpu,cpuacct# 以下三個都屬于net_cls,net_prionet_cls -> net_cls,net_prionet_prio -> net_cls,net_prionet_cls,net_prio

Subsystem可以控制的內容分別代表什么

編號 限制內容 代表意思 1 blkio(對塊設備提供輸入輸出的限制) 光盤、固態磁盤、USB…。 2 cpu 可以調控task對cpu的使用。 3 cpuacct 自動生成task對cpu資源使用情況的報告。 4 cpuset(針對多處理器的物理機使用) 對task單獨分配某個cpu使用的。 5 device(設備是指鍵盤、鼠標…) 關閉和開啟task對設備的訪問。 6 freezer 控制task的掛起和恢復,如不允許某個task使用cpu被稱之為掛起。 7 memory 控制task對內存使用量的限定,自動生成對內存資源使用的報告 8 perf_event 對task可以進行統一的性能測試,如探測linxu的cpu性能以及硬盤的讀寫效率等等。 9 net_cls 在docker中沒有直接被使用,它通過使用等級識別符(classid)標記網絡數據包,從而允許 Linux 流量控制程序識別從具體cgroup中生成的數據包。

注意:到現在為止,還沒有可以對容器硬盤大小進行限制的工具,只能限制硬盤的讀寫頻率

cgroup的工作原理

查看cgroup中的CPU控制中的tasks文件,存放了對文件中的進程的cpu的控制,如果要添加某個進程對cpu的控制,將進程的pid加入tasks文件即可,包括其他的硬件資源控制也是如此

[root@localhost ~]# cat /sys/fs/cgroup/cpu/tasks 12456789...68469685086852668567

在生產環境中,由于在內核中,所以它是自動增加的

cgroup真正的工作原理就是hook鉤子,cgroup的實現本質上是給系統進程掛上鉤子實現的,當task進程運行的過程中,設計到某個資源是,就會觸發鉤子上附帶的subsystem子系統進行資源檢測,最終根據資源類別的不同使用對應的技術進行資源限制和優先級分配。

鉤子是怎么實現的

簡單來說,linux中管理task進程的數據結構,在cgroup的每個task設置一個關鍵詞,將關鍵詞都指向鉤子,叫做指針。

一個task只對應一個指針結構時,一個指針結構可以被多個task進行使用

當一個指針一旦讀取到唯一指針數據的內容,task就會被觸發,就可以進行資源控制

在實際的使用過程中,用戶需要使用mount來掛載cgroup控制組

在目錄中可以看到,比如httpd程序,pid號為69060

[root@localhost ~]# yum -y install httpd^C[root@localhost ~]# systemctl start httpd^C[root@localhost ~]# netstat -anput | grep 80tcp6 0 0 :::80 :::* LISTEN 69060/httpd

查看它pid號目錄中的mounts文件,存放了大量的關于cgroup的掛載

可以看到每一個cgoup后面的目錄,如/sys/fs/cgroup/cpu,cpuacct,說明httpd進程受到了cpu使用的限制,該文件中還有很多類似的掛載項,可以看到的有blkio/perf_event/memory等的硬件資源控制。

[root@localhost ~]# cat /proc/69060/mountsrootfs / rootfs rw 0 0/dev/mapper/centos-root / xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=914476k,nr_inodes=228619,mode=755 0 0tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev 0 0devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0mqueue /dev/mqueue mqueue rw,seclabel,relatime 0 0hugetlbfs /dev/hugepages hugetlbfs rw,seclabel,relatime 0 0...cgroup /sys/fs/cgroup/systemd cgroup rw,seclabel,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd 0 0cgroup /sys/fs/cgroup/net_cls,net_prio cgroup rw,seclabel,nosuid,nodev,noexec,relatime,net_prio,net_cls 0 0cgroup /sys/fs/cgroup/freezer cgroup rw,seclabel,nosuid,nodev,noexec,relatime,freezer 0 0cgroup /sys/fs/cgroup/hugetlb cgroup rw,seclabel,nosuid,nodev,noexec,relatime,hugetlb 0 0cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,seclabel,nosuid,nodev,noexec,relatime,cpuacct,cpu 0 0cgroup /sys/fs/cgroup/cpuset cgroup rw,seclabel,nosuid,nodev,noexec,relatime,cpuset 0 0cgroup /sys/fs/cgroup/devices cgroup rw,seclabel,nosuid,nodev,noexec,relatime,devices 0 0cgroup /sys/fs/cgroup/memory cgroup rw,seclabel,nosuid,nodev,noexec,relatime,memory 0 0cgroup /sys/fs/cgroup/blkio cgroup rw,seclabel,nosuid,nodev,noexec,relatime,blkio 0 0cgroup /sys/fs/cgroup/pids cgroup rw,seclabel,nosuid,nodev,noexec,relatime,pids 0 0cgroup /sys/fs/cgroup/perf_event cgroup rw,seclabel,nosuid,nodev,noexec,relatime,perf_event 0 0...

這就是通過mount控制cgroup的,所有的程序都是這樣的,子系統上所有的系統都把文件mount上以后,就可以像操作系統一樣操作cgroup和層級樹進行管理,包括權限管理、子文件系統,除了cgroup文件系統以外,內核中沒有為cgroup的訪問提供添加其他任何的操作,想要去操作cgroup,就必須使用mount掛到某一個cgroup控制組內才行。

資源控制操作

我們需要知道每一個硬件資源的具體怎么去控制的操作

如:

cgroup組中的cpu目錄里具體的每一項的具體的含義,都是對cpu具體的控制的細節

[root@localhost ~]# cd /sys/fs/cgroup/cpu[root@localhost cpu]# lscgroup.clone_children cpuacct.stat cpu.cfs_quota_us cpu.stat system.slicecgroup.event_control cpuacct.usage cpu.rt_period_us machine.slice taskscgroup.procs cpuacct.usage_percpu cpu.rt_runtime_us notify_on_release user.slicecgroup.sane_behavior cpu.cfs_period_us cpu.shares release_agent

這些具體的使用方法會在下一篇文章中來逐個去解釋用法

Docker命令行限制內容

-c/--cpu-shares:限制cpu優先級-m/--memory:限制內存的使用容量--memory-swap:限制內存+swap的大小--blkil-weightbps/iops--device-read-bps--device-write-bps--device-read-iops--device-write-iops

具體使用方法:cpu、內存、blkio

cgroup目錄結構如下

Docker核心原理之 Cgroup詳解

/sys/fs/cgroup中存放了所有進程的硬件資源控制

/sys/fs/cgroup/{cpu,memory,blkio...}/目錄下存放了特定硬件資源的默認的非docker進程的控制,docker的進程號不會在這些目錄下

/sys/fs/cgroup/cpu/docker/目錄下存放了docker在主機內的進程控制

/sys/fs/cgroup/cpu/docker/容器id/目錄下存放了對docker產生的容器的控制

到此這篇關于Docker核心原理之 Cgroup詳解的文章就介紹到這了,更多相關Docker核心原理內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Docker
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲欧洲中文日韩久久av乱码| 亚洲最新视频在线观看| 亚洲欧洲国产日韩| 成人美女视频在线观看18| 欧美在线制服丝袜| 亚洲一区二区av在线| 欧美性久久久| 久久久久久**毛片大全| 成人三级在线视频| 日韩一级免费观看| 国产精品99精品久久免费| 欧美日韩视频在线第一区 | 亚洲精品中文字幕在线| 国产精品国产精品国产专区不片 | 性做久久久久久免费观看欧美| aa国产精品| 亚洲男人的天堂一区二区| 精品动漫3d一区二区三区免费版| 日本一二三不卡| 欧美在线日韩精品| 国产女人18水真多18精品一级做| 91视频在线观看| 精品国产1区2区3区| 国产精品77777| 日韩一级在线观看| youjizz国产精品| 国产亚洲欧美一区在线观看| 欧美一区亚洲| 国产精品久久久久久久久果冻传媒| 国语自产精品视频在线看抢先版结局 | 日本一二三四高清不卡| 欧美日韩hd| 自拍偷拍欧美精品| 国产精品日韩欧美一区| 午夜精品视频一区| 欧美亚洲综合一区| 国产黄色成人av| 久久亚洲精品小早川怜子| 91偷拍与自偷拍精品| 国产精品热久久久久夜色精品三区| 精品av久久久久电影| 亚洲自拍偷拍av| 欧洲精品中文字幕| 国产一区二区免费看| 精品国产乱码久久久久久闺蜜 | 欧美私人免费视频| 国产一区二区三区免费看| 欧美一区二区在线播放| 成人午夜视频免费看| 久久久不卡网国产精品一区| 狠狠色狠狠色综合日日tαg| 亚洲一区视频在线| 91官网在线观看| 粉嫩久久99精品久久久久久夜| 国内久久婷婷综合| 久久嫩草精品久久久精品一| 午夜性色一区二区三区免费视频| 亚洲欧美日韩精品久久久久| 亚洲综合日韩| 久久爱www久久做| 精品美女一区二区三区| 韩国av一区| 亚洲chinese男男1069| 欧美精品丝袜中出| 91视频xxxx| 亚洲专区一二三| 欧美日韩国产另类一区| 欧美一区二区三区久久精品| 亚洲尤物视频在线| 欧美日韩免费一区二区三区 | 亚洲高清免费观看高清完整版在线观看| 欧洲色大大久久| 97超碰欧美中文字幕| 亚洲狼人国产精品| 欧美亚洲一区二区在线| 99久久99久久精品免费观看| 亚洲日本在线天堂| 欧美在线色视频| 91麻豆自制传媒国产之光| 夜夜揉揉日日人人青青一国产精品| 欧美偷拍一区二区| 午夜亚洲福利| 免费观看在线综合| 国产日本欧洲亚洲| 免费毛片一区二区三区久久久| 国产乱妇无码大片在线观看| 国产精品免费免费| 欧美午夜宅男影院| 欧美色一级片| 蜜臀av一区二区| 国产色婷婷亚洲99精品小说| 久久婷婷一区| 91丨九色丨蝌蚪丨老版| 日韩精品1区2区3区| 亚洲精品一区二区三区福利| 国产精品综合| 成人av片在线观看| 亚洲国产日韩精品| 欧美精品一区二区三区在线播放 | 久久精品免费在线观看| 狂野欧美一区| 欧美日韩综合另类| 国内精品不卡在线| 亚洲乱码国产乱码精品精的特点 | 国产精品丝袜一区| 欧美日韩高清不卡| 伊人成年综合电影网| 国产一区二区三区日韩| 亚洲精品高清在线| 日韩免费视频线观看| 乱码第一页成人| 色综合视频一区二区三区高清| 麻豆精品国产传媒mv男同| 中文字幕一区二区三区在线不卡| 7777精品伊人久久久大香线蕉完整版| 亚洲毛片播放| 99久久精品免费看国产免费软件| 日韩国产欧美三级| 国产精品青草久久| 日韩欧美国产综合| 色999日韩国产欧美一区二区| 欧美成人精品| 国产一区二区三区久久悠悠色av| 一区二区三区在线影院| 久久久久久久久久久久久久久99| 欧美日韩一区三区四区| 国产日本精品| 欧美啪啪一区| 粉嫩aⅴ一区二区三区四区五区| 五月婷婷综合网| 亚洲欧洲在线观看av| 亚洲精品一区二区三区99| 欧美日韩国产精品自在自线| 国产精品久久久久久久久久直播| 女女同性精品视频| 国产精品一区在线观看你懂的| 亚洲高清免费一级二级三级| 综合av第一页| 国产片一区二区三区| 日韩色在线观看| 欧美色图12p| 噜噜噜躁狠狠躁狠狠精品视频| 一区在线视频观看| 欧美成人亚洲| av中文一区二区三区| 国产伦精品一区二区三区免费| 日日夜夜免费精品| 亚洲综合成人在线视频| 亚洲人一二三区| 国产精品三级久久久久三级| 久久婷婷国产综合国色天香| 欧美日韩精品三区| 色噜噜狠狠成人中文综合| 国产精品手机视频| 亚洲精品欧美精品| 亚洲调教视频在线观看| 欧美成人69av| 欧美影院一区| 91在线国产福利| 不卡一区二区中文字幕| 国产不卡在线一区| 国产精品原创巨作av| 久久99精品久久久| 日韩av一二三| 日韩在线播放一区二区| 亚洲黄色尤物视频| 国产欧美日韩在线看| 精品国产3级a| 精品对白一区国产伦| 精品国产一区二区三区不卡 | 欧美亚洲综合一区| 老司机精品福利视频| 日本韩国一区二区| 色婷婷亚洲精品| 久久xxxx精品视频| 亚洲一区二区三区高清| 亚洲欧洲在线一区| 亚洲精品一区二区三| 亚洲国产婷婷香蕉久久久久久99| 在线观看欧美一区| 亚洲免费成人| 亚洲一区二区三区免费在线观看 | 久久久久成人黄色影片| 久久先锋影音av鲁色资源网| 久久综合色婷婷| 久久久久久久久久美女| 国产校园另类小说区| 久久久久久**毛片大全| 国产欧美一区二区精品仙草咪| 国产农村妇女毛片精品久久麻豆| 国产精品蜜臀在线观看| 国产精品久久久久久久蜜臀 | 国产成人综合亚洲网站| 成人免费视频一区二区| 91在线视频免费91| 欧美连裤袜在线视频| 一色屋精品视频在线观看网站| 国产亚洲亚洲| 久久亚裔精品欧美| 欧美亚洲动漫精品|