HUATUO 基于BPF的可观测能力建设及 GPU 大模型性能剖析

整理第三届 CCF·夜莺开源创新论坛中张同浩关于 HUATUO 的分享,覆盖 eBPF 内核可观测、系统故障分析挑战、持续性能剖析和 GPU 大模型性能剖析。

作者 秦晓辉

第三届 CCF·夜莺开源创新论坛于 2025.7.4 在北京举行。论坛上,众多可观测性领域的专家分享和探讨了监控、可观测性、AI 等议题。

来自滴滴出行的内核专家张同浩,带来了主题为《HUATUO 基于BPF的可观测能力建设及 GPU 大模型性能剖析》的分享。笔者在现场作为观众受益良多,现将其内容整理如下,供大家参考。

内核领域的问题相对难查,比如某个行为慢了,普通工程师很难定位问题。张老师围绕 HUATUO 开源项目介绍了内核观测方面的一些痛点、解决思路。HUATUO 开源项目是一个基于 eBPF 的内核可观测性工具,其网址是:https://huatuo.tech,HUATUO 项目最初由滴滴开发开源,目前也是托管在中国计算机学会开源发展技术委员会。

核心要点

  • 生产系统故障分析的核心难点包括缺乏现场、复现困难、跨团队协作成本高、缺少持续全景观测。
  • HUATUO 希望从内核层提供持续、低损耗、全方位的系统观测能力。
  • HUATUO 关注 TCP/IP 协议栈、系统负载、CPU 调度器、中断关闭时长、内存管理、VFS/Block Device IO 等关键观测点。
  • 除了指标,异常事件、AUTOTRACING 和持续性能剖析也是内核可观测能力的重要组成部分。
  • GPU 大模型性能剖析面临闭源驱动、解释型语言、JIT 中间层、运行环境差异和零侵入要求等挑战。

系统故障分析的现状和挑战

系统故障分析的现状和挑战

张老师总结了系统故障分析的现状和挑战:

  • 缺乏故障现场
    • 漂移止损、降级处理等无法保留现场
  • 复现问题难度大
    • 云原生基础架构日趋复杂:容器虚拟层,业务混部,资源优先级,共享内核,sidecar 架构
    • 生产环境中业务应用上下游依赖复杂
    • 偶发的、突发的事件类型多,并且问题触发条件苛刻
  • 人力物力成本高
    • 涉及团队多,协调难,服务器成本高
  • 缺乏持续全景观测
    • 缺乏更细粒度有效指标和观测数据
    • 观测维度单一,缺乏全面的,全景的观测能力
    • 缺乏对系统的深度,持续性的剖析能力

即便有问题现场也不容易,各种排查工具轮番上阵:

  • 监控指标
  • 系统日志
  • top…
  • perf top…
  • strace…
  • dmesg…
  • vmstat/mpstat/…
  • ss…
  • tcpdump…
  • wireshark…
  • docker inspect…
  • stap/dtrace…
  • go tools…
  • bpftrace…
  • bcc…
  • 还没搞定?开始凌乱了…

要是有个一剑封喉的必杀技工具就好了。

HUATUO 是希望从内核层面提供一个全景的观测能力,能够持续的、全方位的观测系统。

从故障处理视角看,这类能力解决的不是“多采几个指标”的问题,而是帮助工程师在故障发生后保留更多现场信息,并在复杂云原生环境里看到更细粒度的系统行为。

HUATUO 的核心特性

最让我印象深刻的是低损耗。内核函数被频繁调用,如果埋点位置不合理,会对系统性能造成很大影响;如果关键位置埋点缺失,又会导致无法定位问题。具体在哪里埋点,很依赖经验。HUATUO 最终选定的观测点是:

  • TCP/IP 协议栈
    • 协议栈,网卡硬件丢包
    • Qdisc 队列延迟
    • SKB 发送、接收延迟
  • 系统负载检测
    • 容器级别
    • 进程长期处于D状态
    • 进程 fork 异常突增
  • CPU 调度器
    • 争抢
    • 延迟
    • 系统调用
  • 中断关闭时长
    • 硬中断关闭时长
    • 软中断关闭时长
    • 直方图
  • 内存管理
    • kswapd 异步回收耗时
    • 直接回收,阻塞进程耗时
  • VFS/Block Device IO
    • IO 调度延迟
    • 设备响应延迟
    • 文件系统刷盘阻塞

这些观测点覆盖了网络、调度、内存、IO 和容器负载等常见故障域。对 SRE 来说,它们对应的是生产系统中最容易出现“应用看起来慢,但应用日志说不清楚”的位置。

之前 bcc 社区有一张内核观测的全景图,张老师也画了一张 HUATUO 的全景图,来阐释 HUATUO 关注的点:

下面是 HUATUO 采集的数据绘制的一些图表样例:

除了指标,还要采集异常事件,因为异常事件通常是更关键的东西,张老师罗列了个中思考:

HUATUO 也采集了一些异常事件,写入到 ElasticSearch 中,下面是一些样例:

AUTOTRACING:按需捕捉更高维问题

另外就是 AUTOTRACING,张老师也介绍了其中的一些思考:

解决哪些痛点:

  • 解决相比指标,事件,更高维度层面的,系统,业务应用的突增,偶发问题。

适合哪些内核子系统

  • CPUSYS,CPUIDLE,IO,Loadavg,容器争抢等

如何组织观测数据

  • 调用栈,火焰图?

损耗和有效性数据的平衡

  • 自动、按需触发执行

持续性能剖析 Continuous Profiling

另一个关键特性是持续性能剖析 Continuous Profiling,张老师介绍了其思考:

为什么需要持续性能剖析:

  • 持续的,可回溯的,全景的,全语言的性能剖析能力。

应用场景:

  • 性能分析,故障排查,放火演练,链路压测。

观测对象:

  • CPU使用,内存分配、内存分布,锁竞争。

基础技术要求:

  • 低损耗,零侵扰。

这里也取得了一些基本的成果:

GPU 大模型性能剖析

张老师也分享了 GPU 大模型性能剖析相关的内容。首先是挑战:

  • GPU 用户库,内核驱动闭源,关键信息难获取
  • 解释型语言,JIT 中间层
  • 发行版多,运行环境多,难统一
  • 零侵入训练推理框架
  • 指标统计 vs 性能剖析

GPU 这块是对一些关键 Python 函数做了埋点,效果如下:

对可观测性建设的启发

这次分享里有几个对可观测性建设很有价值的启发:

问题 HUATUO 的思路 对工程团队的价值
故障现场容易丢失 持续采集关键内核指标和异常事件 故障后能回看现场,而不是只靠复现。
工具很多但线索分散 从内核关键路径建立全景观测 减少在 top、perf、strace、tcpdump 等工具之间反复切换。
低损耗和有效性难平衡 选择关键观测点,按需触发追踪 避免为了观测引入过高性能开销。
AI/GPU 性能难剖析 对关键 Python 函数做埋点 在训练和推理场景中获得更多性能线索。

One more thing

HUATUO 项目目前是在孵化阶段,在滴滴内部已经产生了业务价值,对此项目感兴趣的朋友,可以联系我(我的微信:picobyte)拉入 HUATUO 社区的微信群。

延伸路径

继续看解决方案和产品对比

如果你正在做监控、可观测性或故障定位相关选型,建议从解决方案和产品对比继续往下看。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云