女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

什么是cgroups?有什么作用?

Linux愛好者 ? 來源:未知 ? 作者:工程師郭婷 ? 2018-08-27 11:35 ? 次閱讀

cgroups(Control Groups) 是 linux 內核提供的一種機制,這種機制可以根據需求把一系列系統任務及其子任務整合(或分隔)到按資源劃分等級的不同組內,從而為系統資源管理提供一個統一的框架。簡單說,cgroups 可以限制、記錄任務組所使用的物理資源。本質上來說,cgroups 是內核附加在程序上的一系列鉤子(hook),通過程序運行時對資源的調度觸發相應的鉤子以達到資源追蹤和限制的目的。

本文以 Ubuntu 16.04 系統為例介紹 cgroups,所有的 demo 均在該系統中演示。

為什么要了解 cgroups

在以容器技術為代表的虛擬化技術大行其道的時代了解 cgroups 技術是非常必要的!比如我們可以很方便的限制某個容器可以使用的 CPU、內存等資源,這究竟是如何實現的呢?通過了解 cgroups 技術,我們可以窺探到 linux 系統中整個資源限制系統的脈絡。從而幫助我們更好的理解和使用 linux 系統。

cgroups 的主要作用

實現 cgroups 的主要目的是為不同用戶層面的資源管理提供一個統一化的接口。從單個任務的資源控制到操作系統層面的虛擬化,cgroups 提供了四大功能:

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

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

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

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

相關概念

Task(任務)

在 linux 系統中,內核本身的調度和管理并不對進程和線程進行區分,只是根據 clone 時傳入的參數的不同來從概念上區分進程和線程。這里使用 task 來表示系統的一個進程或線程。

Cgroup(控制組)

cgroups 中的資源控制以 cgroup 為單位實現。Cgroup 表示按某種資源控制標準劃分而成的任務組,包含一個或多個子系統。一個任務可以加入某個 cgroup,也可以從某個 cgroup 遷移到另一個 cgroup。

Subsystem(子系統)

cgroups 中的子系統就是一個資源調度控制器(又叫 controllers)。比如 CPU 子系統可以控制 CPU 的時間分配,內存子系統可以限制內存的使用量。以筆者使用的 Ubuntu 16.04.3 為例,其內核版本為 4.10.0,支持的 subsystem 如下( cat /proc/cgroups):

Hierarchy(層級)

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

cgroups 的文件系統接口

cgroups 以文件的方式提供應用接口,我們可以通過 mount 命令來查看 cgroups 默認的掛載點:

$ mount | grep cgroup

第一行的 tmpfs 說明 /sys/fs/cgroup 目錄下的文件都是存在于內存中的臨時文件。

第二行的掛載點 /sys/fs/cgroup/systemd 用于 systemd 系統對 cgroups 的支持,相關內容筆者今后會做專門的介紹。

其余的掛載點則是內核支持的各個子系統的根級層級結構。

需要注意的是,在使用 systemd 系統的操作系統中,/sys/fs/cgroup 目錄都是由 systemd 在系統啟動的過程中掛載的,并且掛載為只讀的類型。換句話說,系統是不建議我們在 /sys/fs/cgroup 目錄下創建新的目錄并掛載其它子系統的。這一點與之前的操作系統不太一樣。

下面讓我們來探索一下 /sys/fs/cgroup 目錄及其子目錄下都是些什么:

/sys/fs/cgroup 目錄下是各個子系統的根目錄。我們以 memory 子系統為例,看看 memory 目錄下都有什么?

這些文件就是 cgroups 的 memory 子系統中的根級設置。比如 memory.limit_in_bytes 中的數字用來限制進程的最大可用內存,memory.swappiness 中保存著使用 swap 的權重等等。

既然 cgroups 是以這些文件作為 API 的,那么我就可以通過創建或者是修改這些文件的內容來應用 cgroups。具體該怎么做呢?比如我們怎么才能限制某個進程可以使用的資源呢?接下來我們就通過簡單的 demo 來演示如何使用 cgroups 限制進程可以使用的資源。

查看進程所屬的 cgroups

可以通過 /proc/[pid]/cgroup 來查看指定進程屬于哪些 cgroup:

每一行包含用冒號隔開的三列,他們的含義分別是:

cgroup 樹的 ID, 和 /proc/cgroups 文件中的 ID 一一對應。

和 cgroup 樹綁定的所有 subsystem,多個 subsystem 之間用逗號隔開。這里 name=systemd 表示沒有和任何 subsystem 綁定,只是給他起了個名字叫 systemd。

進程在 cgroup 樹中的路徑,即進程所屬的 cgroup,這個路徑是相對于掛載點的相對路徑。

既然 cgroups 是以這些文件作為 API 的,那么我就可以通過創建或者是修改這些文件的內容來應用 cgroups。具體該怎么做呢?比如我們怎么才能限制某個進程可以使用的資源呢?接下來我們就通過簡單的 demo 來演示如何使用 cgroups 限制進程可以使用的資源。

cgroups 工具

在介紹通過 systemd 應用 cgroups 之前,我們先使用 cgroup-bin 工具包中的 cgexec 來演示 demo。Ubuntu 默認沒有安裝 cgroup-bin 工具包,請通過下面的命令安裝:

$ sudo apt install cgroup-bin

demo:限制進程可用的 CPU

在我們使用 cgroups 時,最好不要直接在各個子系統的根目錄下直接修改其配置文件。推薦的方式是為不同的需求在子系統樹中定義不同的節點。比如我們可以在 /sys/fs/cgroup/cpu 目錄下新建一個名稱為 nick_cpu 的目錄:

$cd/sys/fs/cgroup/cpu

$sudo mkdirnick_cpu

然后查看新建的目錄下的內容:

是不是有點吃驚,cgroups 的文件系統會在創建文件目錄的時候自動創建這些配置文件!

讓我們通過下面的設置把 CPU 周期限制為總量的十分之一:

$sudosu

$echo100000>nick_cpu/cpu.cfs_period_us

$echo10000>nick_cpu/cpu.cfs_quota_us

然后創建一個 CPU 密集型的程序:

voidmain()

{

unsignedinti,end;

end=1024*1024*1024;

for(i=0;i

{

i++;

}

}

保存為文件 cputime.c 編譯并通過不同的方式執行:

$gcccputime.c-ocputime

$sudosu

$time./cputime

$timecgexec-gcpu:nick_cpu./cputime

time 命令可以為我們報告程序執行消耗的時間,其中的 real 就是我們真實感受到的時間。使用 cgexec 能夠把我們添加的 cgroup 配置 nick_cpu 應用到運行 cputime 程序的進程上。 上圖顯示,默認的執行只需要 2s 左右。通過 cgroups 限制 CPU 資源后需要運行 23s。

demo:限制進程可用的內存

這次我們來限制進程可用的最大內存,在 /sys/fs/cgroup/memory 下創建目錄nick_memory:

$cd/sys/fs/cgroup/memory

$sudo mkdirnick_memory

下面的設置把進程的可用內存限制在最大 300M,并且不使用 swap:

# 物理內存 + SWAP <= 300 MB;1024*1024*300 = 314572800

$sudosu

$echo314572800>nick_memory/memory.limit_in_bytes

$echo0>nick_memory/memory.swappiness

然后創建一個不斷分配內存的程序,它分五次分配內存,每次申請 100M:

#include

#include

#include

#define CHUNK_SIZE 1024 * 1024 * 100

voidmain()

{

char*p;

inti;

for(i=0;i<5;i++)

{

p=malloc(sizeof(char)*CHUNK_SIZE);

if(p==NULL)

{

printf("fail to malloc!");

return;

}

// memset() 函數用來將指定內存的前 n 個字節設置為特定的值

memset(p,0,CHUNK_SIZE);

printf("malloc memory %d MB ",(i+1)*100);

}

}

把上面的代碼保存為 mem.c 文件,然后編譯:

$ gcc mem.c -o mem

執行生成的 mem 程序:

$ ./mem

此時一切順利,然后加上剛才的約束試試:

$ cgexec -g memory:nick_memory ./mem

由于內存不足且禁止使用 swap,所以被限制資源的進程在申請內存時被強制殺死了。

下面再使用 stress 程序測試一個類似的場景(通過 stress 程序申請 500M 的內存):

$ sudo cgexec -g memory:nick_memory stress --vm 1 --vm-bytes 500000000 --vm-keep --verbo

stress 程序能夠提供比較詳細的信息,進程被殺掉的方式是收到了 SIGKILL(signal 9) 信號。

實際應用中往往要同時限制多種的資源,比如既限制 CPU 資源又限制內存資源。使用 cgexec 實現這樣的用例其實很簡單,直接指定多個 -g 選項就可以了:

cgexec -g cpu:nick_cpu -g memory:nick_memory ./cpumem

總結

cgroups 是 linux 內核提供的功能,由于牽涉的概念比較多,所以不太容易理解。本文試圖在介紹概念性內容的同時,用最簡單的 demo 演示 cgroups 的用法。希望直觀的 demo 能夠幫助大家理解 cgroups。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11034

    瀏覽量

    216000
  • Linux
    +關注

    關注

    87

    文章

    11460

    瀏覽量

    212793
  • 虛擬化
    +關注

    關注

    1

    文章

    398

    瀏覽量

    30112

原文標題:Linux cgroups 命令簡介

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    一文帶你搞懂Docker容器的核心基石Cgroups

    Cgroups 是 Linux 系統內核提供的一種機制,這種機制可以根據需求將一些列系統任務機器子任務整合或分離到按資源劃分登記的不同組內,從而為系統資源管理提供一個的框架。簡單地說,cgroups
    發表于 11-24 09:54 ?693次閱讀

    三極管的作用哪些?

    三極管的作用哪些?
    發表于 03-06 09:51 ?5164次閱讀
    三極管的<b class='flag-5'>作用</b><b class='flag-5'>有</b>哪些?

    LED顯示屏的作用和特點哪些

    LED顯示屏的作用和特點哪些 LED顯示屏的作用   1、起到商品宣傳,吸引顧客的作用?! ED廣
    發表于 03-10 10:57 ?1335次閱讀

    波峰焊其熱作用的過程區域作用哪些

    波峰焊中,PCB通過波峰時其熱作用過程大致可分為三個區域,分別是助焊劑潤濕區、焊料潤濕區、合金層形成區。以下分享三點的區域作用哪些?
    的頭像 發表于 10-21 09:20 ?4707次閱讀

    電阻器哪些作用

    電阻器大家應該是不陌生的,在初中階段,就對電阻一些性質和特點的學習,但在電阻的學習中沒有包括電阻的作用,而今天就來講講關于電阻作用的知識。
    的頭像 發表于 02-14 19:41 ?3.3w次閱讀

    藍牙模塊什么作用 藍牙芯片的作用 藍牙芯片什么作用 具體哪些應用場景

    在如今生活中,每個人都接觸了無線連接、藍牙傳輸。但是藍牙模塊還是很少見的。那么藍牙模塊什么作用呢?具體又有哪些應用場景呢?本篇將為大家簡單介紹藍牙模塊的作用以及常見的應用場景。 藍牙模塊按照標準分
    發表于 12-09 11:45 ?8494次閱讀

    減速器的作用是什么,哪些類型

    減速器的作用是什么,哪些類型?
    的頭像 發表于 09-19 09:02 ?1w次閱讀

    電容器什么作用?

    電容器什么作用?
    的頭像 發表于 03-09 15:16 ?3742次閱讀
    電容器<b class='flag-5'>有</b>什么<b class='flag-5'>作用</b>?

    共模電感什么作用與選型技巧?

    共模電感什么作用與選型技巧?|深圳比創達EMC
    的頭像 發表于 10-10 11:06 ?4238次閱讀
    共模電感<b class='flag-5'>有</b>什么<b class='flag-5'>作用</b>與選型技巧?

    VTT電源對DDR什么作用

    VTT電源對DDR什么作用?
    的頭像 發表于 11-27 16:20 ?2369次閱讀
    VTT電源對DDR<b class='flag-5'>有</b>什么<b class='flag-5'>作用</b>?

    激光切割設備中模組的作用哪些?

    激光切割設備中模組的作用哪些?
    的頭像 發表于 11-23 17:44 ?910次閱讀
    激光切割設備中模組的<b class='flag-5'>作用</b><b class='flag-5'>有</b>哪些?

    電感哪些特性?電感常見的作用哪些?

    電感哪些特性?電感常見的作用哪些? 電感是一種重要的電子元器件,具有許多特性和廣泛的應用。在本文中,我將詳細介紹電感的特性及其常見的作用。 電感的特性: 1. 自感性:電感器具有自
    的頭像 發表于 11-29 17:45 ?4187次閱讀

    印制電路板哪些作用

    印制電路板哪些作用
    的頭像 發表于 12-14 10:28 ?2691次閱讀

    電感對干擾信號什么作用?

    電感對干擾信號抑制作用。
    的頭像 發表于 12-22 18:08 ?940次閱讀

    智慧路燈哪些功能和作用

    智慧路燈哪些功能和作用 智慧燈桿屏
    的頭像 發表于 03-20 17:00 ?372次閱讀
    智慧路燈<b class='flag-5'>有</b>哪些功能和<b class='flag-5'>作用</b>