Linux Cgroups技術(shù)概述_第1頁(yè)
Linux Cgroups技術(shù)概述_第2頁(yè)
Linux Cgroups技術(shù)概述_第3頁(yè)
Linux Cgroups技術(shù)概述_第4頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Linux Cgroups 技術(shù)概述Cgroups 是什么?cgroups 全稱為 Control Groups(控制組), 是 Linux 內(nèi)核提供的一種機(jī)制,可以根據(jù)需求把一個(gè)系列的任務(wù)以及其子任務(wù)整合 / 或者分割到按資源分等級(jí)的不同組內(nèi),從而給系統(tǒng)資源管理器提供一個(gè)統(tǒng)一的框架。簡(jiǎn)單來(lái)說(shuō),就是 cgroups 可以記錄、限制任務(wù)組所使用的物理資源。本質(zhì)上,其實(shí)就是內(nèi)核附加到程序上的 hook(鉤子)腳本,通過(guò)運(yùn)行程序時(shí),觸發(fā)相應(yīng)的鉤子腳本以達(dá)到資源追蹤、限制資源的目的。為什么要了解 Cgroups ?現(xiàn)在容器技術(shù)(docker 等)使用的較為頻繁, 但是我們并不了解容器中可以使用的 CP

2、U、內(nèi)存等資源是怎么進(jìn)行限制的,其中的原理又是如何實(shí)現(xiàn)的呢?也不太清楚,不過(guò),通過(guò)學(xué)習(xí) cgroups 技術(shù), 我覺(jué)得可以幫助我們窺探到其中的一點(diǎn)點(diǎn)門(mén)道,而且還能更好的助我們理解和使用 linux 系統(tǒng)。Cgroups 有什么作用 ?cgroups 的主要作用 實(shí)現(xiàn) cgroups 的主要目的是為不同用戶層面的資源管理提供一個(gè)統(tǒng)一化的接口。 從單個(gè)任 務(wù)的資源控制到操作系統(tǒng)層面的虛擬化,cgroups 提供了四大功能:資源限制:cgroups 可以對(duì)任務(wù)是要的資源總額進(jìn)行限制。優(yōu)先級(jí)分配:通過(guò)控制分配的 CPU 時(shí)間片數(shù)量和磁盤(pán) IO 帶寬,實(shí)際上就等同于控制了任務(wù)運(yùn)行的優(yōu)先級(jí)了。資源統(tǒng)計(jì):c

3、groups 可以統(tǒng)計(jì)系統(tǒng)的資源使用量, cpu 使用時(shí)間、內(nèi)存用量等。這個(gè)功能適用于云端按照使用量計(jì)費(fèi)的方式。任務(wù)控制:cgroups 可以對(duì)任務(wù)執(zhí)行掛起、恢復(fù)等操作。基本概念Cgroups 中的資源控制一 cgroup 為單位實(shí)現(xiàn)。Cgroup 表示按某種資源控制標(biāo)準(zhǔn)劃分而成的任務(wù)組,包含一個(gè)或多個(gè)子系統(tǒng)。一個(gè)任務(wù)可以加入某個(gè) cgroup,也可以從某個(gè) cgroup 遷移到另一個(gè)cgroup。Subsystem( 子系統(tǒng) ) cgroups 中的子系統(tǒng)就是一個(gè)資源調(diào)度控制器 ( 又叫 controllers)。比如 CPU 子系統(tǒng)可以控制 CPU 的時(shí)間分配周期,內(nèi)存子系統(tǒng)可以限制內(nèi)存的

4、使用量。我以本地環(huán)境為例子,支持的 subsystem 如下 ( cat /proc/cgroups):blkio 641cpuacct 421cpu 421cpuset 1111ed#subsys_name hierarchynum_cgroupsenablliuxinliuxin-PC cat /proc/cgroupsmemory 12711 1devices 8104 1freezer 7587 1net_cls 911perf_event211net_prio911hugetlb 511pids 3114 1rdma 1011d,nodev,noexec,relatime,rdma)

5、cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuicls,net_prio)cgroup (rw,nosuid,nodev,noexec,relatime,net_cgroup on /sys/fs/cgroup/net_cls,net_prio typeuid,nodev,noexec,relatime,devices)cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)cgroup on /sys/fs/cgroup/f

6、reezer type cgroup (rw,nosd,nodev,noexec,relatime,blkio)cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuiuid,nodev,noexec,relatime,hugetlb)cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nos(rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup,nodev,noexec

7、,relatime,pids)cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuidnosuid,nodev,noexec,relatime,perf_event)cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,suid,nodev,noexec,relatime,xattr,name=systemd)cgroup on /sys/fs/cgroup/systemd type cgroup (rw,noosuid,nodev,noexec,relatime,nsdelegate)cgrou

8、p2 on /sys/fs/cgroup/unified type cgroup2 (rw,nnoexec,mode=755)tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,liuxinliuxin-PC mount | grep cgroupcpuset 給 cgroup 中的任務(wù)分配獨(dú)立的 CPU( 多處理器系統(tǒng) ) 和內(nèi)存節(jié)點(diǎn)。cpu 限制 CPU 時(shí)間片的分配,與 cpuacct 掛載在同一目錄。cpuacct 生成 cgroup 中的任務(wù)占用 CPU 資源的報(bào)告,與 cpu 掛載在同一目錄。blkio 對(duì)塊設(shè)備的 IO 進(jìn)行限制

9、。memory 對(duì) cgroup 中的任務(wù)的可用內(nèi)存進(jìn)行限制,并自動(dòng)生成資源占用報(bào)告。devices 允許或禁止 cgroup 中的任務(wù)訪問(wèn)設(shè)備。freezer 暫停 / 恢復(fù) cgroup 中的任務(wù)。net_cls 使用等級(jí)識(shí)別符(classid)標(biāo)記網(wǎng)絡(luò)數(shù)據(jù)包,這讓 Linux 流量控制器(tc 指令)可以識(shí)別來(lái)自特定 cgroup 任務(wù)的數(shù)據(jù)包,并進(jìn)行網(wǎng)絡(luò)限制。 perf_event 允許使用 perf 工具來(lái)監(jiān)控 cgroup。 net_prio 允 許 基 于 cgroup 設(shè) 置 網(wǎng) 絡(luò) 流 量(netowork traffic) 的優(yōu)先級(jí)。hugetlb 限制使用的內(nèi)存頁(yè)數(shù)量。p

10、ids 限制任務(wù)的數(shù)量。RDMA 是一種 host-offload, host-bypass 技術(shù), 允許應(yīng)用程序 ( 包括存儲(chǔ) ) 在它們的內(nèi)存空間之間直接做數(shù)據(jù)傳輸。Hierarchy( 層級(jí) ) 層級(jí)有一系列 cgroup 以一個(gè)樹(shù)狀結(jié)構(gòu)排列而成,每個(gè)層級(jí)通過(guò)綁定對(duì)應(yīng)的子系統(tǒng)進(jìn)行資源控制。層級(jí)中的 cgroup 節(jié)點(diǎn)可以包含零個(gè)或多個(gè)子節(jié)點(diǎn),子節(jié)點(diǎn)繼承父節(jié)點(diǎn)掛載的子系統(tǒng)。一個(gè)操作系統(tǒng)中可以有多個(gè)層級(jí)。cgroup 的文件系統(tǒng)接口cgroup 以文件的方式提供應(yīng)用接口,我們可以通過(guò) mount 來(lái)查看 cgroups 默認(rèn)的掛載點(diǎn):suid,nodev,noexec,relatime,me

11、mory)cgroup on /sys/fs/cgroup/memory type cgroup (rw,nouid,nodev,noexec,relatime,cpuset)cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nos第一行的 tmpfs 說(shuō)明 /sys/fs/cgroup 目錄下的文件都是存在于內(nèi)存中的臨時(shí)文件。第三行的掛載點(diǎn) /sys/fs/cgroup/systemd 用于systemd 系統(tǒng)對(duì) cgroups 的支持,相關(guān)內(nèi)容筆者今后會(huì)做專門(mén)的介紹。其余的掛載點(diǎn)則是內(nèi)核支持的各個(gè)子系統(tǒng)的根級(jí)層級(jí)結(jié)構(gòu)。接下來(lái)進(jìn)入 /sys/fs

12、/cgroup 看看目錄及其子目錄下的都是什么內(nèi)容限制進(jìn)程的可用的 cpu在我們使用 cgroups 時(shí),最好不要隨便直接在子系統(tǒng)的根目錄下直接修改其配置文件,容易造成不必要的麻煩。所以我們可以在子系統(tǒng)樹(shù)中定義其他的節(jié)點(diǎn),然后我們?cè)谄渌墓?jié)點(diǎn)任意操作不影響系統(tǒng)的子系統(tǒng),那我們就直接在 /sys/fs/cgroup/cpu 目錄下新建一個(gè)名稱為 nick_cpu 的目錄 :cfs_quota_us cpu.uclamp.mincpuacct.usagecpuacct.usage_percpu_user cpu.cpuacct.usage_percpu_sys cpu.cfs_period_us

13、cpu.uclamp.maxcpuacct.statusage_user cscpuacct.usage_percpucpuacct.cpuacct.usage_sys cpu.sharesnotify_on_releasec gr oup . clone_childr en cpuacc t .usag e_all liuxinliuxin-PC /s/f/c/cpu ls nick_cpu/驗(yàn)證成功sudo liuxin 的密碼:請(qǐng)輸入密碼liuxinliuxin-PC /s/f/c/cpu sudo mkdir nick_cpu/創(chuàng)建結(jié)束之后

14、,我們進(jìn)入此目錄,會(huì)發(fā)現(xiàn)多了好多配置文件,有點(diǎn)神奇吧,其實(shí) cgroups 的文件系統(tǒng)會(huì)在創(chuàng)建目錄的時(shí)候自動(dòng)創(chuàng)建這些配置文件。net_priopids/systemd/cpucpu,cpuacct/ devices/ hugetlb/ net_clscls,net_prio/ perf_event/ rdma/ unified/blkio/ cpuacctcpuset/ freezer/ memory/ net_liuxinliuxin-PC ls /sys/fs/cgroup/sys/fs/cgroup 目錄下是各個(gè)子系統(tǒng)的根目錄, 直接描述可能沒(méi)有個(gè)清晰的認(rèn)識(shí),所以下面以demo 來(lái)演示,

15、如何用 cgroups 限制進(jìn)程可以使用的資源。demo在開(kāi)始 demo 的演示之前,需要先安裝一個(gè)工具,它對(duì)于 demo 指定控制組等操作非常方便。默認(rèn)在咱們 uos 的倉(cāng)庫(kù)中就有這個(gè)包。sudo apt install cgroup-bin等待安裝成功,開(kāi)始 demo 的演示。新創(chuàng)建的目錄的配置文件很多,就不一一講解了,cfs_period_us 用來(lái)配置時(shí)間周期長(zhǎng)度,cfs_ quota_us 用來(lái)配置當(dāng)前 cgroup 在設(shè)置的周期長(zhǎng)度內(nèi)所能使用的 CPU 時(shí)間數(shù),兩個(gè)文件配合起來(lái)設(shè)置 CPU 的使用上限。我們演示的 demo 就是以此為例子:50000 cpu.cfs_quota_u

16、srootliuxin-PC:/sys/fs/cgroup/cpu/nick_cpu# echo100000 cpu.cfs_period_usrootliuxin-PC:/sys/fs/cgroup/cpu/nick_cpu# echo首先切換 root 用戶,然后將時(shí)間周期的長(zhǎng)度設(shè)置為 100000, 將當(dāng)前 cgroup 的周期長(zhǎng)度設(shè)置為50000,相當(dāng)于將 cpu 周期限制為總量的一半:創(chuàng)建一個(gè)累加計(jì)時(shí)程序:上圖顯 示,默認(rèn)執(zhí)行只需要 2s 多,而通過(guò)cgroups 限制 CPU 資源后需要運(yùn)行 4s 多。正好是兩倍左右。限制進(jìn)程可用的內(nèi)存像上面一樣,我們到 /sys/fs/cgrou

17、p/memory 下創(chuàng)建 nick_memory: for(i=0;i suliuxinliuxin-PC /c/src gcc -o cputime cputime.cmemory.numa_stattasksmemory.kmem.slabinfocharge_at_immigrate notify_on_releasememory.kmem.max_usage_in_bytes memory.move_usage_in_bytesmemory.use_hierarchymemory.kmem.limit_in_bytesmemory.max_memory.limit_in_bytesme

18、mory.usage_in_bytesmemory.kmem.failcntmemory.kmem.usage_in_bytesmemory.swappinessmemory.force_emptymemory.kmem.tcp.usage_in_bytesmemory.statmemory.failcntmemory.kmem.tcp.max_usage_in_bytes memory.soft_limit_in_csmemory.kmem.tcp.limit_in_bytesmemory.pressure_levelcgroup.event_controlme

19、mory.kmem.tcp.failcntmemory.oom_controlcgroup.clone_childrenmemory/liuxinliuxin-PC /s/f/c/memory ls nick_驗(yàn)證成功sudo liuxin 的密碼:請(qǐng)輸入密碼nick_memoryliuxinliuxin-PC /s/f/c/memory sudo mkdir對(duì)用戶內(nèi)存的限制主要是 memory.limit_in_ bytes 和 memory.memsw.limit_in_bytes, 然 后已殺死m(xù)alloc memory 300 MBmalloc memory 200 MBmalloc

20、memory 100 MBmemory:nick_memory ./memoryrootliuxin-PC:/home/liuxin/c-work/src# cgexec -gmalloc memory 500 MBmalloc memory 400 MBmalloc memory 300 MBmalloc memory 200 MBmalloc memory 100 MBrootliuxin-PC:/home/liuxin/c-work/src# ./memory驗(yàn)證成功Password:請(qǐng)輸入密碼liuxinliuxin-PC /c/src gcc -o memory memory.cliuxinliuxin-PC /c/src su通過(guò)設(shè)置 memory.swappiness, 來(lái)設(shè)置是否使用swap,我們的 demo 也是以此為例子。下面的設(shè)置把進(jìn)程的可用內(nèi)存限制在最大 400M,并且不使用swap:0memory# cat memory.swappinessrootliuxin-PC:/sys/fs/cgroup/memor y/nick_ memory

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論