长文解析:作为容器底层技术的半壁江山, cgroup如何突破并发创建瓶颈?

简介: io_uring 作为一种新型高性能异步编程框架,代表着 Linux 内核未来的方向,当前仍处于快速发展中。阿里云联合 InfoQ 发起《io_uring 介绍及应用实践》的技术公开课,围绕 OpenAnolis 龙蜥社区 Anolis OS 8 全方位解析高性能存储场景。

IMG_2018.jpeg

写在前面

cgroup 作为容器底层技术的半壁江山,很多文章已经介绍并总结得很好了,关于 cgroup 是什么、有什么用以及一些相关概念,这些内容并不是本文的重点所以也将不再赘述。

友情提醒:以下内容默认读者已经初步了解 task、cgroup、subsys、hierarchy 是什么及它们之间的关系。

我们为啥关注 cgroup 控制平面性能?

云原生目前是云计算领域的重点发展方向,其中的函数计算场景中,函数执行的速度是重要的性能指标,要求能够快速、高并发地创建和销毁实例。在此场景下的隔离特性普遍都会涉及到大量 cgroup 的相关操作,而现有的cgroup框架设计并发性很差,或许在设计之初并未考虑到大规模的控制平面操作(例如:创建和销毁)。而随着技术的演进,大规模的控制平面操作场景逐渐增多,也促使我们开始更加关注控制平面的性能。

本文的阐述是基于4.19版本的内核源代码,旨在分析cgroup提供给用户的接口背后的实现原理,并基于实现原理给出一些用户态使用cgroup的建议,最后在文章的结尾分享了一些内核态优化的思路。

原理分析

IMG_2019.png

图一

IMG_2020.png

图二

以上两张图,是4.19版本的内核中cgroup中最主要的几个数据结构之间的连接关系和cgroup层次结构的连接关系。

cgroup:字面意思

cgroup_root:hierarchy

cgroup_subsys: 子系统,缩写的变量一般为ss

cgroup_subsys_state: 当指向某个subsys时,代表该subsys在某个cgroup中一个实体

css_set、cset_cgrp_link:用于建立task_struct和cgroup之间多对多的关系

这些数据结构抽象之后是这张图:

IMG_2021.png

图三

其实也很好理解,本质上cgroup框架要解决的是:一个cgroup管哪些task,一个task归哪些cgroup管的问题,在实现上可通过cset作为中介来建立这层关系。相比于task和cgroup直连,这种

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值