Cgroups原理及其在CephFS io限流上的应用

栏目: 服务器 · 发布时间: 5年前

内容简介:Cgroups的全称是Control Groups,它是Linux内核提供的一种能够对cpu,内存等资源实现精细化控制的机制。本文介绍了它的原理以及其在CephFS io限流上的应用。“Control Groups”的主要功能是将线程及其子线程分为多个组,以便对他们进行分别控制。其具体工作包括:每个control group关联一个cgroup subsystem(controller)。每个subsystem用于控制某项特殊的资源(如可以被调度的cpu核,内存使用总量等),subsystem之间可以存在依

Cgroups的全称是Control Groups,它是 Linux 内核提供的一种能够对cpu,内存等资源实现精细化控制的机制。本文介绍了它的原理以及其在CephFS io限流上的应用。

一、Cgroups架构

“Control Groups”的主要功能是将线程及其子线程分为多个组,以便对他们进行分别控制。其具体工作包括:

  • 将线程分组
  • 为用户提供控制每组线程的操作接口(/sys/fs文件)

每个control group关联一个cgroup subsystem(controller)。每个subsystem用于控制某项特殊的资源(如可以被调度的cpu核,内存使用总量等),subsystem之间可以存在依赖关系。目前linux默认会加载的subsystem包括:blkio、cpu、cpuacct、cpuset、devices、freezer、hugetlb、memory、net_cls、net_cls,net_prio、net_prio、perf_event、pids、systemd。

Cgroups原理及其在CephFS io限流上的应用

如上图所示,在内核中,cgroup会为每个/sys/fs/cgroup下的子目录(subsystem对应目录除外)创建一个css(cgroup_subsys_state)结构,该结构用于关联该目录对应的cgroup结构和所属的subsystem。每个内核线程的task结构中应一个css_set域,可以通过获取其中的css结构,获得其所属的control group信息。

Cgroup的代码实现大致可分为三部分:

  • 在系统启动时(start_kernel), 初始化cgroup_root,init_css_set(init线程的css_set), 各个subsystem;将cgroup_root挂载至/sys/fs/cgroup
  • 在线程fork时, 将父线程的css_set赋予子线程, 即:子线程继承父线程的css_set
  • 根据各subsystem需求,创建/sys/fs下的subsystem控制接口文件,用户可以通过向这些文件写入数据实现对某个control group的控制,也可通过读取相应文件,获得当前该control group的状态。

二、添加cgroup subsystem/controller

添加一个子系统需要完成以下工作:

(1) 实现一组cgroup要求subsystem实现的api(如下图所示),其中css_alloc和css_free是强制要求实现的,其余均可选;css_alloc用于分配cgroup_subsys_state结构所需的内存,用户可在该函数里初始化自己的subsystem,css_free用于卸载该subsystem时回收相应内存

Cgroups原理及其在CephFS io限流上的应用

(2) 每个子系统拥有一个独立的自定义name,每个子系统需要定义一个struct cgroup_subsys类型的全局变量,该变量名为 _cgrp_subsys;将上面实现的cgroup subsystem api赋予该变量相应的域

(3) 在 inclue/linux/cgroup_subsys.h里,添加属下entry:

#if IS_ENABLED(CONFIG_CGROUP_XXX) 
SUBSYS(<name>) 
#endif 

三、实现cephfs客户端io限流

Cephfs客户端限流的目标:限制cephfs内核客户端元数据/数据操作速率(ops/byte per second)。目前我们采用的限流算法是令牌桶算法。

实现步骤如下:

(1) 添加include/linux/cgroup_cephfs.h头文件,定义cephfscg结构,其中包含cgroup_subsys_state域;同时定义其他所需类型(如令牌桶限流阀token_bucket_throttle)

Cgroups原理及其在CephFS io限流上的应用

(2) 实现cgroup cephfs subsystem

  • 实现css_alloc和css_free函数
  • Cgroups原理及其在CephFS io限流上的应用

  • 定义cephfs subsystem的接口文件,其中meta_ops和data_ops用于设置元数据操作和数据操作令牌桶的更新周期,meta_ops.iops和data_ops.iops用于设置元数据/数据操作的iops限制,data_ops.band用于设置数据操作的吞吐量限制;除定位文件外,还需要设置这些文件的读写处理函数,这里所有读写操作均由cephfscg_set_throttle_params和cephfscg_throttle_params_read完成;
  • Cgroups原理及其在CephFS io限流上的应用

  • 定义cephfs_cgrp_subsys变量
  • Cgroups原理及其在CephFS io限流上的应用

  • 在Include/linux/cgroup_subsys.h增加相应的entry
  • Cgroups原理及其在CephFS io限流上的应用

    (3) 在cephfs文件操作执行路径上增加相应的控制操作(获取当前task的css结构,并调用其对应的限流接口)

    Cgroups原理及其在CephFS io限流上的应用

    本文介绍了cgroups架构以及添加子系统的方法,并通过cgroups在cephfs中的应用,进一步展示了cgroups精细化控制能力。希望通过整篇文章的介绍,读者能够大致了解cgroups的功能。

    【本文是51CTO专栏机构360技术的原创文章,微信公众号“360技术( id: qihoo_tech)”】

    Cgroups原理及其在CephFS io限流上的应用

    戳这里,看该作者更多好文


    以上所述就是小编给大家介绍的《Cgroups原理及其在CephFS io限流上的应用》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

    查看所有标签

    猜你喜欢:

    本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

    大连接

    大连接

    [美] 尼古拉斯•克里斯塔基斯(Nicholas A. Christakis)、[美] 詹姆斯•富勒(James H. Fowler) / 简学 / 中国人民大学出版社 / 2013-1 / 59.90元

    [内容简介] 1. 本书是继《六度分隔》之后,社会科学领域最重要的作品。作者发现:相距三度之内是强连接,强连接可以引发行为;相聚超过三度是弱连接,弱连接只能传递信息。 2. 本书讲述了社会网络是如何形成的以及对人类现实行为的影响,如对人类的情绪、亲密关系、健康、经济的运行和政治的影响等,并特别指出,三度影响力(即朋友的朋友的朋友也能影响到你)是社会化网络的强连接原则,决定着社会化网络的......一起来看看 《大连接》 这本书的介绍吧!

    HTML 压缩/解压工具
    HTML 压缩/解压工具

    在线压缩/解压 HTML 代码

    XML 在线格式化
    XML 在线格式化

    在线 XML 格式化压缩工具

    html转js在线工具
    html转js在线工具

    html转js在线工具