作者 | 熊刚
策划 | 薛梁
服务器总成本是服务器总量和单价相乘,分两部分,一部分是通过提升资源利用率和性能优化来降低服务器用量,比如内核隔离与控干扰技术,GPU 虚拟化与混部技术来提升 CPU 与 GPU 利用率,通过微架构优化、内核优化、编译优化、基础库 / 框架优化、JVM 优化技术提升性能。另外一部分是通过引入新性价比更高的硬件来降低单价。总计为公司带来 10 亿级别的成本优化价值,ROI 在 10 以上。
整个项目成功的要点在于,形成快手独特成本优化方法论,抓住关键技术,借助公司关键战役进行创新突破,最大化系统软件价值。
在 12 月 29 日的 QCon 软件开发大会上,来自快手的基础平台部系统软件中心 / 系统软件负责人熊刚将在会议上分享利用系统软件技术来全面提升服务器资源效率实践话题。
在正式演讲之前,我们采访了熊刚老师,请他分享快手系统软件技术演进与资源效率优化经验。
InfoQ:简单介绍一下快手的系统软件。
熊刚: 如果把软件体系比喻为一颗大树的话,系统软件是“树根”,处于软件系统的最底层,连接硬件资源和上层软件,起到承上启下的作用。快手的系统软件包括 操作系统、编译构建、运行时(JVM)、系统诊断、系统观测 等方向,如下图所示。其中操作系统是最基础和核心的软件,是我国关键“卡脖子”核心技术之一。系统软件具有 技术密集、轻资产、规模大 等特点。
InfoQ:在您作为快手基础平台部系统软件中心负责人的角色中,服务器资源效率优化占据了怎样的位置?
熊刚: 快手系统软件技术对公司有巨大价值,通过系统软件技术演进给公司带来 10 亿级 资源成本节省,但价值不止于此,我以成本优化牵引系统软件产品演进,除成本之外,在稳定性、开发效率和用户体验、业务架构升级等多维度带来全方位收益。主线还是我们的领域产品技术演进,这才是系统软件的核心竞争力。
具体来说,要做到高成本收益,需将我们的产品技术扩大到高规模,这要求我们先把稳定性打磨好,否则上不了线,还需要把易用性打磨好,否则业务不愿意用,面向云原生架构,需将系统软件技术往云原生更友好方向变革,以一带 N,这个一就是“成本优化”,成本优化不是唯一目的,更是一个牵引力。
InfoQ:在组织中,哪些角色或部门应该特别关注性能优化问题?
熊刚: 站在公司角度,成本包括的内容比较多,本议题聚集在服务器成本(如下图红色部分),主要指通过技术手段优化服务器成本,不包括运营以及商务侧的手段。
前面提到的后台系统的 4 层架构,几乎每一层都涉及到服务器成本优化,这对技术团队而言是一个非常难得的历史机遇,可借势加速推进产品技术的演进。
InfoQ:您有什么方法来打造有竞争力的系统软件产品?
熊刚: 我通过 “三合一” 策略来打造系统软件产品,用 JVM(我们内部称为 KBOX)举例:近年来,JDK/JVM 社区在加速演进,新版本在稳定性、性能、能力上持续优化迭代,若能直接将这些新成果应用到快手,相当于聘请了 1000 多 JVM 领域专才来免费为我们工作,加上向行业佼佼者学习,并基于此做创新。如果把产品当作一个物种,吸取社区和行业的精华类似基因传递,在此基础上做创新突变,更好适应快手场景,以此演化出有竞争力的产品,如下图:
InfoQ:如何将这些技术推向平台和业务?
熊刚: 前面是讲如何打造出一个有竞争力的系统软件产品,我用 “3 个借力” 来加速落地,产生实际价值:
实际上系统软件不掌握服务器资源,服务器资源都掌握在平台或者业务手中,我们需要和平台、业务形成良好的合作共赢关系,一个方案往往需要多方面的考量,满足各方的诉求,达到全局最优,达到双赢甚至多赢。
InfoQ:如何突破成本优化可持续问题?
熊刚: 实际工作中,一个普遍的认知是 “成本优化这件事不太能持续,越到后面难度越大,优化空间越小”,这句话我认为对也不对,针对某个阶段的一个点而言,确实如此,优化的边际效益逐步下降,但不对的是:一方面我们可以 把“点”扩展成“面”,“面”进一步扩展成“体”,这里的空间就非常大了;另外,业务平台一直快速变化,新的阶段,会出现新的矛盾和新的优化空间,从这个意义上说 优化是永无止境的。这里我举例说明成本优化如何从点到面来突破。
整体上分为 2 大阶段,1.0 阶段和 2.0 阶段,前面 1.0 阶段 我形象称之为 “横向出发”,拿着锤子找钉子,从我们的系统软件产品出发去平台、业务找落地场景,2.0 阶段 我称为 “横竖结合”,在前者基础上,也需要加上竖向,从业务出发找到钉子,需要我们来造一个合适的锤子。横竖结合更加完备,满足了不同阶段的增长空间,如下图:
实际上快手系统软件资源成本优化分为 4 个小阶段,如下图所示,形成了体系化的方法,有意思的是这个过程形成了 快手特有的成本优化模型:如“三维吞吐模型”,“成本优化模型”,简单而深刻,往往能在关键时刻力挽狂澜。
InfoQ:在实施内核隔离与控干扰技术的过程中,您面临哪些主要挑战?您是如何克服这些挑战的?
熊刚: 内核隔离与控干扰是为大规模混部服务的,混部的本质是通过资源共享提升部署密度,从而降低资源用量,类似道路可以允许机动车、自行车、行人共同使用,在线服务有明显的潮汐特性,低峰期有大量闲置资源被浪费,为了充分利用这部分闲置资源,可以在低峰期运行离线任务,以此节省服务器资源,提升整体 CPU 利用率,以 1000 万核为例,利用率提升一倍,意味着大致增加 1000 万核的供给。
但在内核隔离与控干扰技术突破之前,混部就像是一条原始的泥土道路,随着机动车、自行车、行人密度增加,相互干扰,事故频发,通行效率也大大降低,这显然不可行,急需打造一条现代化的公路,将这 3 类相互隔开,减少干扰,资源不足下,优先保障高优群体,比如公交车道。
对应到物理机器,在线和离线容器之间共享同一台物理机,相互争抢资源,产生干扰影响业务可用性和性能,阻碍混部和利用率提升,这是核心挑战,解决该问题的核心思路是建设可观测系统度量干扰程度,在内核将物理资源按容器粒度隔离以及制定优先级降低干扰率,结合容器云的调度编排能力解决干扰问题,以此带来成本、稳定性、效率、用户体验的多维度收益。
InfoQ:业界在这方面有哪些通用的解决方案?您是否进行过方案比较,您的方案有何优势?
熊刚: 业界也有类似的内核隔离技术,但我们 不完全照搬业界方案,按前面提到的“三合一”方法,在吸收社区和行业优点的基础上做创新,比如快手的调度优先级方案,业界采用双红黑树方案实现在线对离线的绝对抢占,而快手更彻底通过双队列(含双红黑树)实现在线对离线的绝对抢占,离在线各自独立的负载均衡机制,避免在线堆积到少量核上,降低在线间的干扰。
再比如我们创造性提出 “控干扰三角”组织阵型(系统观测 ->系统诊断 ->内核隔离),能更快、更稳推进混部技术的推进,我们对线上的 干扰做了持续的观测,为混部利用率提升保驾护航,整体方案如下:
实际上我们内核隔离与控干扰技术的研发效率、上线规模、功能完整性、性能在国内都是 TOP 级别。
InfoQ:在提升资源利用率的过程中,您考虑了哪些关键因素?
熊刚: 资源利用率提升是一项目非常复杂的工程体系,总体上分为供给侧和需求侧,影响供给的关键因素有:上面提到的干扰问题、存核比(内存容量与 CPU 核心数比)问题、宽核比(内存带宽与 CPU 核心数比)问题、调度问题、资源池分散等问题;而需求侧,需要提供更低的成本、解决好稳定性、易用性等问题,需求方才愿意把离线混部进来。
实际情况下,这里的因素相互牵制,要复杂得多,正向去梳理关键问题犹如一团乱麻,得另辟蹊径,基于我常用的成本优化第一原理“成本优化模型”,反向思考,假设下掉一台机器(提升利用率),哪里会出问题?如此反复逆向推演,可以把利用率提升的整个关键路径推演出来,这是一种逆向思维方法,可以大大简化问题的复杂度,加快利用率提升步伐。前面提到的内核隔离与控干扰就是利用率提升第一个要解决的关键问题。
InfoQ:在进行技术创新时,您认为需要注意哪些问题?
熊刚:创新是第一动力,这对于一个技术产品的演进同样如此,我有几点关于创新的经验,一是,创新往往不是规划出来的,规划一般是自上而下的,而创新往往是自下而上的,这两者实际上都不可或缺,但要避免自下而上的创新工作被自上而下的规划所挤压,我在做 2~3 年规划的时候,特别强调,不要被规划所束缚,日常工作也会预留足够时间做规划之外的事情。
二是,从第一原理出发创新更加高效,埃隆·马斯克经常提到他基于第一性原理创新。
三是,工程创新不同于理论创新,需要基于实际的应用场景出发。创新存在风险,需要平衡好短期和长期。团队需要有中短期能支撑团队生存的价值,同时也需要保留一部分力量来做未来的事情,以此来保持可持续性。
InfoQ:在 GPU 虚拟化与混部技术中,您是如何应选择技术方案的,考虑了哪些关键因素?
熊刚: 行业 GPU 虚拟化技术通常分为 2 大类,一类是在底层操作系统内核实现,另一类是在上层利用 CUDA/MPS 技术实现,这 2 类各有优缺,上层实现方案相对容易,缺点是缺乏故障隔离能力、难以做到对业务透明、平台维护成本较高、性能略差,在内核实现则几乎相反,从业务诉求出发,我们选择了内核实现的方式,挑战更大,但综合更适合快手。设计了如下的架构:
InfoQ:虚拟化可能带来额外性能开销,您是如何最小化这种影响的?
熊刚:我们在内核层实现 GPU 虚拟化技术,不会带来显存的损耗,会有 3% 以内的算力损耗(由于实例的切换,可能会带来一些 GPU 侧的 cache miss),以及少量 CPU 开销,主要用来调度不同实例。
InfoQ:在微架构优化、内核优化、编译优化、基础库 / 框架优化、JVM 优化等方面,您印象中最大的挑战是什么?
熊刚: 我印象比较深的是,一个是方法论的问题,前面提到的内核隔离、GPU 虚拟化等技术主要还是提升机器的利用率,平台一般把提升利用率作为北极星指标,但这里提到的一序列优化手段,实际上是降低机器利用率,和平台目标冲突,早期这些优化手段并不受平台欢迎,但后来我们提出了“三维吞吐模型”来统一 3 个维度(提利用率、提指令吞吐、降复杂度),大家在不同维度发力,本质都是为更高维度的吞吐来做功,并不矛盾,反而统一起来了。
另一个是 JVM 优化,我们今年开发行业首个“Java17 透明协程”技术,能让业务在不改代码的情况下,自动将原来的线程模型切换为语言级协程,大大提升吞吐,这项技术非常具有技术挑战,开始并不确定能否研发成功,在开发过程中遇到的难题不断,但最终这些难题被我们一个个攻克。
InfoQ:您是否探索过利用机器学习辅助完成性能提升?如果有,可以分享一些见解吗?
熊刚:我过去有 AI 的经验,我认为 AI 可以重塑系统软件领域。系统软件领域有海量的底层运行数据,这些数据如果靠人工经验去分析总结非常低效,甚至数据维度多到超出人脑能力范围,必须借助 AI 工具,把这些数据驱动起来,可释放出巨大的价值,比如在云原生场景下,某几类应用共同运行在一台物理机上能获得更佳的性能,我称为应用之间的亲和;某些应用对物理机类型也有特殊的“嗜好”,跑在特定硬件上能获得更佳的性能,我称之为硬件亲和性,等等,这些工作很适合用 AI 来做画像,而非人工经验。
当然在性能之外,在一些问题诊断方面也可以通过 AI 提效。
InfoQ:您是如何平衡硬件优化和软件优化以共同提升性能的?在降低硬件成本的同时,您是如何确保系统性能不受影响的?
熊刚:新硬件的引入需要软硬件协同,比如在引入 AMD 新一代产品,软件侧和硬件侧一起踩过大大小小几十个坑,以软件举例,需要将内核从 4 系演进到 5 系,再比如面对 AMD 核心数暴增,我们需要对内核做锁优化,才能减小性能损耗,另外在高负载下会出现偶发性夯机,经过非常艰难的定位,发现是社区内核的一个 Bug,我们首个发现并解决这个问题。
当然光有内核做支持还不够,需要系统软件其他团队,如微架构层面、编译器层面通力协作,甚至上层平台一起,才能把新硬件的算力充分发挥出来。
最后,我们在持续招募系统软件领域人才,欢迎加入快手系统软件,一起攀登技术高峰。联系方式:xionggang@kuaishou.com
嘉宾介绍
熊刚: 快手 基础平台部系统软件中心负责人
擅长海量服务、高稳定高性能服务架构、系统软件技术。2010 年硕士毕业就职腾讯:先后深度参与或主导 QQ 后台几次架构升级、腾讯视频云质量优化,以及 CV 技术 B 端落地。2019 年加入快手,参与央视春晚项目 (A1),负责应用启动、过载保护、核心配置系统设计和落地,死保中的死保,0 事故。2021~2023 年之间,从 0 到 1 建立系统软件领域,包括操作系统、JVM、编译构建、系统诊断、系统观测、性能优化等子领域。
活动推荐
明天!QCon 15 周年年终盛会,落地上海·中优城市万豪酒店,阿里云 CTO 周靖人中国科学院外籍院士、国际数据库专家樊文飞院士,英特尔大数据技术全球 CTO 戴金权等大咖会亲临现场分享大数据、芯片、架构等方向的前沿洞见。主题演讲将免费对外直播,前往 InfoQ 视频号进行预约吧~
更有 7 种精彩活动等你一起来玩!咨询购票可联系票务经理 18514549229。
评论