开工福利|免费学 2200+ 精品线上课,企业成员人人可得! 了解详情
写点什么

从 Linux 内核隔离到 Java 透明协程,快手系统软件技术架构演进之路

熊刚

  • 2025-01-16
    北京
  • 本文字数:5712 字

    阅读完需:约 19 分钟

从 Linux 内核隔离到 Java 透明协程,快手系统软件技术架构演进之路

作者 | 快手系统软件负责人 熊刚


系统软件作为软件架构的基石,发挥着承上启下的关键作用。快手系统软件团队经过四年的探索与实践,成功积累了一系列创新技术与性能优化方法论,这些成果广泛涵盖 Java 协程、编译器优化、操作系统改进等多个关键领域。本篇作为系列文章的开篇,将为您勾勒出快手系统软件团队的整体风貌与成果概览,而后续的篇章则会针对各个重点方向逐一展开,进行深入而详尽的解析。


1 系统软件技术的核心价值与面临挑战


系统软件作为软件架构的基石,扮演着连接软件与硬件的桥梁角色,位于整个软件生态的最底层,处于关键核心的位置。系统软件最为显著的特征在于其规模效应,随着服务器体量的增加,系统软件研发的价值愈发凸显。


首先,系统软件技术能够显著提升服务器资源的利用率,实现翻倍效果,同时性能也能提升 30%~50%,从而大幅降低公司的服务器资源成本。其次,专业的系统软件团队能够迅速定位并解决底层技术问题,避免小故障累积成大故障,确保业务稳定运行,降低潜在风险。此外,系统软件还扮演着桥梁的角色,推动着服务器和上层软件的架构持续演进与创新,为公司的技术发展注入源源不断的动力。


然而,随着规模的扩大,系统软件研发也面临着更为严格的挑战和约束条件。特别是在快手这样的背景下,挑战尤为突出。一方面,系统软件团队需要具备深厚的技术底蕴,不仅要深入到底层软件和硬件领域,还要理解上层平台以及业务逻辑,才能与业务团队保持同频共振。另一方面,与行业内的大型企业相比,快手在系统软件研发上的人力和物力投入相对有限。因此,快手需要更加精准地识别并解决公司面临的关键技术问题,在解决关键问题上做到极致,不追求大而全。同时,快手需要站在巨人肩膀上,基于巨人创新突破,避免重复造轮子。


最后,在技术推广方面,快手也面临着不小的挑战。如何将底层技术成果有效地推广至全公司,是一个亟待解决的问题。这需要快手以公司和行业的成本效益战略为指导,紧密结合业务的实际需求,实现与业务的共赢。同时,快手需要降低技术推广的成本,甚至实现对业务的透明化,确保新技术的引入不会给业务带来稳定性和安全方面的隐患。在此基础上,快手还需要保持技术的先进性,不断推动系统软件的创新与发展,为公司的长远发展提供坚实的技术支撑。



2 “四横四纵”架构——快手系统软件技术体系基石


自 2020 年初起,快手系统软件技术团队开始进行自研技术的探索,凭借对业务场景需求的深刻洞察及技术趋势的精准预判,成功构建了一套独特的“四横四竖”架构的系统软件技术体系。若将软件体系比作一棵参天大树,系统软件无疑是深植于土壤中的“树根”,它位于软件架构的最底层,既连接着硬件资源,又支撑着上层软件,发挥着承上启下的关键作用。向下做好资源管理和抽象,向上高效、稳定、安全支撑好平台和业务。因此,掌握系统软件技术对于技术人员而言,不仅是深入技术根基的必经之路,也是实现个人持续成长的重要阶梯。


快手的系统软件技术涵盖了操作系统、编译构建、运行时(JVM)、系统诊断、系统观测等多个方向,每一环节都至关重要。其中,操作系统作为最基础和核心的软件,更是我国亟待突破的关键核心技术之一。


  • 最上层是 Java 运行底座——JVM,它为 Java 应用提供稳定高效的运行环境,是 Java 生态中不可或缺的一环。

  • 紧接着是编译系统层,主要聚焦于 C++ 构建系统与编译技术,确保代码的高效编译与优化。

  • 再往下则是操作系统层,作为系统软件的核心组成部分,它负责资源管理、任务调度等关键功能,是保障系统稳定运行的基础。

  • 而位于最底层的微架构层,涵盖了 CPU 微架构与 GPU 微架构,这一层直接决定了硬件的性能发挥,是技术大树深植土壤的根基所在。



2.1 JVM 技术创新:Java 17 透明协程与 Checkpoint 技术


Java 作为快手第一大语言,占有资源在千万核级别。面对 JDK 社区日新月异的发展,尽管新版本在稳定性、性能和功能方面不断优化,但直接使用开源版本在快手的实际应用场景中仍可能遭遇稳定性和性能瓶颈,阻碍了其在生产环境中的广泛应用。同时,快手正积极研发契合自身业务需求的 JVM 特性,这些特性亟需与上游 JDK 社区实现深度整合。鉴于此,快手组建专业的 JVM 团队显得尤为迫切。


在自研 JVM 的道路上,快手并非从零开始,而是站在巨人的肩膀上,吸取社区、行业新能力的基础上,进行自主创新。


在实践中,快手发现成本优化能全局统筹稳定性、性能和易用性这三个维度,符合公司降本增效的战略。为了极致提升单实例性能,我们从 IPC(每周期指令数)、利用率和复杂度降低三个维度入手。同时,为扩大其应用规模,需深入研究各类场景发生的小概率事件,确保 JVM 的稳定性和易用性。



近年来,快手在 JVM 领域取得了不少先进的技术成果。作为行业内首个将 Java 17 超大规模上线的公司,快手还最早大规模应用了 ISA-L 和弹性内存技术,并研发了首个 Java 17 透明协程和 JVM Checkpoint 技术等。


「2.2.1 Java 17 透明协程」无侵入,吞吐提升 30%,落地规模行业领先


对于编程开发者,传统线程模型逻辑直观但性能受限,而异步模型虽性能高却复杂性大。协程以“同步编程,异步执行”平衡两者,成为现代语言标配。在阿里的 Wisp 协程基础上,我们进行了两大核心优化:一是重构协程调度,通过引入了就近调度、延迟睡眠、LIFO 策略、延迟满足以及线程复用等多种优化手段确保低负载工况下协程的高效执行,解决了低负载场景下利用率高的问题,使协程的覆盖率大幅提升。经此优化,快手协程在低负载工况下的 CPU 指标不仅解决了利用率比线程高 10% 的问题,甚至还优于传统线程模型 14%。二是通过协程队列与载体线程的分离技术,解决了 JNI(Java Native Interface)执行时间长导致的业务延时过长问题,进一步扩大了协程的适用场景。



从这两个问题的解决来看,为了做到上层无感知,JVM 需要处理很多复杂的场景,实际上将复杂度下沉到 JVM 层面,真正做到复杂留给自己,简单留给用户。此外,虽说系统软件有比较好的规模效应,但绝不是简单的复制,比如这里提到大规模落地需要解决很多小规模场景不用解决的问题,另外在扩量的过程中,一些小概率问题变成必然问题,例如在我们所面对的场景中,哪怕是十万分之一概率出现的问题,也需要修复打磨好,这对技术能力提出了极致的要求。


「2.1.2 JVM Checkpoint」


近期,我们在研发另一项有趣且极具挑战性的技术——JVM Checkpoint。这项技术能将 JVM 内部的 CodeCache、Metaspace 等数据快照保存到远程,下次 JVM 启动可以直接拉起快照,快速运行。从实际应用效果来看,在启用 Checkpoint 之前,启动时间需要 150s,而启用后,启动时间大幅度缩减至 80 秒,启动速度提升了近一半。此外,启动阶段利用率能从 23% 降低到 5%。这项技术将能大幅度提升应用启动速度,增加弹性能力,大幅减少回滚时间,也能节省启动阶段资源预留成本。值得一提的是,快手系统软件团队始终坚持做难而正确的事,我们提前 1-2 年进行技术规划和储备,以确保我们的技术始终走在行业的前沿。



2.2 BOLT+AutoFDO 等编译技术组合做功,显著提升整体性能


编译器领域的核心使命是为公司提供高性能、稳定、安全且易用的编译技术,其中快手的主要承载产品是 KBuild。KBuild 助力快手大部分业务编译构建,其价值体现在四方面:研发效率上,通过分布式和缓存技术,KBuild 将 C++ 工程编译时间从超 1 小时缩短至 5 分钟内,大幅提升团队效率;稳定性上,通过灰度发布控制基础组件,减少代码变更引发的稳定性问题;代码质量上,配备静态扫描机制,发现开发 Review 阶段难以察觉的问题。性能优化方面,通过编译优化技术降低服务器用量,优化延时提升用户体验。



快手的 C++ 编译优化技术涵盖整个流程,包括编译期参数调优、AutoFDO、链接期 LTO 优化、链接后 BOLT 优化及基础库的 SIMD、高性能 Protobuf、JSON 优化等。这些技术不仅应用开源工具,更根据实际需求深度改造。例如,为解决 LTO 技术增加编译时间的问题,快手引入分布式集群编译和编译缓存技术,使编译时间仅秒级增长。BOLT 作为一项先进的链接后优化技术,其核心优势在于通过分析线上运行程序的 perf 数据来优化二进制文件。而 AutoFDO 则基于采集的 profile 数据在编译期进行优化,两者在多个场景下可以协同工作以提升性能。然而,在快手实际落地过程中,我们遇到了一个挑战:当尝试将 BOLT 与 AutoFDO 合并使用时,由于 AutoFDO 会导致二进制文件发生变化,使得为 BOLT 准备的 profile 数据失效,从而无法充分发挥两者的优化效果。为了解决这一问题,快手团队深入研究了最新的 Match+Infer 方案,并成功在公司的一个业务服务上进行了验证。结果显示,采用该方案后,优化效果从单独使用 BOLT 时的 8% 提升至了 12%(即 AutoFDO+BOLT 的组合优化效果)。



快手已大规模应用这些编译优化技术,整体性能提升了 10%~13%,同时延时降低了 4%~8%,不仅降低了成本,还在业务效果和用户体验上产生了显著收益。


2.3 自研内核与资源隔离技术:推动云原生场景的高效混部与资源优化


快手工程师开发的 C++、Java、Python、Go 程序均运行在其自研内核上,该内核针对云原生场景进行了深度定制,包括内核隔离、GPU 虚拟化等特性。为确保 OS 的稳定性,快手建设了一系列工具,如自动化测试框架,以提高问题定位和修复效率。同时,针对新硬件如不同品牌的 CPU 和 GPU 的引入,内核也进行了大量适配,以支撑新硬件的演进。此外,由于 CentOS 停服,快手也自研 KwaiOS 来作为替代。



在当前环境下,为最大化资源利用和控制成本,我们期望在同一台机器上同时部署在线和离线业务。然而,这种高密度部署虽提高了资源利用率,却加剧了业务间的干扰,特别是在线业务易受抖动影响,威胁其可用性。为解决此问题,我们在操作系统内核层面加强了隔离。基于行业方案进行重构,我们将调度树拆分为在线和离线两棵,核内调度时优先在线业务,确保在线可绝对抢占离线资源,减少了离线对在线的干扰。但在推广搜等内存瓶颈突出、延时敏感的业务中,我们面临新的挑战。为此,我们推出快手 2.0 阶段的 CPU 调度策略优化方案,引入双队列,将在线和离线的负载均衡彻底分开,在整个物理机层面先调度在线,进一步降低离线对在线的干扰。上线调度 QoS 后,在线业务调度延时大幅下降。


上述 QoS 调度是内核隔离技术体系的关键一环,我们共研发了 15 种隔离能力,其中 7 项源自社区和阿里,8 项针对快手场景进行了重构和优化。我们还在研发 LLC 隔离和 CoreFirst 调度能力,实现极端敏感场景下的在线无感混部,做到几乎任意业务都具备在离混部的能力。采用这 10 多项内核隔离技术后,整机利用率在符合业务 SLO 标准下翻倍提升。然而,提升容器云整体利用率还需在集群层面努力,如统一调度、资源合池、运营治理等,这是一个庞大体系化工程,而内核隔离是基础和前置条件。目前,快手通用在线混部集群在规模和日均利用率上均达行业领先水平。



随着智算时代的到来,快手研发了 GPU 虚拟化技术,可将单张物理 GPU 卡虚拟为多张虚拟卡,支持多在线业务或在线与离线业务的混合部署,提升 GPU 利用率且对业务无影响。同时,鉴于内存成本上升及内存容量成为多业务场景的瓶颈,系统软件层面亦研发了 JVM 弹性内存和内核冷热内存技术,通过冷热分级和压缩下沉冷数据至低成本设备(如 ZRAM、SSD、云盘),实现整机内存节省超 20%。


2.4 系统诊断与微架构:为数十万服务器稳定性、高性能保驾护航


系统诊断与微架构是快手系统软件比较有特色的地方。系统诊断团队专注于保障公司数十万台服务器的稳定运行,解决宕机、夯机及干扰等稳定性难题,无论是单机故障还是系统级复杂问题,均承担最终兜底责任。微架构团队深挖 CPU/GPU 微架构潜力,优化硬件性能。例如,针对 AMD CPU 在某些场景下性能优于 Intel 但早期表现不佳的情况,团队通过 NUMA/SubNUMA 技术优化,使 AMD 性能提升 20%~30%,成功推动数万台 AMD 服务器大规模部署。此外,采用大页技术(THP)减少 TLB miss,加速内存访问,性能提升 6%~10%,有效优化内存延时,解决内存墙问题。



2.5 极致性能优化:实现 CPU 性能翻倍与资源节省


快手系统软件常用的 CPU 性能优化方法论如下,其核心目标是在确保符合 SLO 的前提上,最大化提升单机吞吐能力(对于在线服务而言,通常体现为 QPS 的提升)。这一优化过程在三个维度发力:利用率提升让程序跑得更满,比如前面提到的协程和在离线混部就是这个维度;在 IPC 提升维度,比如前面提到的通过微架构优化能提升 IPC;另外复杂度降低维度,比如业务做的简化架构、请求合并、无用逻辑删除等等都是这个维度。



今年我们协助业务优化了一个看似简单的 size 函数,该函数仅占两行代码,却消耗了整体 8.4% 的 CPU。从算法复杂度看难以理解,但从微架构视角分析,其 cache 命中率极低,大部分时间用于从内存加载数据,即遇到内存墙问题。使用 prefetch 因数据地址无规律而无效。随后,我们从功能模块整体出发,增强乱序执行能力,降低数据依赖粒度,提升 CPU 乱序执行概率,最终使功能模块性能提升 30%,size 函数 CPU 占比降至 2.5% 左右。结合 BOLT、LTO 编译技术及 THP(透明大页)等,整体性能翻倍,节省数千台服务器资源。


3 系统软件演进总结


在过去四年里,系统软件团队实现了从 0 到 1 的突破性演进,为快手带来了众多高价值的技术成果。尽管篇幅所限,许多精彩的技术细节未能详尽展现,但我们依然热忱地邀请您莅临快手,与我们深入交流探讨。系统软件技术团队汇聚了一群对技术充满热爱、敢于挑战自我的新老伙伴。他们与快手共同成长,不仅为公司创造了卓越的技术价值,也在个人成长的道路上不断前行。



如今,系统软件团队仍在持续进化,我们渴望吸纳更多有志于技术创新的人才加入,共同为公司的繁荣发展贡献智慧与力量。


如果您对我们的技术充满好奇,或者渴望与我们进行深度的技术交流,请随时联系我们(xionggang@kuaishou.com)。我们期待着与您携手共进,共同开创技术新篇章!


今日好文推荐


2025伊始,万字长文刷新AI产品20个认知


2025 年铁了心不再招软件工程师?!这位 15 岁就开公司、25 年创上万亿市值的巨头 CEO 再放“狂言”


苹果监听实锤!一群人打了5年官司赢近7亿赔偿,但用户连200块都拿不到?


刚刚过去的一年 GitHub 刷星大爆发?!450 万假 Star,项目风光仅撑 2 个月!


2025-01-16 18:5810723

评论

发布
暂无评论

数据中台的业务价值和技术价值

用友BIP

数据中台

软件测试/人工智能|教你掌握 Conda 的基本用法

霍格沃兹测试开发学社

用友发布数据资产入表解决方案 加速激发数据要素价值

用友BIP

数据资产入表

Hudi 在 vivo 湖仓一体的落地实践

vivo互联网技术

数据湖 大数据计算与存储 效率提升

单日30PB量级!火山引擎ByteHouse云原生的数据导入这么做

字节跳动数据平台

数据库 大数据 云原生 数仓 企业号12月PK榜

软件测试/人工智能|解决Selenium中的异常问题:“error sending request for url”

霍格沃兹测试开发学社

IPQ4019/IPQ4029 router is used to develop TDMA under openwrt - Better performance and efficiency for wireless networks.

wifi6-yiyi

5G wifi IPQ4019 TDMA

大型语言模型在实体关系提取中的应用探索(二)

数由科技

知识图谱 ChatGPT LLM 实体抽取 Bard

强大的矢量图编辑器:Boxy SVG免激活最新版

mac大玩家j

Mac软件 矢量图处理工具 矢量图编辑器

从技术角度分析如何选择灰度测试方式

Onegun

功能测试 灰度测试

万界星空科技MES系统中的生产调度流程

万界星空科技

数字化转型 工业互联网 mes 云mes 万界星空科技mes

万界星空科技电子电器装配行业MES解决方案

万界星空科技

mes 万界星空科技mes 电子mes 电子工厂 电子电器制造业

跨境电商通讯服务

cts喜友科技

通信 通讯

聊点写作踩坑那点破事儿

6点无痛早起学习的和尚

写作 21 天技术人写作行动营

37 | 贪心算法:如何用贪心算法实现Huffman压缩编码

鲁米

app开发

Geek_8da502

从 0 到 1 手动搭建 k8s 集群 - 添加 master 节点

doramingo

云原生 扩容 kubenetes

mac电脑强大的文件重命名工具A Better Finder Attributes 7注册激活版

胖墩儿不胖y

Mac软件 文件重命名工具 文件重命名软件 批量重命名软件

无需专有硬件 XSKY星辰天合 XDcache 大幅提升文件写性能

XSKY星辰天合

软件测试/人工智能|Edge浏览器实用插件推荐

霍格沃兹测试开发学社

认证LeSS实践者课程 - 2024.1,广州

ShineScrum

大规模敏捷

极狐GitLab 镜像仓库使用技巧

极狐GitLab

DevOps gitlab 镜像 CI/CD 镜像仓库

HuggingFists-低代码玩转LLM RAG(2) Query

数由科技

人工智能 低代码 数据科学 LLM rag

C/C++内存操作 | AI工程化部署

AIWeker

c AI AI工程化部署

2024年高效远程协同运维工具推荐

行云管家

IT运维 远程协同 协同运维

云数据库RDS MySQL和ClickHouse 同步攻略

NineData

MySQL Clickhouse 数据复制 数据转换 NineData

从 Linux 内核隔离到 Java 透明协程,快手系统软件技术架构演进之路_编程语言_InfoQ精选文章