当前位置: 首页 > news >正文

成都网站开发价格企业网站管理系统破解版

成都网站开发价格,企业网站管理系统破解版,乐都企业网站建设哪家快,中文域名网站简介#xff1a; io_uring 作为一种新型高性能异步编程框架#xff0c;代表着 Linux 内核未来的方向#xff0c;当前仍处于快速发展中。阿里云联合 InfoQ 发起《io_uring 介绍及应用实践》的技术公开课#xff0c;围绕 OpenAnolis 龙蜥社区 Anolis OS 8 全方位解析高性能存…简介 io_uring 作为一种新型高性能异步编程框架代表着 Linux 内核未来的方向当前仍处于快速发展中。阿里云联合 InfoQ 发起《io_uring 介绍及应用实践》的技术公开课围绕 OpenAnolis 龙蜥社区 Anolis OS 8 全方位解析高性能存储场景。 写在前面 cgroup 作为容器底层技术的半壁江山很多文章已经介绍并总结得很好了关于 cgroup 是什么、有什么用以及一些相关概念这些内容并不是本文的重点所以也将不再赘述。 友情提醒以下内容默认读者已经初步了解 task、cgroup、subsys、hierarchy 是什么及它们之间的关系。 我们为啥关注 cgroup 控制平面性能 云原生目前是云计算领域的重点发展方向其中的函数计算场景中函数执行的速度是重要的性能指标要求能够快速、高并发地创建和销毁实例。在此场景下的隔离特性普遍都会涉及到大量 cgroup 的相关操作而现有的cgroup框架设计并发性很差或许在设计之初并未考虑到大规模的控制平面操作例如创建和销毁。而随着技术的演进大规模的控制平面操作场景逐渐增多也促使我们开始更加关注控制平面的性能。 本文的阐述是基于4.19版本的内核源代码旨在分析cgroup提供给用户的接口背后的实现原理并基于实现原理给出一些用户态使用cgroup的建议最后在文章的结尾分享了一些内核态优化的思路。 原理分析 图一 图二 以上两张图是4.19版本的内核中cgroup中最主要的几个数据结构之间的连接关系和cgroup层次结构的连接关系。 cgroup字面意思 cgroup_roothierarchy cgroup_subsys: 子系统缩写的变量一般为ss cgroup_subsys_state: 当指向某个subsys时代表该subsys在某个cgroup中一个实体 css_set、cset_cgrp_link用于建立task_struct和cgroup之间多对多的关系 这些数据结构抽象之后是这张图 图三 其实也很好理解本质上cgroup框架要解决的是一个cgroup管哪些task一个task归哪些cgroup管的问题在实现上可通过cset作为中介来建立这层关系。相比于task和cgroup直连这种做法可以简化复杂的关系。这是因为在实际使用的场景中task基本都以组为单位进行管理对某一组task的资源管控方案都大概率是一致的。 对于cgroup的各类操作围绕着这三类实体展开 创建在图二所示的树形结构中增加一个叶节点绑定本质上是迁移子进程被fork出来时连接父进程指向的cset绑定即是从一个cset如果不再有task指向则删除迁移到了另一个cset如果指向的是新的cgroup集合则新创建删除在图二所示的树形结构中删除一个不管控任何task的叶节点 对于cgroup的各类操作的访问控制也围绕这三类实体的展开 task: cgroup_threadgroup_rwsem锁cset: css_set_lock锁cgroup: cgroup_mutex锁 具体的这三类锁有什么作用将在优化思路里进行分析。 优化方案 问题出在哪 问题在于三个锁上cgroup_mutex、cgroup_threadgroup_rwsem、css_set_lock。 cgroup_mutex保护cgroup的整个层级结构。cgroup的层级结构是一个森林我们需要用这个一个锁来保护整个森林。改变层级结构比如常见的mount、mkdir、rmdir就不必多说了肯定是需要持有这个锁的除此之外对cgroup的任何一个其他的操作也需要持有这个锁比如attach task、以及其他的读或写cgroup提供的接口。同时因为rmdir的操作是随时都有可能发生的任何操作都需要与rmdir都互斥。 css_set_lock保护和css_set相关的一切操作。任意进程随时都有可能exit导致某个css_set释放从而影响css_set的哈希表。除此之外对cgroup的绝大多数的操作也会涉及到css_set_lock这是因为对cgroup的绝大多数的操作创建除外都会引起css_set的变化。 cgroup_threadgroup_rwsem保护和cgroup相关的线程组操作现实中随时都有可能的fork和exit操作导致线程组发生变化。这里用读写锁的原因是进程自身的行为可能包括改变线程组的组成和持有读锁这是可以并行的当进程attach的时候需要一个稳定的线程组视图此时如果进程在fork或者exit的话会导致线程组的改变而attach又是可以以线程组为单位的不可并行。这里用读写锁并不是说是真的在读什么或写什么只是恰好符合读者并行写者需与其他写者互斥这个特性而已。也就是说fork、exec、exit之间可以并行类似于读者attach与其他的都互斥类似于写者。 这三个锁会受到进程fork和exit的影响并且也会导致对cgroup的任何操作之间几乎不可并行。笔者在对cgroup进行深入的研究前觉得是最开始的设计者偷懒使用如此大粒度的锁直到把cgroup的框架摸索明白后才发现临界区就是有这么大各种会异步发生的事件都需要操作这些数据所以这些锁被设计成这样也很合理。 这里试着对问题进行抽象思考一下问题的本质在哪。 对于cgroup_mutex问题本质是树形节点是cgroup结构的并发访问。 对于css_set_lock问题其实是二部图一边是css_set一边是cgroup结构的并发访问。 对于cgroup_threadgroup_rwsem问题其实是集合线程组作为集合的元素结构的并发访问。 问题的定义已经清楚了怎么解决呢以我目前的能力我没法解。 是的分析了这么多给的结论是此题无解或者说暂时无解可以有的解法也会对cgroup的框架造成刮骨疗毒式的改动。这背后的风险、稳定性的影响、投入产出比的痛能不能承受的住我给不出一个确定的结论。如果读者有什么想法欢迎在留言区提出一起交流。 虽然治本难治但治标还是可以有点想法的。 用户态优化减少cgroup操作 这个方案很好理解提前把cgroup创建和配置好等需要用的时候直接取就行。这个方案效果极好简直是降维打击。这里贴一下实验数据这里的测试模拟袋鼠容器启动时的创建与读写—— 线程数循环次数优化后时间/s优化前时间/s120000.092.18102000.081.7840500.121.89200100.142.22 这个方案达到了90%以上的优化率将本来需要创建配置后attach进程最后删除的情况变成了只需要attach工作量少了自然也就变快了。 但这个方案存在一些弊端。一方面池子里不用的cgroup对于系统来讲依然是可见的需要进行管理因此会存在一定的负载另一方面是数据残留问题并不是所有的subsys都提供类似于clear的操作接口如果对监控数据有要求的话cgroup就是用一次就废需要对池子进行补充增加控制逻辑的同时又出现了竞争效果会打折扣。最后便是需要明确cgroup的层次结构毕竟要提前创建和配置如果对运行时的层次结构无法掌控的话池子都没法建立。 减少cgroup数量 systemd在默认情况下会把大多数subsys都挂在独立的一个hierarchy下如果业务的进程都需要受同一些subsys管控的话可以把这些subsys都挂载在同一个hierarchy下比如把cpu、memory、blkio挂载在一起。 这时候可能有同学要问了原本在cpu、memory、blkio下各创建一个cgroup和在cpu_memory_blkio下创建一个cgroup能有多少区别该有的逻辑都得有一个都跑不了最多就是少了几个cgroup自身这个结构体能有多少区别 这里要回归到最开始的场景cgroup的问题出在场景是高并发而本质上各类操作却是串行的。我们知道衡量性能有主要的两个维度吞吐和延迟。cgroup本质的串行无法直接提高吞吐各个subsys独立在hierarchy下等于是被拆解成子任务反而提高了延迟。 下面是测试数据 线程数循环次数优化后时间/s优化前时间/s120000.992.18102000.891.7840500.981.89200101.002.22 内核态优化 对上述三把锁动不了只能对临界区内的那部分内容下手了。想要缩小临界区那就需要找出临界区内耗时的部分进行优化。 下图是各个子系统创建cgroup时各个部分的耗时 这里简单解释下各个部分做了些什么 cgroup创建和初始化cgroup结构体kernfs创建cgroup的目录populoate创建cgroup控制用的文件接口cssalloc分配csscssonlinecss在各个子系统中的online逻辑csspopulate创建子系统控制用的文件接口 从图中可以发现cpu、cpuacct、memory的耗时相对于其他的子系统延迟高很多其中css alloc和css populate占大头。下面我们将研究一下这个“主要矛盾“究竟在做些什么。 通过分析我们发现css alloc上延迟高是因为给一些percpu的成员分配内存这一过程比较耗时。css populate上是因为部分子系统的接口文件比较多需要依次一个个地创建从而消耗更多的时间。 分析过后发现这些逻辑都是必须没有冗余怎么优化做缓存呗。percpu成员变量记录下地址不释放下次重复使用子系统接口文件在释放时以文件夹为单位移到一个指定的地方需要时再移回来只涉及目录文件上一个目录项的读写开销低且是常数。 通过两种方式各个创建cgroup的延时优化结果如下 cpu子系统css alloc部分依然比较耗时的原因在于初始化操作比较多但相比于原先的160us延时已经降到了50us。 缩小临界区后虽然并不能对并发度有什么影响但至少延迟降下来了下面是测试数据。 t个线程并发每个线程在cpu、cpuacct、cpuset、memory、blkio下创建n个cgroup tn使用缓存平均时间不使用缓存平均时间优化率201000.23s0.71s67.6%2010002.66s8.12s67.3%200100.18s0.54s66.7%2001002.00s7.30s72.4%tn使用缓存长尾时间不使用缓存长尾时间优化率201000.29s0.88s67.1%2010003.25s9.37s65.3%200100.32s0.94s66.0%2001003.40s9.53s64.3% 一些假想 如果无视各种限制因素抛弃现有的框架不考虑向下兼容实现一个用于管控进程资源且支持高并发的框架可以怎么设计 现在cgroup的机制提供了相当高的灵活性子系统之间的关系可以随意绑定task可以随意绑在任意一个cgroup上如果牺牲一下这些灵活性对问题的解释是不是就可以变得简单点下面谈谈我的几个想法。 第一前文提到的为了减少cgroup数量把所有的子系统都绑定在一起的想法是否可以固化在内核当中或者说不提供子系统独立挂载和绑定挂载的特性这样进程组与cgroup变成了一一对应的关系cset就没有了存在的意义css_set_lock带来的问题也不攻自破。但是对应的弊端是一个进程组内的所有进程在每个子系统上资源控制都是一致的。 第二cgroup层级结构是否有存在的必要现在cgroup以树形结构组织确实在逻辑上更加符合现实。比如在第一层给业务分配总资源在第二层给业务的各个组件分配资源。但在操作系统分配资源的视角上以及业务进程具体获得资源的视角上第一层的存在并没什么作用只是给用户提供了逻辑更清晰的运维管理。如果把cgroup v2提出的no internal process特性也应用上可以把cgroup层级扁平化到只有一层。 cgroup只有一层的好处是可以很方便地把cgroup_mutex粒度细化细化到每个cgroup一把锁不会存在好几层的树形结构——改动一个cgroup需要从祖先开始持锁的问题。锁的粒度细化后在并发启动容器实例的时候因为对应不同的cgroup也就不会存在竞争的问题。 第三cgroup的删除能否加以限制现在是用户异步手动删除空的cgroup如果可以在cgroup不再管理进程exitmove时隐藏后续找个时机触发删除便可以少一个竞争场景。这种方法会造成空的cgroup没法再利用现在有对空cgroup再利用的需求吗 最后绑定进程能否加以限制task绑定cgroup的本质是移动从一个cgroup到另一个cgroup。cgroup_mutex粒度细化后会存在ABBA的死锁问题。有一个问题是task存在绑定到一个cgroup后再绑定的需求吗理想情况是绑定一个后顺利运行然后退出。基于这种假设就可以做一个限制只允许task在绑定时src与dst内必须包含default cgroup、default cgroup起一个跳板作用。 上面这些都是我一些不成熟的想法欢迎讨论。 原文链接 本文为阿里云原创内容未经允许不得转载。
http://www.pierceye.com/news/808745/

相关文章:

  • 竞价网站单页网页设计师中级证书有用吗
  • 做网站 简单外包wordpress 插件api
  • 白城网站seo新手怎么建立自己网站
  • 建立用模板建立网站wordpress feed
  • 株洲品牌网站建设优质的杭州网站优化
  • 网站开发在哪个科目核算网站平台怎么做的好处
  • 网站底部模板代码江苏建站系统
  • 写出网站开发的基本流程品牌建设网站
  • 河北省建设机械协会网站双减之下托管班合法吗
  • 江门市城乡建设局网站阿里云万网域名购买
  • 网站推广技术哪家好专业网站开发建设
  • 义乌营销型网站建设淘宝做动图网站
  • dedecms能做什么网站素材网站怎么做
  • 一流导航设计网站wordpress 七牛 插件
  • 新开元电销系统济南网站优化技术厂家
  • 有名的网站建设wordpress安装到主机
  • 网站建设的指导思想p2p金融网站建设
  • 可在哪些网站做链接郑州展厅设计公司
  • 怎么可以黑网站域名做网页的心得体会
  • 设计素材免费下载网站做广告牌子
  • 名师工作室网站建设 意义常州网站建设专业的公司
  • 中国建设银行官网站预定红念币天元建设集团有限公司地址
  • wix做网站教程网站建设 销售提成
  • 长安网站建设费用开天猫旗舰店网站建设
  • 网页游戏网站哪个最好专业建站公司建站系统该规划哪些内容
  • 青岛网站建设公司大全在那些网站上做企业宣传好
  • 天河定制型网站建设中国科技成就的例子
  • 网站报备查询android安卓软件下载
  • 百度站长平台网站验证wordpress关闭略缩图
  • 网站怎么做qq微信登陆界面设计的有趣的网站推荐