剖析 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*)
    

啟動並附加至目標

Pid、Tid 和工作 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'