Google Orbit 项目:CPU性能分析工具深度指南
orbit C/C++ Performance Profiler 项目地址: https://gitcode.com/gh_mirrors/or/orbit
1. 工具概述
Google Orbit 是一款专业的 CPU 性能分析工具,主要用于识别应用程序中的 CPU 相关性能问题。该工具通过多种技术手段收集性能数据,包括:
- 调用栈采样(Callstack Sampling)
- 动态插桩(Dynamic Instrumentation)
- 内存追踪(Memory Tracing)
- GPU 驱动追踪(仅支持 AMD)
目前 Orbit 处于 Beta 测试阶段,主要支持 Linux 平台,Windows 平台的支持尚处于实验阶段,部分功能可能不可用。
2. 准备工作
2.1 运行环境要求
使用 Orbit 前需要确保:
- Orbit 主程序和 OrbitService 服务已正确构建并运行
- OrbitService 需要以 root 权限(Linux)或 Administrator 权限(Windows)运行
- 如需远程分析,需要通过 SSH 隧道将 TCP 端口 44765 转发到目标 Linux 服务器
3. 基础分析流程
3.1 连接目标进程
- 启动 Orbit 和 OrbitService
- 在连接窗口选择"本地分析"
- 从进程列表中选择目标进程(按 CPU 使用率排序)
- 点击"开始会话"进入主界面
主界面显示:
- 绿色标注的已选进程和实例
- "符号"标签页中的"模块"部分显示所有加载的模块
- 自动尝试加载所有模块的符号
3.2 基本捕获操作
- 点击播放按钮开始捕获
- 点击停止按钮结束捕获
- 捕获完成后,"采样"标签页自动显示收集的样本报告
3.3 调用栈解压方法选择
在"捕获选项"中可选择两种调用栈解压方法:
- DWARF(默认):功能全面但开销较大
- 帧指针:开销较小,但要求所有目标二进制文件(应用程序和库)都使用
-fno-omit-frame-pointer
编译标志编译
4. 捕获数据分析
4.1 捕获标签页详解
捕获标签页显示时间轴上的各种事件轨迹:
-
调度器轨迹:显示所有 CPU 核心上的线程活动
- 分析进程的线程使用彩色标注
- 其他线程显示为灰色
- 可点击选择特定线程
-
GPU 轨迹(仅 AMD):显示 GPU 驱动事件
- 作业入队时间
- GPU 硬件入队时间
- 实际执行时间
-
线程轨迹:显示样本分布和插桩函数时序
- 事件条:显示该线程的所有调用栈样本
- 白线:表示该线程中采集的样本
- 火焰图:显示插桩函数的精确时序
4.2 调用栈样本分析
4.2.1 自上而下视图
显示应用程序的调用树及每个函数的相对耗时:
- 顶层按线程组织
- 展开线程显示其起始函数
- 展开函数显示其被调用者
显示三个关键指标:
- 包含性(Inclusive):函数及其所有被调用者的相对耗时
- 排他性(Exclusive):仅函数本身的相对耗时
- 占父级比例:该函数调用对调用者及其被调用者耗时的影响
4.2.2 自下而上视图
显示应用程序耗时最多的方法/函数及其调用者:
- 顶层显示所有出现在调用栈顶部的函数
- 展开函数显示其调用者
- 结构关系与自上而下视图相反
显示两个关键指标:
- 包含性:函数及其所有调用者的相对耗时
- 占父级比例:该函数调用对被调用者所有调用者的相对影响
5. 高级分析技巧
5.1 动态函数插桩
通过动态插桩获取精确的时序信息:
- 在"符号"标签页搜索目标模块(如 libvulkan.so)
- 确保模块符号已加载(状态显示"Loaded")
- 在"函数"面板搜索目标函数(如 vkQueue*)
- 右键选择函数并点击"Hook"
- 开始新的捕获,插桩函数调用将显示在时间轴上
5.2 预设功能使用
保存和加载插桩函数预设:
- 通过"文件 > 保存预设为..."保存当前插桩配置
- 右键预设选择"加载预设"应用到当前进程
- 可同时加载多个预设
5.3 迭代器功能
- 在"实时"标签页右键函数统计行选择"添加迭代器"
- 使用箭头按钮在函数调用实例间导航
- 可添加多个迭代器并使用"所有函数"按钮同步移动
5.4 帧分析
使用特定函数作为帧边界:
- 选择作为帧标记的函数(如 vkQueuePresentKHR)
- 添加两个迭代器定义帧边界
- 使用"所有函数"箭头按钮在帧间导航
- 帧区域会高亮显示并显示时间差
6. 性能优化建议
- 对于频繁调用的关键函数,优先使用帧指针解压方法降低开销
- 分析长时间帧时,添加多个迭代器标记不同处理阶段
- 结合自上而下和自下而上视图全面理解性能瓶颈
- 对于图形应用,重点关注 GPU 轨迹与 CPU 处理的同步情况
通过 Orbit 的这些功能,开发者可以深入分析应用程序的 CPU 性能特征,准确定位性能瓶颈,并进行有针对性的优化。
orbit C/C++ Performance Profiler 项目地址: https://gitcode.com/gh_mirrors/or/orbit
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考