ffx profiler
是一款实验性工具,可让您查找和直观呈现代码中的热点。CPU 性能分析器会定期对正在运行的线程进行抽样并记录回溯,您可以使用 pprof
工具查看这些回溯。
教程
如需在 Fuchsia 环境中启用和使用 CPU 性能分析器,请执行以下操作:
使用
fx set
命令向 Fuchsia 配置添加一些额外的参数,例如:fx set <PRODUCT>.<BOARD> \ --release \ --args='experimental_thread_sampler_enabled=true'
experimental_thread_sampler_enabled=true
支持实验性内核辅助采样,可显著降低采样开销。
使用
ffx profiler
命令与 CPU 性能分析器进行交互,例如:ffx profiler attach --pid <TARGET_PID> --duration 5
此命令会对
<TARGET_PID>
进行 5 秒钟的性能分析,然后在当前目录中创建一个profile.pb
文件,该文件可交给pprof
工具。使用
pprof
可导出到各种格式,包括文本和交互式火焰图,例如:pprof -top profile.pb
此命令会生成类似于以下内容的输出:
Main binary filename not available. Type: location Showing nodes accounting for 272, 100% of 272 total flat flat% sum% cum cum% 243 89.34% 89.34% 243 89.34% count(int) 17 6.25% 95.59% 157 57.72% main() 4 1.47% 97.06% 4 1.47% collatz(uint64_t*) 3 1.10% 98.16% 3 1.10% add(uint64_t*) 3 1.10% 99.26% 3 1.10% sub(uint64_t*) 1 0.37% 99.63% 1 0.37% rand() 1 0.37% 100% 1 0.37% <unknown> 0 0% 100% 157 57.72% __libc_start_main(zx_handle_t, int (*)(int, char**, char**)) 0 0% 100% 154 56.62% _start(zx_handle_t) 0 0% 100% 160 58.82% start_main(const start_params*)
启动并附加到目标
Pids、Tids 和 Job ID
开始使用最简单的方法是附加到 koids
:
ffx profiler attach --duration 5 --pids 123,1234,234 --tids 345,234 --job-ids 123
此命令会附加到所有指定的 pids
、tids
和 job_ids
。如果指定了 pids
,性能分析器还会附加到进程中的每个线程。如果指定了 job_ids
,性能分析器会附加到作业中的每个进程和线程,还会附加到每个子作业以及子作业中的每个进程和线程。
如果您不知道自己的 pid
,可以尝试使用以下命令进行识别:
ffx target ssh ps | grep fuchsia_microbenchmarks
组件
性能分析器可以使用现有组件的标识名或网址附加到该组件,例如:
ffx profiler attach --moniker core/ffx-laboratory:your_component
ffx profiler attach --url 'fuchsia-pkg://fuchsia.com/your_component#meta/your_component.cm'
性能分析器还可以启动您的组件,并在其准备就绪后立即附加到该组件,例如:
ffx profiler launch --duration 5 --url 'fuchsia-pkg://fuchsia.com/your_component#meta/your_component.cm'