产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

探索性能前沿,快手系统软件技术演进与资源效率优化

熊刚

  • 2023-12-27
    北京
  • 本文字数:5187 字

    阅读完需:约 17 分钟

大小:2.61M时长:15:11
探索性能前沿,快手系统软件技术演进与资源效率优化

作者 | 熊刚

策划 | 薛梁


服务器总成本是服务器总量和单价相乘,分两部分,一部分是通过提升资源利用率和性能优化来降低服务器用量,比如内核隔离与控干扰技术,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。

2023-12-27 16:099952
用户头像

发布了 181 篇内容, 共 93.7 次阅读, 收获喜欢 207 次。

关注

评论

发布
用户头像
该评论已删除
2024-01-02 11:12 · 北京
回复
这个只是一个现场活动的一个预热,我在现场听,挺不错,干货挺多。
2024-01-02 21:53 · 广东
回复
没有更多了

区块链药品溯源解决方案-区块链技术监管医药溯源

13530558032

总结近期腾讯+阿里+百度Java岗高频面试题,提问率高达98%,看到这篇文章基本offer稳了

Java架构之路

Java 程序员 架构 面试 编程语言

简易项目搭建 Models层封装

happlyfox

学习 28天写作 3月日更

mock 请求分发

blueju

JavaScript React Mock umi umijs

Wireshark数据包分析学习笔记Day3

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

Flutter 2 来了

SamGo

flutter

饿了么刚给我确认了p7的职位,对自己的经历,做一个面试总结。

Java架构之路

Java 程序员 架构 面试 编程语言

正则表达式.01 - 元字符

insight

正则表达式 3月日更

【金三银四】这才是打开Java面试的正确方式,吃透这份【Java面试手册】offer稳了

Java 编程 面试

微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路

JackJiang

微信 架构设计 即时通讯

Elasticsearch Index Types and Mappings

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 3月日更

简单工厂模式、工厂模式、抽象工厂模式比较

良知犹存

设计模式

Oracle table()函数的合理运用,提高工作效率

xiezhr

oracle table() Oracle函数 3月日更

力扣(LeetCode)刷题,简单题(第21期)

不脱发的程序猿

面试 LeetCode 28天写作 算法面经 3月日更

【回溯算法】借助最后一道「组合总和」问题来总结一下回溯算法 ...

宫水三叶的刷题日记

面试 LeetCode 数据结构与算法

两会热词“区块链”,打开传统溯源的一扇大门!

源中瑞-龙先生

区块链 两会

开源镜像仓库Harbor的镜像安全

运维研习社

Docker Harbor 漏洞扫描 镜像安全 私有仓库

程序员必须知道的数据结构:线性表与链表

老王说编程

Java 链表 线性表

硬件设计必备,电子元器件高清矢量图

不脱发的程序猿

硬件产品 28天写作 硬件设计 电子元器件矢量图 3月日更

《不看后悔》38个JVM精选问答,让你变成专家

Java 架构 面试 JVM虚拟机原理

程序员必须知道的数据结构:队列与栈

老王说编程

数据结构 队列

程序员必须知道的数据结构:HashMap 与 LinkedHashMap

老王说编程

Java 数据结构 hashmap

萌新不看会后悔的C++基本类型总结(二)

花狗Fdog

话题讨论 | 又一家大厂进入汽车领域,"百车大战"即将来临?

程序员架构进阶

话题讨论 七日更 28天写作 话题王者 3月日更

智慧党建系统开发,智慧组工平台建设

13530558032

阿里面经最新分享:Java面试指南/成长笔记(金三银四程序员必备)

比伯

Java 编程 程序员 架构 面试

Redis 与 I/O 多路复用模型

小方

redis

金三银四程序员面试必备:2021最新 最全面Java复习路线!已收录GitHub

比伯

Java 编程 程序员 架构 面试

用c++创作一个简单小游戏

张鹤羽

28天写作 3月日更

恋物志(二):独居者的智能生活指南

脑极体

LeetCode题解:714. 买卖股票的最佳时机含手续费,动态规划,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

探索性能前沿,快手系统软件技术演进与资源效率优化_性能优化_InfoQ精选文章