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

5分鐘了解Docker原理之二,最簡(jiǎn)單的Cgroups介紹!

云計(jì)算
很多接觸Docker的同學(xué),都接觸過cgroup這個(gè)名詞。它是Linux上的一項(xiàng)古老的技術(shù),用來實(shí)現(xiàn)資源限制,比如CPU、內(nèi)存等。但有很多同學(xué)反映,這項(xiàng)技術(shù)有點(diǎn)晦澀,不太好懂。

[[379411]]

本文轉(zhuǎn)載自微信公眾號(hào)「小姐姐味道」,作者小姐姐養(yǎng)的狗  。轉(zhuǎn)載本文請(qǐng)聯(lián)系小姐姐味道公眾號(hào)。 

很多接觸Docker的同學(xué),都接觸過cgroup這個(gè)名詞。它是Linux上的一項(xiàng)古老的技術(shù),用來實(shí)現(xiàn)資源限制,比如CPU、內(nèi)存等。但有很多同學(xué)反映,這項(xiàng)技術(shù)有點(diǎn)晦澀,不太好懂。

這就是本篇文章存在的目的,會(huì)讓你以最簡(jiǎn)單直觀的方式,了解cgroups到底是個(gè)什么東西。

cgroups,是實(shí)現(xiàn)docker功能的重要底層設(shè)施。如上圖,使用cgroups,能夠把操作系統(tǒng)的各項(xiàng)資源變成池子,然后通過配置獲取相應(yīng)的資源。

那它是怎么實(shí)現(xiàn)的呢?

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

1. 動(dòng)詞的目標(biāo)

control,用來限制什么呢?除了CPU、內(nèi)存,還有啥?

使用mount命令,查看當(dāng)前系統(tǒng)支持的限制目標(biāo),它有個(gè)專用的名詞,叫做子系統(tǒng)。

  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) 

不同的系統(tǒng)版本,會(huì)有一些細(xì)微的區(qū)別,大體上,子系統(tǒng)的分類包含下面這些:

  • cpu,cpuacct cpu主要限制進(jìn)程的 cpu 使用率,cpuacct可以統(tǒng)計(jì) cgroups 中的進(jìn)程的 cpu 使用報(bào)告
  • cpuset 可以為 cgroups 中的進(jìn)程分配單獨(dú)的 cpu 節(jié)點(diǎn)或者內(nèi)存節(jié)點(diǎn),就像Numa做的那些事情一樣
  • blkio 可以限制進(jìn)程的塊設(shè)備 io,比如物理設(shè)備(磁盤,固態(tài)硬盤,USB 等等)
  • devices 控制進(jìn)程能夠訪問某些設(shè)備
  • net_cls 標(biāo)記 cgroups 中進(jìn)程的網(wǎng)絡(luò)數(shù)據(jù)包,然后可以使用 tc 模塊(traffic control)對(duì)數(shù)據(jù)包進(jìn)行控制
  • net_prio — 這個(gè)子系統(tǒng)用來設(shè)計(jì)網(wǎng)絡(luò)流量的優(yōu)先級(jí)
  • freezer 可以掛起或者恢復(fù) cgroups 中的進(jìn)程。
  • ns 可以使不同 cgroups 下面的進(jìn)程使用不同的 namespace
  • hugetlb 主要針對(duì)于HugeTLB系統(tǒng)進(jìn)行限制,這是一個(gè)大頁文件系統(tǒng)。

內(nèi)容很多,但我們平常關(guān)注的大多數(shù)就是內(nèi)存和CPU,這些繁雜的細(xì)節(jié),不影響我們理解它的設(shè)計(jì)原則。

下面就以CPU為例,來看一下子系統(tǒng)的實(shí)際表現(xiàn)。

2. CPU使用限制的例子

首先,我們進(jìn)入cpu子系統(tǒng)目錄。

  1. cd /sys/fs/cgroup/cpu 

然后,創(chuàng)建一個(gè)組名為xjjdog的cgroups,這個(gè)名字,就叫做控制組。

  1. mkdir xjjdog 

這時(shí)候,神奇的事情發(fā)生了。我們使用ll命令,查看xjjdog目錄中的內(nèi)容,發(fā)現(xiàn)系統(tǒng)已經(jīng)為我們默認(rèn)生成了一堆文件。

  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 

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

這是因?yàn)椋琧pu.cfs_period_us這個(gè)配置文件,默認(rèn)把1核cpu分成了10萬份。

那我們就寫入20000試一下。

  1. sudo echo 20000 > xjjdog/cpu.cfs_quota_us 

我們把當(dāng)前shell的pid,加入被受控進(jìn)程列表。

  1. echo $$ > xjjdog/tasks 

執(zhí)行完畢之后,再啟動(dòng)一個(gè)死循環(huán)。

  1. while true;do ;done; 

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

依次試驗(yàn)以下的命令,可以發(fā)現(xiàn)CPU的使用,會(huì)逐步增加,大體上和我們的限額是相等的。

  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這樣的字眼,代表的是什么意思,這些對(duì)著手冊(cè)來看是很容易掌握的。比如quota是配額的意思,很明顯就是限制資源的使用。

如上圖,子系統(tǒng)可以控制多個(gè)tasks,把它納入到控制組之內(nèi)。我們上篇文章講到,可以將bash進(jìn)程,作為docker系統(tǒng)的1號(hào)進(jìn)程,那么同樣的,這個(gè)1號(hào)進(jìn)程的子進(jìn)程,都會(huì)共享同樣的限額配置。

3. group的意思

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

比較重要的,是它的層級(jí)關(guān)系(hierarchy)。這個(gè)也比較好理解,它主要是為了簡(jiǎn)化配置而存在的。

比如我上面的xjjdog目錄,對(duì)cpu的限制限制在0.5核。這時(shí)候,我想要有另外一個(gè)應(yīng)用,對(duì)cpu的使用限制在0.5核,同時(shí)限制內(nèi)存1gb,那么就可以直接在xjjdog目錄下創(chuàng)建xjjdog0目錄,在xjjdog0目錄下只配置內(nèi)存方面的就可以了。

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

End

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

像Windows平臺(tái)的WSL,是沒有cgroups功能的,使用mount命令可以驗(yàn)證,這證明了它是不能把docker跑起來的,因?yàn)槿狈A(chǔ)。不過,WSL2已經(jīng)可以了。

有些同學(xué)對(duì)docker目前的發(fā)展現(xiàn)狀有些擔(dān)心,但當(dāng)你熟悉了這幾個(gè)常見的底層原理,讀完容器的標(biāo)準(zhǔn)之后,就會(huì)發(fā)現(xiàn),上層的實(shí)現(xiàn)無論是換成docker也好,換成containerd也罷,都一樣!

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

 

責(zé)任編輯:武曉燕 來源: 小姐姐味道
相關(guān)推薦

2021-01-27 18:15:01

Docker底層宿主機(jī)

2021-02-03 11:20:41

Docker架構(gòu)容器

2021-04-30 16:23:58

WebRTC實(shí)時(shí)音頻

2021-12-01 06:50:50

Docker底層原理

2020-05-12 09:10:24

瀏覽器服務(wù)器網(wǎng)絡(luò)

2021-01-06 05:23:15

ServiceMesh網(wǎng)絡(luò)阿帕網(wǎng)

2018-03-12 21:31:24

區(qū)塊鏈

2018-03-12 14:37:50

區(qū)塊鏈比特幣架構(gòu)

2024-06-25 12:25:12

LangChain路由鏈

2018-05-06 16:26:03

關(guān)聯(lián)規(guī)則數(shù)據(jù)分析關(guān)聯(lián)規(guī)則推薦

2009-11-05 14:53:54

Visual Stud

2021-10-19 07:27:08

HTTP代理網(wǎng)絡(luò)

2020-10-13 18:22:58

DevOps工具開發(fā)

2022-12-16 09:55:50

網(wǎng)絡(luò)架構(gòu)OSI

2023-09-07 23:52:50

Flink代碼

2009-10-27 09:17:26

VB.NET生成靜態(tài)頁

2020-03-03 15:40:51

開發(fā)技能代碼

2009-11-02 08:44:17

Windows 7快速安裝

2012-06-28 10:26:51

Silverlight

2019-06-14 09:34:59

Linux 系統(tǒng) 數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日韩一级黄色毛片 | 欧美激情精品久久久久 | av中文字幕在线 | 国产精品成人一区二区三区 | va在线| 伊人春色成人 | 成人av一区二区亚洲精 | 97在线观视频免费观看 | 日韩一区中文字幕 | 久草视频在 | 久久国产精彩视频 | 九九伊人sl水蜜桃色推荐 | 亚洲黄色国产 | 日韩不卡一二区 | 国产免费拔擦拔擦8x高清 | 天天草天天干 | 中文字幕欧美日韩一区 | 免费国产视频 | 天天拍天天操 | 亚洲免费精品一区 | 国产精品一区二区三区久久 | 久久久久国 | 91久久久久 | av一二三区 | 91av在线电影| 国产aⅴ爽av久久久久久久 | 91 在线 | 第一区在线观看免费国语入口 | 一区二区免费看 | 久久亚洲天堂 | 综合九九 | 麻豆毛片 | 精品久久1 | 亚洲精品一区二三区不卡 | 国产亚洲一区二区精品 | 一区二区三区观看视频 | 久久免费观看视频 | 九九亚洲精品 | 成人午夜网 | 精品久久久久久亚洲综合网 | 亚洲 中文 欧美 日韩 在线观看 |