分析 CPU 使用率

ffx profiler 是一款实验性工具,可让您查找和直观呈现代码中的热点。CPU 性能分析器会定期对正在运行的线程进行抽样并记录回溯,您可以使用 pprof 工具查看这些回溯。

教程

如需在 Fuchsia 环境中启用和使用 CPU 性能分析器,请执行以下操作:

  1. 使用 fx set 命令向 Fuchsia 配置添加一些额外的参数,例如:

    fx set <PRODUCT>.<BOARD> \
    --release \
    --args='experimental_thread_sampler_enabled=true'
    • experimental_thread_sampler_enabled=true 支持实验性内核辅助采样,可显著降低采样开销。
  2. 使用 ffx profiler 命令与 CPU 性能分析器进行交互,例如:

    ffx profiler attach --pid <TARGET_PID> --duration 5

    此命令会对 <TARGET_PID> 进行 5 秒钟的性能分析,然后在当前目录中创建一个 profile.pb 文件,该文件可交给 pprof 工具。

  3. 使用 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

此命令会附加到所有指定的 pidstidsjob_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'