日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
詳解LinuxCgroup

Linux系統(tǒng)中經(jīng)常有個(gè)需求就是希望能限制某個(gè)或者某些進(jìn)程的分配資源。也就是能完成一組容器的概念,在這個(gè)容器中,有分配好的特定比例的cpu時(shí)間,IO時(shí)間,可用內(nèi)存大小等。于是就出現(xiàn)了cgroup的概念,cgroup就是controller group,最初由google的工程師提出,后來(lái)被整合進(jìn)Linux內(nèi)核中。

Cgroup是將任意進(jìn)程進(jìn)行分組化管理的Linux內(nèi)核功能。cgroup本身提供將進(jìn)程進(jìn)行分組化管理的功能和接口的基礎(chǔ)結(jié)構(gòu)。

而后的Android操作系統(tǒng)也就憑借著這個(gè)技術(shù),為每個(gè)應(yīng)用程序分配不同的cgroup,將每個(gè)程序進(jìn)行隔離,達(dá)到了一個(gè)應(yīng)用程序不會(huì)影響其他應(yīng)用程序環(huán)境的目的。

cgroups子系統(tǒng)

  1. cpu 子系統(tǒng),主要限制進(jìn)程的 cpu 使用率。
  2. cpuacct 子系統(tǒng),可以統(tǒng)計(jì) cgroups 中的進(jìn)程的 cpu 使用報(bào)告。
  3. cpuset 子系統(tǒng),可以為 cgroups 中的進(jìn)程分配單獨(dú)的 cpu 節(jié)點(diǎn)或者內(nèi)存節(jié)點(diǎn)。
  4. memory 子系統(tǒng),可以限制進(jìn)程的 memory 使用量。
  5. blkio 子系統(tǒng),可以限制進(jìn)程的塊設(shè)備 io。
  6. devices 子系統(tǒng),可以控制進(jìn)程能夠訪問(wèn)某些設(shè)備。
  7. net_cls 子系統(tǒng),可以標(biāo)記 cgroups 中進(jìn)程的網(wǎng)絡(luò)數(shù)據(jù)包,然后可以使用 tc 模塊(traffic control)對(duì)數(shù)據(jù)包進(jìn)行控制。
  8. net_prio — 這個(gè)子系統(tǒng)用來(lái)設(shè)計(jì)網(wǎng)絡(luò)流量的優(yōu)先級(jí)
  9. freezer 子系統(tǒng),可以掛起或者恢復(fù) cgroups 中的進(jìn)程。
  10. ns 子系統(tǒng),可以使不同 cgroups 下面的進(jìn)程使用不同的 namespace
  11. hugetlb — 這個(gè)子系統(tǒng)主要針對(duì)于HugeTLB系統(tǒng)進(jìn)行限制,這是一個(gè)大頁(yè)文件系統(tǒng)。

cgroups 層級(jí)結(jié)構(gòu)(Hierarchy)

內(nèi)核使用 cgroup 結(jié)構(gòu)體來(lái)表示一個(gè) control group 對(duì)某一個(gè)或者某幾個(gè) cgroups 子系統(tǒng)的資源限制。cgroup 結(jié)構(gòu)體可以組織成一顆樹(shù)的形式,每一棵cgroup 結(jié)構(gòu)體組成的樹(shù)稱之為一個(gè) cgroups 層級(jí)結(jié)構(gòu)。

cgroups層級(jí)結(jié)構(gòu)可以 attach 一個(gè)或者幾個(gè) cgroups 子系統(tǒng),當(dāng)前層級(jí)結(jié)構(gòu)可以對(duì)其 attach 的 cgroups 子系統(tǒng)進(jìn)行資源的限制。每一個(gè) cgroups 子系統(tǒng)只能被 attach 到一個(gè) cpu 層級(jí)結(jié)構(gòu)中。

好好理解下這個(gè)圖即可:

創(chuàng)建了 cgroups 層級(jí)結(jié)構(gòu)中的節(jié)點(diǎn)(cgroup 結(jié)構(gòu)體)之后,可以把進(jìn)程加入到某一個(gè)節(jié)點(diǎn)的控制任務(wù)列表中,一個(gè)節(jié)點(diǎn)的控制列表中的所有進(jìn)程都會(huì)受到當(dāng)前節(jié)點(diǎn)的資源限制。同時(shí)某一個(gè)進(jìn)程也可以被加入到不同的 cgroups 層級(jí)結(jié)構(gòu)的節(jié)點(diǎn)中,因?yàn)椴煌?cgroups 層級(jí)結(jié)構(gòu)可以負(fù)責(zé)不同的系統(tǒng)資源。所以說(shuō)進(jìn)程和 cgroup 結(jié)構(gòu)體是一個(gè)多對(duì)多的關(guān)系。

上面這個(gè)圖從整體結(jié)構(gòu)上描述了進(jìn)程與 cgroups 之間的關(guān)系。最下面的P代表一個(gè)進(jìn)程。每一個(gè)進(jìn)程的描述符中有一個(gè)指針指向了一個(gè)輔助數(shù)據(jù)結(jié)構(gòu)css_set(cgroups subsystem set)。 指向某一個(gè)css_set的進(jìn)程會(huì)被加入到當(dāng)前css_set的進(jìn)程鏈表中。一個(gè)進(jìn)程只能隸屬于一個(gè)css_set,一個(gè)css_set可以包含多個(gè)進(jìn)程,隸屬于同一css_set的進(jìn)程受到同一個(gè)css_set所關(guān)聯(lián)的資源限制。

上圖中的”M×N Linkage”說(shuō)明的是css_set通過(guò)輔助數(shù)據(jù)結(jié)構(gòu)可以與 cgroups 節(jié)點(diǎn)進(jìn)行多對(duì)多的關(guān)聯(lián)。但是 cgroups 的實(shí)現(xiàn)不允許css_set同時(shí)關(guān)聯(lián)同一個(gè)cgroups層級(jí)結(jié)構(gòu)下多個(gè)節(jié)點(diǎn)。 這是因?yàn)?cgroups 對(duì)同一種資源不允許有多個(gè)限制配置。

一個(gè)css_set關(guān)聯(lián)多個(gè) cgroups 層級(jí)結(jié)構(gòu)的節(jié)點(diǎn)時(shí),表明需要對(duì)當(dāng)前css_set下的進(jìn)程進(jìn)行多種資源的控制。而一個(gè) cgroups 節(jié)點(diǎn)關(guān)聯(lián)多個(gè)css_set時(shí),表明多個(gè)css_set下的進(jìn)程列表受到同一份資源的相同限制。

實(shí)踐操作

查看cgroup掛載點(diǎn)(centos7.5):

 1 [root@k8s-master ~]# mount -t cgroup
 2 cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
 3 cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
 4 cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
 5 cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
 6 cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)
 7 cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
 8 cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
 9 cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
10 cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
11 cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
12 cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_prio,net_cls)

創(chuàng)建隔離組

[root@k8s-master ~]# cd /sys/fs/cgroup/cpu

[root@k8s-master cpu]# mkdir cpu_test

目錄創(chuàng)建完成會(huì)自動(dòng)生成以下文件 [root@k8s-master cpu]# ls cpu_test/

寫個(gè)死循環(huán)測(cè)試程序增加cpu使用率

 1 int main(void)
 2 {
 3     int i = 0;
 4     for(;;) i++;
 5     return 0;
 6 }

啟動(dòng)程序后cpu使用100%

默認(rèn)-1不限制,現(xiàn)在改成20000,可以理解使用率限制在20%

[root@k8s-master cpu]# echo 20000 > /sys/fs/cgroup/cpu/cpu_test/cpu.cfs_quota_us

找到進(jìn)程號(hào)增加到cpu tasks里面,在看top cpu使用率很快就下來(lái)

[root@k8s-master ~]# echo 23732 >> /sys/fs/cgroup/cpu/cpu_test/tasks

 

其它資源限制和cpu基本一致就先寫這么多了


網(wǎng)站標(biāo)題:詳解LinuxCgroup
文章分享:http://www.dlmjj.cn/article/dhsscdi.html