?

浅谈Cgroups(二)

上一篇文章《浅谈Cgroups》对cgroup v1进行了介绍,但是由于当前k8s使用cephfs进行数据存储,当多租户使用时,需要对IO进行限制。当前cgroup v1由于memcg与blkio没有协作,导致buffer io的throttle一直没有实现。并且cgroup v1在内核的实现一直比较混乱,其中主要的原因在于,cgroup为了提供灵活性,允许进程可以属于多个hierarchy的不同的group。但实际上,多个hierarchy并没有太大的用处,因为控制器(controller)只能属于一个hierarchy。 所以在实际使用中,通常是每个hierarchy一个控制器。

这种多hierarchy除了增加代码的复杂度和理解困难外,并没有太大的用处。一方面,跟踪进程所有controller变得复杂;另外,各个controller之间也很难协同工作(因为controller可能属于不同的hierarchy, 所以从3.16开始,内核开始转向单一层次(unified hierarchy)。并且实现了对buffer io的限制。

2. Cgroups v2的变化

由于Cgroups v1存在的种种问题,Cgroups v2将多hierarchy的方式变成了unified hierarchy,并将所有的controller挂载到一个unified hierarchy。

当前kernel没有移除Cgroups v1版本,允许Cgroups v1和v2两个版本共存。但是相同的controller不能同时mount到这两个不同的Cgroup版本中。

以下是Cgroups v2的五点改进:

Cgroups v2 中所有的controller都会被挂载到一个unified hierarchy下,不在存在像v1中允许不同的controller挂载到不同的hierarchy的情况

Proess只能绑定到cgroup的根(“/“)目录和cgroup目录树中的叶子节点

通过cgroup.controllers和cgroup.subtree_control指定哪些controller可以被使用

v1版本中的task文件和cpuset controller中的cgroup.clone_children文件被移除

当cgroup为空时的通知机制得到改进,通过cgroup.events文件通知

3. unified hierarchy

在Cgroups v1允许将不同的controller挂载到不同的hierarchies虽然很灵活,但实际上这种方式对于使用者来说是没有必要的。因此在Cgroups v2版本中,将所有的controller都挂载到一个hierarchies。

可以使用下面命令将Cgroups v2挂载到文件系统,并且所有可用的controller会自动被挂载进去。

mount -t cgroup2 none $MOUNT_POINT 

一个contoller无法在Cgroups v1和v2中同时使用,如果想在Cgroups v2使用已经被Cgroups v1使用的controller,则需要先将其从Cgroups v1中umount掉。

要注意的是,系统启动时,systemd默认使用Cgroups v1,并将可以使用的controller mount到/sys/fs/cgroup。如果想在系统启动时,把Cgroups v1关掉,可以在/etc/default/grub文件下修改kernel参数,增加GRUB_CMDLINE_LINUX_DEFAULT="cgroup_no_v1=all"。(all表示关闭所有的controller,如果想关闭指定的controller,则将all替换成你需要的controller名称,并已逗号分隔即可)。这样就可以在Cgroups v2中使用你想要的controller了。

4. controllers

当前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下的每一个Cgroup中都会包含如下两个文件

cgroup.controllers:这是一个read-only文件。包含了该Cgroup下所有可用的controllers.

cgroup.subtree_control:这个文件中包含了该Cgroup下已经被开启的controllers。 并且cgroup.subtree_control中包含的controllers是cgroup.controllers文件controller的子集。

cgroup.subtree_control文件内容格式如下,controller之间使用空格间隔,前面用”+”表示启用,使用”-“表示停用。比如下面的例子:

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

Cgroups v2的具体组织结构如下图所示:

浅谈Cgroups(二)

6. "no internal processes" rule

与Cgroups v1不同, Cgroups v2只能将进程绑定到叶子节点。因此不能绑定进程到任何一个已开启controller的任何subgroup中。

浅谈Cgroups(二)

7. cgroup.events file

在Cgroups v2的实现中,也对获取group empty时获取通知的机制进行了优化。

Cgroups v1使用release_agent和notify_on_release在v2中被移除。替代的是使用了cgroup.events文件。这是一个只读的文件,每行一个key value对,key和value之间通过空格分割。

当前在这个文件中只含有一个key就是populated,对应的value是0。0表示cgroup中没有process,1表示cgroup中包含process。

8. cgroup.stat file

在Cgroups v2 hierarchy下的每个group都会包含一个只读文件cgroup.stat。它的内容也是key-value的形式。当前这个文件中包含如下两个key:

nr_descendants:表示cgroup中存活的subgroup的数量

nr_dying_descendants:表示cgroup中已经死亡的cgroup的数量

9. 后代Cgroups数量限制

在Cgroups v2 hierarchy中还包含了两个用于查看和设置该Cgroups下的后代Cgroups数量的限制文件:

相关推荐
新闻聚焦
猜你喜欢
热门推荐
  • 微软AI面试题有多难?这里有一份样卷

      究竟什么样的AI人才能被微软这样的巨头聘用呢?今天,文摘君就淘来了几道微软AI 面试题,同时给出了最基本的解答......

    06-25????来源:澎湃新闻网

    分享
  • 全球最聪明的大脑怎么看AI?他们预测了

      2017年AI领域取得了诸多成果。2018年AI又将何去何从?以下是来自世界顶级研究人员和行业领军人物对2018年AI领域发展作......

    02-20????来源:虎嗅网

    分享
  • 2017JavaScript框架战报 - React分战场

      我们来看看与React有关的软件包的生态系统。当Facebook构建React时,就有许多来自开源社区的第三方软件包。为提供完......

    02-27????来源:湖北新闻网

    分享
  • 小白学数据:教你用Python实现简单监督学

      监督学习作为运用最广泛的机器学习方法,一直以来都是从数据挖掘信息的重要手段。即便是在无监督学习兴起的近......

    03-05????来源:今日头条

    分享
  • 现代编程语言Swift、Kotlin等十大有趣功能

      最近学习了一些现代编程语言,比如Reason,Swift,Kotlin和Dart。这些编程语言提供了许多新功能,本文主要分享了我认......

    04-29????来源:祁东新闻网

    分享
  • 领域场景分析的6W模型

      组成场景的要素常常被称之为6W模型,即描写场景的过程必须包含Who,What,Why,Where,When与hoW这六个要素。......

    04-30????来源:砍柴网

    分享
  • 开源应用服务器WildFly 12发新季度交付模式

      WildFly 12 Final版本现在已经可以下载了,WildFly是一款灵活的开源应用服务器,支持开发人员构建轻量级应用程序。支持......

    05-10????来源:青岛新闻网

    分享
  • 基于Spring Cloud的微服务落地

      微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,......

    06-04????来源:广西新闻网

    分享
  • 为什么阿里工程师纷纷在内网晒代码?

      前阵子,在阿里一个小黑屋里,5名对代码有着极致追求的工程师参与阿里代码领域最高荣誉“多隆奖”的最终角逐。......

    06-08????来源:四川新闻网

    分享
  • 超级大汇总!200多个最好的机器学习、

      我把这篇文章分为了四个部分:机器学习,自然语言处理,python和数学。在每个部分中我都列举了一些主题,但是因......

    09-25????来源:洛阳新闻网

    分享
返回列表
Ctrl+D?将本页面保存为书签,全面了解最新资讯,方便快捷。