我看时间到了 我就先开始 大家下午好我是文后港是快手的一个是快手的一个优秀员工然后我今天就给大家介绍一下快手在资源阁离和干扰检测方面的工作首先我介绍一下我们做这个事情的背景我们在做部署密组的提升也就是我们要达到一个农群集群资源利用力提升的目标在这个过程中我们会发现因为随着应用部署密组的情况然后我这个资源之间的增强不断加剧我们的在线实力装向率已经达到了80%以上然后离线的CPU整机抽取一直已经达到了70%这个的意思是指我们容许这个单击的在混布的情况下CPU峰值达到70%的CPU利用力然后这个资源增强就有CPU内层还有各种硬件方面的增强会变得十分激烈然后会导致各种问题主要是发现是业务可能性降低具体的性能指标方面是指这种接口的想要延迟它的提升以及接口甚至直接爆错最简单的解决方式其实就是在当作物理使用把当作单一个应用独占一开机器那样进成之间直接独享物理资源但这样的话会导致物理资源的使用力降低也就是失去的使用使用云混布的意义但是我们也发现我们首先缺乏一些基础的能力就是首先是我们单机干擾方面就没有可观测的能力缺乏衡量这种增强程度的标准以及也没有系统化的干擾观测的能力我们没法做到问题提前发现因为我没有奉行预检精致然后问题发现以后其实主要依赖业务反馈然后最后再导致姐姐问题的耗时以及协作的链路都比较长然后这里提前把问题先简单总结一下以及我们的解决方式是主要是三个方面首先是资源分配的精细化这部分我们主要是从现代机器都开启NUMA这个特性我们是从这个方面做出针对NUMA的这些NUMA的架构然后做了一些的NUMA清合在资源分配的时候都做到了NUMA感知然后从而达到了一定程度的增强的环节第二点是主要是内核隔离方面的硬件能力也是接着内核实现了许多硬件能力的隔离包括CPU内层网络审处这些常见的硬件最后一个是建立了我们之前缺乏的干擾监测能力主要是基于两个性能指标第一个是服务箱延迟还有一个是CPU这个CPU其实就是我们更常用的IPC的一个倒数首先介绍一下我们的NUMA清合我们都知道KVS原生的话它只有绑合得破的它会感应NUMA的架构脱补管理器其实它是脱补管理器它对CPU它对它脱管给CPU面对让它提供脱补HINT的时候它只会但最终应用它只会在绑合的绑合的容器上应用结果绑合的容器最后能够享受到这个NUMANUMA结构结果带来一些带来一些优化就是它做到单NUMA隔离以后在资源的利用方面能够性能能够不受到跨NUMA访存的影响或者跨NUMA访问一些PCI-Z设备带的性能访号它也能够免除但其实我们都知道绑合它会带对资源利用力的提升是不利的我们内部也是也是在降级绑合的比例所以大部分的应用没有享受这个社会大部分的情况下我们都是一些科斯卡拉斯是Bossboard的它在想像是这个情况就是它是它是跨NUMA两个NUMA上的核它都能使用就会有很多跨NUMA房内存或者跨NUMA房PCI-Z设备自己PCI-Z设备可以简单利用主要是GPU吧然后我们的我们的架构其实就是我们所做的就是让Bossboard的POD也能感也在在调度分配资源的时候也感应NUMA的架构尽力做到一个POD只在一个NUMA内使用资源我们所做的包括CPUNUMA清合内存NUMA清合还有PCI-ZNUMA清合方面其实最主要的还是CPUNUMA清合内存NUMA清合我们都知道会引入很多OM的风险其实这部分能做的工作有限最终我们也是只在榜核上面运用在CPUNUMA清合方面我们主要是定义了6个侧链然后这里的侧链是从按服务的优先级从高优到最低优这样来排列的然后它适合的运用其实也是根据这个服务的特性以及它在我们内部的优先级来定义的它跟榜核也有一定的关联然后最高优的其实是一些如果它不稳定会带来自身的一些运用就跟金钱相关的它的敏感度极高而且业务也强制要求他们希望独占CPU资源他们也确实有这个资格他们不会有其他一POD的共享核心而且他们在这类业务之中他们的服务先级是最高的然后他们会独占榜核并且强制要求一定CPU拥挖情歌成功也就是他们使用的CPU一定在一个拥挖内第二种是其实是一个比较特殊的场景是业务他们提供一种主动裂画的情况虽然他们都属于一个很高约的业务但是在这个业务内部服务也有一线级之分他们会对优先级比较低的服务希望他们主动浪出资源来确保那些高优的服务在高优与低优混合部署的情况下高优总能拥挖情歌成功而不需要他们去加机系这就是第二种这种军营分配的策略是他去绑合的时候他肯定会在一个每个拥挖之间军营的去取部分合第三种是是刺高优的刺高优的服务他就允许一定的拥挖情歌失败他也是优先级较高的但并不需要并不需要去强制拥挖情歌成功因为其实强制拥挖情歌会带来一些资源方面的问题就有可能原先的资源原先资源不够需要加机系后面还有三种是针对波斯伯伯的就是广泛的我们一些更普通的营用更普通的业务他们大部分都不是绑合的是混不在我们广大的公共资源池家庭里面的其中这部分服务里面他们最高约的服务他也是要独占拥挖独立使用一个拥挖的就是他一定拥挖情歌成功不会使用另一个拥挖的资源尽量减少跨拥挖访存的问题然后第二种禁力型它跟上面所说的禁力型一样其实区别就只是它不会去绑合还有最后一种普通型这个定义放在这里其实就是跟原生的波斯伯伯的一样它其实没有干那个事情还是原生的一样可以使用两个拥挖然后这里是简单化了一个这个场景的模拟图这个set0和set1是指都是指一个拥挖上面独占的被绑合的或者独占使用的盒子集合set2和set3是共享盒子区域然后set4是指共享盒子区域合并前的了解CPU Manager的应该叫其实这块在CPU Manager里面是定义叫default CPU set然后绑合的容器比如容器1和容器2他们就会使用set0和set1这里他们也是强保型的所以他们只会使用一个拥挖上的独占的盒然后这个肯定的4他们也是拥挖清合成功的波斯伯伯的他们只会使用set2或者set3上面的盒然后对于其他的更普通的容器他们会使用set4他们可以使用set4整个default set上面所有的盒就他们具体使用的情况其实是根据他们具体使用的策略来决定的然后这个绑合的区域它也不是固定的是随着调度上面有新的绑合容器过来然后这个绑合的区域是不太动态变化的然后拥挖清合的我就这里就介绍介绍完然后接下来介绍一下内核提供的CPU各有能力首先是CPU调度一天级这里是对内核的这些应用程序的优先级的方面提供了一个情况的强化还提供了一个决定优先级的概念就是其实有三种策略一个高优中优还有低优高优可以抢占低优的资源中优也可以去抢占低优的资源低优显然我们会给所有的离线任务都安排下低优然后我们重要的在线任务就会都是高优的在应用之前就是一个离线任务来了以后本来的在线任务跟它都肯定会有存在增强时间片的问题现在就是这个A是一个在线服务它现在是绝对不会受到离线绝对不会被离线增强时间片这个B这个低优的离线任务绝对不会增强它的时间片第二点是超远的隔离这个是相比钓对线级进一步增强了进一步挑战强调的隔离线级它是在物理和级别进行了隔离也就是L22就是优化的是L22开始方面的度假就是如果一个高优任务在使用这个物理和的一个一端也就是一个逻辑和的话其实如果它的对端也就是另一个逻辑和有低优任务在使用其实它也会把它赶走把它驱逐到另一个物理和上如果没有其他物理和其实这个混沌任务离线任务会比较可怜它会暂时没有时间片可以用这个在我们线上已经覆盖了数万的混沌机器也会集了数万的在线服务性能表现上面是平均这些在线服务的ABC可以提升5%可以节省很多的资源使用还有一个是指钝内在线服务使用的一个特性CPUBus因为Quota的特性一个服务它日常其实是用不到那么多资源但是在它一些风质情况下它可能超出Quota的限制这个时候会出发线流然后服务的各项指标比如调度延迟什么的可能会有一些毛刺这个特性其实就是把这个服务在CPU600不紧张的时候所积累起来的Quota累积起来给让那些风质有一个缓冲的移地减少这种性能方面的毛刺可以一定承受到极高吞吐并降低了仓位的延时而且显然可以对稳定性方面这个业务的稳定性方面有一定的贡献我们测试我们对个别这种QPS很大的业务测试以后发现它的实力调调用成功量可以提升有10%CPU也可以得到更充分的利用内存方面的隔离能力我上面就介绍完了接下来介绍一下CPU方面的之前介绍的是CPU方面的现在我介绍一下内存方面的自然隔离能力内部主要是这四种第一个是内存一步回收这个其实是就给内存一步回收设置了一个预指让它能在真正自然紧张之前就触发回收避免到了真正需要回收的时候维持一碗同时还能控制系统农配置开始的使用量第二点是命水分级这个其实也是主要给理线业务使用的就是把它的水位线设得比较低然后优先会得理线的内存分配进行预指而且会直接回收它的缓存降低我们的高优任务被理线任务触发回收所影响到的概率而且优化了在线业务的内存分配延迟第三点是脏业限制这部分其实当脏业数量达到我们的预指的时候会执行lightback然后限制脏业的写路速度这部分也主要是对限制去限制了低优任务低优任务避免低优任务产生过多脏业然后导致我们高优出发回收以后我们高优任务的脏业也为过早的flash第四点这个其实是L3catch隔离我们主要是还是去限制理线的使用理线可以使用的L3catch比例会设置得比较低也就降低了理线和在线在同一个socket上面对L3catch理线对L3catch使用的干扰隔离能力我们就先介绍这里然后后面介绍一下我们之前所谓我们缺乏的干扰解设能力我们现在建设以后主要是基于服务养 想延迟和CPR这两个指标来建立的干扰判定算法我们内部这个技术技术实现简单说一下就是接住了流失计算引擎进行海量的指标数据的分析计算这个算法其实简单来说的话主要判断个别实力它的指标是否预测想延迟方面其实是判断它是否大于两倍的标准差如果达到了这个预值就认为这个个别实力是有问题的它也会进行上报CPR的话也是波动过达超过了某个预值以后也会认为有干扰力问题这部分我们建立了一个单独的系统以数据采集以及上报系统进行隔离减少对于现场系统的干扰其实上面说的流失计算引擎就是指福林克然后我们这些隔离能力和干扰检测的能力介绍就先就到这里了然后后面我们讲一下我们的具体简单讲一下我们的具体实现隔离能力的框架方面其实跟主流的很接近其实主流就是代理或者旁路我们是代理加旁路代理就是我们有一个Long Time Proxy它会成为一个违运行驶把酷别的请求拦截下来然后再去传选给真正的底层运行驶拦截到CRI请求以后可以去用于满足各类资源管理的扩展需求也就能做到增强至于QoS的调度的资源管理最后它也能为CRI不支持的我们之前所讲的新增了很多隔离特性提供接口QoS一阵的话它其实是一个更主要的方面它有自身运行的很多很多长任务比如说对理线资源的使用量的监测何时需要去压制以及什么时候去要对在线开启CPUBOSS的这些都是它去做的同时Long Time Proxy其实是极简化的它真正的它拦截住了CRI请求以后它也是需要把发送一个转发一个请求到QoS AdentQoS Adent它提供的互可插件机制会真正的去修改这个请求这一些互可插件去做这些精准化的QoS产生注入然后再把结果返回给Long Time ProxyLong Time Proxy发送到底层如果是CRI支持的那些参数它就会直接接住运行时运行下来如果是不支持的就是我们之前所做的我们新增的这些隔离性的接口我们会直接直接进入CPUBOSS的写录这个链路简单来说简单来说之前已经简单说过了这里再详细说一下这个互可互可不需要再详细说就在额外介绍它除了有拦截在设置这种出发式的技术详细还有一个确保周期性的轮型就面向中态确保这个这个三数能够持久化第二点是比较特殊是我们这个我们在这个QC里面添加了一个单击调度模块我们是移植了CPUBOSS的这种把它的CPU Manager和Memory Manager功能都给拿了出来放在里面然后Topology Manager我们是弃用了把它进行增强其实更改成了一个更接近中心调度调度计的东西然后最后能做到妞码和散码妞码的感知调度结果最终会就由狼台幕后对应的一个插件来进行生效这个这里妞码清合的实现实现了我这是一个简单模型就是陆清文所的CPU Manager和Memory Manager已经移到了我们已经移到了我们这个单击的QC Agent的模块当中然后Topology Manager我们被废弃了我们改成了一个更接近中心调度计的模式然后它有Felt插件以及Score插件最后会把最后会得到一个最最优的就是得分我们内部基于我们内部的规则而言得分最高的一个一个妞码或者或者洛杉磊跟妞码的组合也会存到这个Stated Catch当中然后我们也是有权拒绝其实这种情况是是资源上报延迟过高或者出发了Model Bag然后这个时候我们发现实际Port不应该调度管比如说强暴行过来但我们发现没有任何一个妞码能够有足够的单独妞码资源能运行它我们会调我们会调用APSO来修改Port的状态从来拒绝它如果成功调用的话我们会把分配结果写在CPU通过CPU Set的Plugin来写入这里这里也拦解了Update Container Resource会把CPU Set的结果覆盖掉平时的话是结果接住陆克塞了周期性的去检查把结果把结果设置在我们期望的值最后讲我们的技术技术实现就简单过了最后讲一下我们这个落地所带来的给我们带来一些给我们带来一些好处CPU Newmark轻额还有是已经落立的然后内存轻额我们其实是今年9月份才上线当前也比较是第一版是给绑合的Port来使用的CPU Newmark轻额的落地当前是覆盖我们线上有60%以上的服务实际生效的实力成功Newmark轻核的实力其实是有50%在性能方面它给我们的售益就是服务IPC平均提升了10%也给稳定性带来一些售益就峰值的情况下本来的一些P99异常升高的问题得到有效环节P99延时就下涨了有40%这个跨Newmark导致的业务稳定性问题减少了有90%成本售益方面结成了10万加以上的核内存提供的那些自然隔离能力我们也尽情努力不过并不是全部上面介绍的大部分都已经落地了但其他很多能力还在挥兔测试当中其中CPU隔离能力这里主要是指CPU跳动线集合CPU超越能量隔离它在现象已经是大门就生效了总共会计数万的再新服务总共数十万的实力这里我们测试下来IPC相比特性开启前提升了約百分之五日均也是可以节省数万的CPU资源内存隔离方面其实我们上天有个发言最终的总指标不太好的在我们初扬测试的时候是发现单击的内存可以节省約百分之二我们有大数据混布的机器规模有数万然后机器走内存有数百万级特性全开之后预级能节省数万级的内存同时它还有还能带来一定的文性收益因为它能减少全级配置开始的阻量造成这种内存回收的时候带来的卡队已经在现有OM的问题刚刚检测的话我们也已经建立并且全量覆盖了它是能做到越经主动发现二十例以上的业务稳定性问题并且我们之后进行排查以及汇总以后这整套性能问题招惠率在百分之八十五以上我的介绍就已经结束了谢谢大家谢谢大家领情有一万的话感谢大家提出你好我有问题你这个主要讲的是那个混布其实你做的混布对然后我想的问题就是因为你刚刚你说了那么多手段我没有看到阿欧方面的就是你们对阿欧方面有一些隔离的一些手段阿欧就是其实在这刚才我们还在挥肚测试对挥肚测试你们已经大规模上了这个混度就是你们没有发生没有出现过现让这种因为阿欧导致的一些事故就是我混布了有出现过这种问题吗有的有的 是吧因为我们也有对暂时还没有解决好感 我请问一下就是刚刚有提到是用Ci Block C的那种形式然后拦截对Ci的请求然后再做一些细致的分配策略然后最后再下法到LonetimeOK然后我们知道如果说要烂一个破的然后它有申请GPU然后又要绑牛马又要绑合然后我们想按这个绑的牛马和那个GPU是清合的然后我们又知道Divise Plug-in的这个然后是在Utomete那一层Cubalit在掉Ci之前就已经把这个分配给做完了对那如果这个时候再用那个Ci把这个请求给拦下来的话然后又要做到这个GPU跟这个牛马清合的话我们是怎么样做这件事情没有那个这个其实是提前分配好的就CPU Set我就Proxy拦截以后它会直接从那个从那个组件去拿资源如果它发现还没有就它得到这个就Allocated的这个参数是False的话其实当天是比较粗暴是直接放过了然后然后后面后面等到真的分配下来会再去修改如果这个延迟过高这个延迟过高我们是有监控会报警的对就如果延迟过高到很后面才去修改它的CPU Set不然会有一些那个稳定性问题吗它会有抖动修改所以我想表达所以你想表达是不是那个第一把的时候有可能这个CPU Set和GPU是不清合的然后后面发现了它不清合以后再想办法修正是这个意思就是第一次就是直接Cubit的Cubit的结果就是被直接应用了因为我的分配结果还没有还没有计算出来OKOK大概明白谢谢你好我想问一下就是你刚说那个干扰检测现在是基于那个CPU去做了是吧这个相比那个Google之前的那个CPU2的那篇paper它现在有啥就是就是比如插一画的一些点吗CPUQ他们其实基本上是CPUQ反正是完全照搬过来进行一些进行一些规则还有一些模型下面的强化吧然后我们主要还是那个调度延迟方面提供了一套自己的算吧OK那CPU这个指标主要就是有没有遇到比如说内部比如快手它的机型之间比如说会不会有比较大的CPU的差异因为你CPU是对Walkload去挑那个它的CPU的一个分布但你可能不同机型它本来的那个IPC就不一样跑同一个Walkload它的IPC都不一样对你们这种有一些这个问题在我们内部其实很严重会快手有有大几十种甚至上百种机型嗯对我们当前其实其实全众方面是那个调度延迟它的判定会再跟占据主要主要因素那所以就CPU那一层就相当于机型这个问题就现在暂时现在是往后放了然后但是先忽略了对它也有应用但它的全众因为我们这个现状它没法嗯这个完全依赖于它行明白了啊谢谢没有问题的话就感谢大家谢谢