1、mmperf:Android系统上基于eBPF的性能观测实践第三届 eBPF开发者大会w w w.e b p f t r a v e l.c o m中 国 西 安荣耀终端|OS Kernel Lab 李志卫/夏兵作者介绍 李志卫:Android系统性能优化专家,eBPF技术爱好者,有多年嵌入式系统和Android系统优化经验,乐于构建可复用的基础观测能力。夏兵:性能工程专家,eBPF技术爱好者,致力于让性能分析与优化变得更简单。在系统性能可观测、性能剖析与自动化诊断等领域有多年的实战经验。3Android系统性能背景:用户使用场景丰富,硬件资源受限硬件资源受限的条件下:如何满足复杂多变的用户诉
2、求?如何观测瓶颈点?现有观测工具:trace/perfetto/simpleperf/.4目录应用空间内核空间mmperfVerifiermapskprobetrace pointuprobeperf eventkernel programclient programdatacollection数据处理统计分析数据提取人工分析结合场景场景规则发现问题自动规则方案优化量化评价可视呈现统计呈现业务维度资源维度场景维度性能场景信息可视化数据资源 观测端侧自动诊断预警需求分析设计开发成果展示经验分享mmperf框架端侧离线数据分析5mmperf需求来源:Android性能观测诉求收集6 长时观测 精细
3、拆解 资源统计 场景维度 业务维度 资源维度mmperf需求设计:多维度分解,长时间观测,概率学统计7mmperf设计目的:差异化诉求,低开发量,实用为主维度mmperfsimpleperfperfetto/systracebcc/bpftrace/.设计目的基于eBPF的耗时,计数和调用栈观测分解到时间和任务多功能的性能观测工具调用栈和短时间观测为主基于ftrace/atrace的性能观测工具易用的eBPF观测工具设计能力 轻量级,长时间,可商用 观测目标基于任务和时间轴 数据库查询接口 非实时编译 周期性采集调用栈,PMU等相关信息 形成record或者status的汇聚。无需编译 采集f
4、trace/atrace 交互式UI呈现 数据库查询接口 接入了更多的关联信息 采集eBPF数据 使用简单的脚本语言或者结合c语言进行数据呈现 实时编译优点 灵活的观测目标与条件 灵活的数据聚合 与用户场景关联 结合调度信息 有数据库查询能力支持 体积小(xxxKB)采集信息丰富,包含调用栈 当前也有很好的UI工具,如firefox profiler等 功能丰富 高速迭代 优雅的UI呈现 Android设备主要分析工具 有强大数据库查询能力支持 语法简洁,学习成本较高 能做很多常见的简单的数据汇聚缺点 目的性强,功能单一 信息不如现有工具丰富 UI简陋,未来考虑接入perfetto 数据量大,
5、开销高 数据量较大 依赖编译环境 Android系统默认无法直接使用应用难度 低*低 低 低 Android系统部署难度中等建议场景 长时间观测指定目标,进行概率统计与分析 需要基于时间和任务的分解与聚合 需要量化观测目标与用户场景的关系 短时间观测指定目标的调用栈,PMU等信息 短时间观测性能场景(现有trace信息可满足分析诉求)复杂的综合因素分析 有明确的自定义观测目标。可复现的故障现场8多目标观测多目标联动灵活的条件UI微观分析DB宏观统计场景结合墙上运行时长实际运行时长一次采集,多维使用汇聚灵活,降低开销数据汇聚调度集成快速开发呈现与分析mmperf设计目标:抽象为公共框架以便快速开
6、发无侵入式观测观测分析效率观测开销影响调度影响感知场景关联分析9mmperf中能力的抽象与设计:以运行时长统计为例开发视图运行视图 抽象观测目标 多任务并行记录 提取调度信息 数据内核汇聚观测目标调度影响数据汇聚10mmperf分层设计:充分借助eBPF高效灵活的数据采集优势端侧数据采集离线数据转换数据统计呈现11mmperf分层设计:内核态观测目标(OT)辅助接口(API)关联调度(Sched)数据汇聚(MAP)CO-RE支持 RingBuffer支持 memcpy/strchr支持12mmperf分层设计:用户态接收器记录器管理器 BpfLoader CallstackUnwinder R