成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

5分鐘了解Docker原理之二,最簡單的Cgroups介紹!

云計算
很多接觸Docker的同學,都接觸過cgroup這個名詞。它是Linux上的一項古老的技術,用來實現資源限制,比如CPU、內存等。但有很多同學反映,這項技術有點晦澀,不太好懂。

[[379411]]

本文轉載自微信公眾號「小姐姐味道」,作者小姐姐養的狗  。轉載本文請聯系小姐姐味道公眾號。 

很多接觸Docker的同學,都接觸過cgroup這個名詞。它是Linux上的一項古老的技術,用來實現資源限制,比如CPU、內存等。但有很多同學反映,這項技術有點晦澀,不太好懂。

這就是本篇文章存在的目的,會讓你以最簡單直觀的方式,了解cgroups到底是個什么東西。

cgroups,是實現docker功能的重要底層設施。如上圖,使用cgroups,能夠把操作系統的各項資源變成池子,然后通過配置獲取相應的資源。

那它是怎么實現的呢?

要注意cgroups這個名詞,它有兩個特性。首先是c,就是Control的意思,是個動詞;第二部分,就是groups,證明它是個組。

1. 動詞的目標

control,用來限制什么呢?除了CPU、內存,還有啥?

使用mount命令,查看當前系統支持的限制目標,它有個專用的名詞,叫做子系統。

  1. # mount  | grep cgroup 
  2. tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755) 
  3. cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd) 
  4. cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio) 
  5. cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices) 
  6. cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu) 
  7. cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_prio,net_cls) 
  8. cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset) 
  9. cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory) 
  10. cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer) 
  11. cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids) 
  12. cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb) 
  13. cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event) 

不同的系統版本,會有一些細微的區別,大體上,子系統的分類包含下面這些:

  • cpu,cpuacct cpu主要限制進程的 cpu 使用率,cpuacct可以統計 cgroups 中的進程的 cpu 使用報告
  • cpuset 可以為 cgroups 中的進程分配單獨的 cpu 節點或者內存節點,就像Numa做的那些事情一樣
  • blkio 可以限制進程的塊設備 io,比如物理設備(磁盤,固態硬盤,USB 等等)
  • devices 控制進程能夠訪問某些設備
  • net_cls 標記 cgroups 中進程的網絡數據包,然后可以使用 tc 模塊(traffic control)對數據包進行控制
  • net_prio — 這個子系統用來設計網絡流量的優先級
  • freezer 可以掛起或者恢復 cgroups 中的進程。
  • ns 可以使不同 cgroups 下面的進程使用不同的 namespace
  • hugetlb 主要針對于HugeTLB系統進行限制,這是一個大頁文件系統。

內容很多,但我們平常關注的大多數就是內存和CPU,這些繁雜的細節,不影響我們理解它的設計原則。

下面就以CPU為例,來看一下子系統的實際表現。

2. CPU使用限制的例子

首先,我們進入cpu子系統目錄。

  1. cd /sys/fs/cgroup/cpu 

然后,創建一個組名為xjjdog的cgroups,這個名字,就叫做控制組。

  1. mkdir xjjdog 

這時候,神奇的事情發生了。我們使用ll命令,查看xjjdog目錄中的內容,發現系統已經為我們默認生成了一堆文件。

  1. # ll xjjdog/ 
  2. total 0 
  3. -rw-r--r-- 1 root root 0 Jan 28 21:09 cgroup.clone_children 
  4. --w--w--w- 1 root root 0 Jan 28 21:09 cgroup.event_control 
  5. -rw-r--r-- 1 root root 0 Jan 28 21:09 cgroup.procs 
  6. -r--r--r-- 1 root root 0 Jan 28 21:09 cpuacct.stat 
  7. -rw-r--r-- 1 root root 0 Jan 28 21:09 cpuacct.usage 
  8. -r--r--r-- 1 root root 0 Jan 28 21:09 cpuacct.usage_percpu 
  9. -rw-r--r-- 1 root root 0 Jan 28 21:09 cpu.cfs_period_us 
  10. -rw-r--r-- 1 root root 0 Jan 28 21:09 cpu.cfs_quota_us 
  11. -rw-r--r-- 1 root root 0 Jan 28 21:09 cpu.rt_period_us 
  12. -rw-r--r-- 1 root root 0 Jan 28 21:09 cpu.rt_runtime_us 
  13. -rw-r--r-- 1 root root 0 Jan 28 21:09 cpu.shares 
  14. -r--r--r-- 1 root root 0 Jan 28 21:09 cpu.stat 
  15. -rw-r--r-- 1 root root 0 Jan 28 21:09 notify_on_release 
  16. -rw-r--r-- 1 root root 0 Jan 28 21:09 tasks 

通過控制這些文件里面的數值,就可以對資源進行限制。比如cpu.cfs_quota_us文件,如果我們往里寫入100000(十萬),那么就證明使用了xjjdog的cgroup,最多能夠使用1核的CPU。寫入20000,證明最多使用使用1/5核的CPU。

這是因為,cpu.cfs_period_us這個配置文件,默認把1核cpu分成了10萬份。

那我們就寫入20000試一下。

  1. sudo echo 20000 > xjjdog/cpu.cfs_quota_us 

我們把當前shell的pid,加入被受控進程列表。

  1. echo $$ > xjjdog/tasks 

執行完畢之后,再啟動一個死循環。

  1. while true;do ;done; 

重新打開一個shell,使用top觀察CPU的使用率。可以發現,我們的死循環,最多只使用了20%的CPU。us保持在20%以下,且不間斷的在各個cpu之間切換。

依次試驗以下的命令,可以發現CPU的使用,會逐步增加,大體上和我們的限額是相等的。

  1. sudo echo 40000 > xjjdog/cpu.cfs_quota_us 
  2. sudo echo 60000 > xjjdog/cpu.cfs_quota_us 
  3. sudo echo 100000 > xjjdog/cpu.cfs_quota_us 

其他的資源限制,都是類似的思路。那么最重要的工作,就是需要知道cpu.cfs_quota_us這樣的字眼,代表的是什么意思,這些對著手冊來看是很容易掌握的。比如quota是配額的意思,很明顯就是限制資源的使用。

如上圖,子系統可以控制多個tasks,把它納入到控制組之內。我們上篇文章講到,可以將bash進程,作為docker系統的1號進程,那么同樣的,這個1號進程的子進程,都會共享同樣的限額配置。

3. group的意思

淺顯的來講,group就是指的對各種資源進行分組。不同名字的資源,有不同的隔離配置。但它有更多的特性。

比較重要的,是它的層級關系(hierarchy)。這個也比較好理解,它主要是為了簡化配置而存在的。

比如我上面的xjjdog目錄,對cpu的限制限制在0.5核。這時候,我想要有另外一個應用,對cpu的使用限制在0.5核,同時限制內存1gb,那么就可以直接在xjjdog目錄下創建xjjdog0目錄,在xjjdog0目錄下只配置內存方面的就可以了。

另外,如果你在外層的cpu限額限制了2core,然后在繼承的目錄里限制了1/5核,那它就只能使用操作系統的2/5核。這也是繼承的一個特性。

End

cgroups是2006年誕生的,發起人是Google 的工程師(Rohit Seth 和 Paul Menage )。在 2008 年成功合入 Linux 2.6.24 版本中,可以說這項技術是很古老的。cgroups目前已經成為 systemd、Docker、Linux Containers(LXC) 等技術的基礎。

像Windows平臺的WSL,是沒有cgroups功能的,使用mount命令可以驗證,這證明了它是不能把docker跑起來的,因為缺乏基礎。不過,WSL2已經可以了。

有些同學對docker目前的發展現狀有些擔心,但當你熟悉了這幾個常見的底層原理,讀完容器的標準之后,就會發現,上層的實現無論是換成docker也好,換成containerd也罷,都一樣!

作者簡介:小姐姐味道 (xjjdog),一個不允許程序員走彎路的公眾號。聚焦基礎架構和Linux。十年架構,日百億流量,與你探討高并發世界,給你不一樣的味道。我的個人微信xjjdog0,歡迎添加好友,進一步交流。

 

責任編輯:武曉燕 來源: 小姐姐味道
相關推薦

2021-01-27 18:15:01

Docker底層宿主機

2021-02-03 11:20:41

Docker架構容器

2021-04-30 16:23:58

WebRTC實時音頻

2021-12-01 06:50:50

Docker底層原理

2020-05-12 09:10:24

瀏覽器服務器網絡

2021-01-06 05:23:15

ServiceMesh網絡阿帕網

2018-03-12 21:31:24

區塊鏈

2018-03-12 14:37:50

區塊鏈比特幣架構

2024-06-25 12:25:12

LangChain路由鏈

2018-05-06 16:26:03

關聯規則數據分析關聯規則推薦

2009-11-05 14:53:54

Visual Stud

2021-10-19 07:27:08

HTTP代理網絡

2009-10-27 09:17:26

VB.NET生成靜態頁

2020-10-13 18:22:58

DevOps工具開發

2023-09-07 23:52:50

Flink代碼

2022-12-16 09:55:50

網絡架構OSI

2020-03-03 15:40:51

開發技能代碼

2009-11-02 08:44:17

Windows 7快速安裝

2012-06-28 10:26:51

Silverlight

2019-06-14 09:34:59

Linux 系統 數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲高清在线 | 久久国产亚洲 | 久久欧美高清二区三区 | 中文字幕免费观看 | 日韩欧美理论片 | 中文字幕av亚洲精品一部二部 | 欧美一区二区免费 | 密室大逃脱第六季大神版在线观看 | 一区二区伦理电影 | 欧美激情视频一区二区三区在线播放 | 在线一级片 | 亚洲在线视频 | 亚洲成人中文字幕 | 久操福利 | 激情欧美日韩一区二区 | 久久小视频 | 手机av网 | 欧美一级免费观看 | 久久久久国产精品午夜一区 | 久久亚洲一区二区三区四区 | 一区二区三区视频在线 | 国内精品久久久久久 | 久久久免费在线观看 | 免费一二区 | 国产免费观看一区 | 欧美视频免费在线观看 | 超碰在线观看97 | 亚洲自拍偷拍免费视频 | 韩日一区二区三区 | 久久久久久久电影 | 国产一区二区电影 | www.中文字幕 | 国产一区免费 | 国产精品久久在线观看 | 久久91精品国产一区二区 | 国产日韩欧美在线 | 成人激情视频免费观看 | 日韩在线国产 | 国产一区二区三区久久久久久久久 | 亚洲精品成人 | 国产精品一区二区三区四区 |