自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺談Cgroups(二)

開(kāi)發(fā) 開(kāi)發(fā)工具
上一篇文章《淺談Cgroups》對(duì)cgroup v1進(jìn)行了介紹,但是由于當(dāng)前k8s使用cephfs進(jìn)行數(shù)據(jù)存儲(chǔ),當(dāng)多租戶使用時(shí),需要對(duì)IO進(jìn)行限制。

1. 背景

上一篇文章《淺談Cgroups》對(duì)cgroup v1進(jìn)行了介紹,但是由于當(dāng)前k8s使用cephfs進(jìn)行數(shù)據(jù)存儲(chǔ),當(dāng)多租戶使用時(shí),需要對(duì)IO進(jìn)行限制。當(dāng)前cgroup v1由于memcg與blkio沒(méi)有協(xié)作,導(dǎo)致buffer io的throttle一直沒(méi)有實(shí)現(xiàn)。并且cgroup v1在內(nèi)核的實(shí)現(xiàn)一直比較混亂,其中主要的原因在于,cgroup為了提供靈活性,允許進(jìn)程可以屬于多個(gè)hierarchy的不同的group。但實(shí)際上,多個(gè)hierarchy并沒(méi)有太大的用處,因?yàn)榭刂破?controller)只能屬于一個(gè)hierarchy。 所以在實(shí)際使用中,通常是每個(gè)hierarchy一個(gè)控制器。

這種多hierarchy除了增加代碼的復(fù)雜度和理解困難外,并沒(méi)有太大的用處。一方面,跟蹤進(jìn)程所有controller變得復(fù)雜;另外,各個(gè)controller之間也很難協(xié)同工作(因?yàn)閏ontroller可能屬于不同的hierarchy, 所以從3.16開(kāi)始,內(nèi)核開(kāi)始轉(zhuǎn)向單一層次(unified hierarchy)。并且實(shí)現(xiàn)了對(duì)buffer io的限制。

2. Cgroups v2的變化

由于Cgroups v1存在的種種問(wèn)題,Cgroups v2將多hierarchy的方式變成了unified hierarchy,并將所有的controller掛載到一個(gè)unified hierarchy。

當(dāng)前kernel沒(méi)有移除Cgroups v1版本,允許Cgroups v1和v2兩個(gè)版本共存。但是相同的controller不能同時(shí)mount到這兩個(gè)不同的Cgroup版本中。

以下是Cgroups v2的五點(diǎn)改進(jìn):

  • Cgroups v2 中所有的controller都會(huì)被掛載到一個(gè)unified hierarchy下,不在存在像v1中允許不同的controller掛載到不同的hierarchy的情況
  • Proess只能綁定到cgroup的根(“/“)目錄和cgroup目錄樹(shù)中的葉子節(jié)點(diǎn)
  • 通過(guò)cgroup.controllers和cgroup.subtree_control指定哪些controller可以被使用
  • v1版本中的task文件和cpuset controller中的cgroup.clone_children文件被移除
  • 當(dāng)cgroup為空時(shí)的通知機(jī)制得到改進(jìn),通過(guò)cgroup.events文件通知

3. unified hierarchy

在Cgroups v1允許將不同的controller掛載到不同的hierarchies雖然很靈活,但實(shí)際上這種方式對(duì)于使用者來(lái)說(shuō)是沒(méi)有必要的。因此在Cgroups v2版本中,將所有的controller都掛載到一個(gè)hierarchies。

可以使用下面命令將Cgroups v2掛載到文件系統(tǒng),并且所有可用的controller會(huì)自動(dòng)被掛載進(jìn)去。

  1. mount -t cgroup2 none $MOUNT_POINT 

一個(gè)contoller無(wú)法在Cgroups v1和v2中同時(shí)使用,如果想在Cgroups v2使用已經(jīng)被Cgroups v1使用的controller,則需要先將其從Cgroups v1中umount掉。

要注意的是,系統(tǒng)啟動(dòng)時(shí),systemd默認(rèn)使用Cgroups v1,并將可以使用的controller mount到/sys/fs/cgroup。如果想在系統(tǒng)啟動(dòng)時(shí),把Cgroups v1關(guān)掉,可以在/etc/default/grub文件下修改kernel參數(shù),增加GRUB_CMDLINE_LINUX_DEFAULT="cgroup_no_v1=all"。(all表示關(guān)閉所有的controller,如果想關(guān)閉指定的controller,則將all替換成你需要的controller名稱,并已逗號(hào)分隔即可)。這樣就可以在Cgroups v2中使用你想要的controller了。

4. controllers

當(dāng)前cgroup v2支持以下controller:

  • io (since Linux 4.5)
  • memory (since Linux 4.5)
  • pids (since Linux 4.5)
  • perf_event (since Linux 4.11)
  • rdma (since Linux 4.11)
  • cpu (since Linux 4.15)

5. subtree control

在hierarchy下的每一個(gè)Cgroup中都會(huì)包含如下兩個(gè)文件

  • cgroup.controllers:這是一個(gè)read-only文件。包含了該Cgroup下所有可用的controllers.
  • cgroup.subtree_control:這個(gè)文件中包含了該Cgroup下已經(jīng)被開(kāi)啟的controllers。 并且cgroup.subtree_control中包含的controllers是cgroup.controllers文件controller的子集。

cgroup.subtree_control文件內(nèi)容格式如下,controller之間使用空格間隔,前面用”+”表示啟用,使用”-“表示停用。比如下面的例子:

  1. echo '+pids -memory' > x/y/cgroup.subtree_control 

Cgroups v2的具體組織結(jié)構(gòu)如下圖所示:

6. "no internal processes" rule

與Cgroups v1不同, Cgroups v2只能將進(jìn)程綁定到葉子節(jié)點(diǎn)。因此不能綁定進(jìn)程到任何一個(gè)已開(kāi)啟controller的任何subgroup中。

7. cgroup.events file

在Cgroups v2的實(shí)現(xiàn)中,也對(duì)獲取group empty時(shí)獲取通知的機(jī)制進(jìn)行了優(yōu)化。

Cgroups v1使用release_agent和notify_on_release在v2中被移除。替代的是使用了cgroup.events文件。這是一個(gè)只讀的文件,每行一個(gè)key value對(duì),key和value之間通過(guò)空格分割。

當(dāng)前在這個(gè)文件中只含有一個(gè)key就是populated,對(duì)應(yīng)的value是0。0表示cgroup中沒(méi)有process,1表示cgroup中包含process。

8. cgroup.stat file

在Cgroups v2 hierarchy下的每個(gè)group都會(huì)包含一個(gè)只讀文件cgroup.stat。它的內(nèi)容也是key-value的形式。當(dāng)前這個(gè)文件中包含如下兩個(gè)key:

  • nr_descendants:表示cgroup中存活的subgroup的數(shù)量
  • nr_dying_descendants:表示cgroup中已經(jīng)死亡的cgroup的數(shù)量

9. 后代Cgroups數(shù)量限制

在Cgroups v2 hierarchy中還包含了兩個(gè)用于查看和設(shè)置該Cgroups下的后代Cgroups數(shù)量的限制文件:

  • cgroup.max.depth (since Linux 4.14):這個(gè)文件定義子cgroup的***深度。0意味著不能創(chuàng)建cgroup。如果嘗試創(chuàng)建cgroup,會(huì)報(bào)EAGAIN錯(cuò)誤;max表示沒(méi)有限制,默認(rèn)值是max。
  • cgroup.max.descendants (since Linux 4.14):當(dāng)前可以創(chuàng)建的活躍cgroup目錄的***數(shù)量,默認(rèn)值”max”表示不限制。超過(guò)限制,返回EAGAIN。

【本文是51CTO專欄機(jī)構(gòu)360技術(shù)的原創(chuàng)文章,微信公眾號(hào)“360技術(shù)( id: qihoo_tech)”】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來(lái)源: 51CTO專欄
相關(guān)推薦

2019-05-22 10:43:16

Cgroups容器監(jiān)控

2017-07-25 12:40:42

iOSCrash僵尸對(duì)象

2010-05-26 14:42:54

桌面虛擬化

2021-01-29 18:09:05

DockerCgroupsLinux

2009-09-21 17:17:11

Hibernate二級(jí)

2014-03-14 13:32:52

cgroupsLinux容器

2020-10-15 14:10:51

網(wǎng)絡(luò)攻擊溯源

2012-10-09 13:53:33

大型網(wǎng)站算法架構(gòu)

2021-08-18 10:39:13

Ubuntu 21.1Linux 內(nèi)核開(kāi)發(fā)人員

2023-12-26 00:55:51

資源隔離CPU

2016-09-26 17:09:28

Java并發(fā)編程內(nèi)存模型

2011-06-13 12:11:06

javasocket

2016-08-22 19:40:03

2024-08-28 08:48:20

Linux資源隔離

2014-12-01 13:44:03

cgroupscpulimitlinux

2015-06-05 10:08:27

CgroupsIaaSPaaS

2021-09-15 11:38:36

Hashmap二次算法列表

2021-09-15 15:50:46

hashmap算法軟件開(kāi)發(fā)

2009-06-08 15:14:54

CMDB運(yùn)維管理摩卡

2021-09-09 15:18:46

英國(guó)網(wǎng)絡(luò)安全
點(diǎn)贊
收藏

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