av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

詳解LinuxCgroup

Linux系統(tǒng)中經(jīng)常有個需求就是希望能限制某個或者某些進(jìn)程的分配資源。也就是能完成一組容器的概念,在這個容器中,有分配好的特定比例的cpu時間,IO時間,可用內(nèi)存大小等。于是就出現(xiàn)了cgroup的概念,cgroup就是controller group,最初由google的工程師提出,后來被整合進(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)也就憑借著這個技術(shù),為每個應(yīng)用程序分配不同的cgroup,將每個程序進(jìn)行隔離,達(dá)到了一個應(yīng)用程序不會影響其他應(yīng)用程序環(huán)境的目的。

cgroups子系統(tǒng)

  1. cpu 子系統(tǒng),主要限制進(jìn)程的 cpu 使用率。
  2. cpuacct 子系統(tǒng),可以統(tǒng)計 cgroups 中的進(jìn)程的 cpu 使用報告。
  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)程能夠訪問某些設(shè)備。
  7. net_cls 子系統(tǒng),可以標(biāo)記 cgroups 中進(jìn)程的網(wǎng)絡(luò)數(shù)據(jù)包,然后可以使用 tc 模塊(traffic control)對數(shù)據(jù)包進(jìn)行控制。
  8. net_prio — 這個子系統(tǒng)用來設(shè)計網(wǎng)絡(luò)流量的優(yōu)先級
  9. freezer 子系統(tǒng),可以掛起或者恢復(fù) cgroups 中的進(jìn)程。
  10. ns 子系統(tǒng),可以使不同 cgroups 下面的進(jìn)程使用不同的 namespace
  11. hugetlb — 這個子系統(tǒng)主要針對于HugeTLB系統(tǒng)進(jìn)行限制,這是一個大頁文件系統(tǒng)。

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

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

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

好好理解下這個圖即可:

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

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

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

一個css_set關(guān)聯(lián)多個 cgroups 層級結(jié)構(gòu)的節(jié)點(diǎn)時,表明需要對當(dāng)前css_set下的進(jìn)程進(jìn)行多種資源的控制。而一個 cgroups 節(jié)點(diǎn)關(guān)聯(lián)多個css_set時,表明多個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)建完成會自動生成以下文件 [root@k8s-master cpu]# ls cpu_test/

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

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

啟動程序后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)程號增加到cpu tasks里面,在看top cpu使用率很快就下來

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

 

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


分享標(biāo)題:詳解LinuxCgroup
文章地址:http://uogjgqi.cn/article/dhsscdi.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流