--- tags: Linux Kernel Internals, 作業系統 --- # Linux 核心設計: 追蹤與測試工具 ## Perfetto ### 安裝 Perfetto [Perfetto](https://perfetto.dev/) 是一款可以針對 Android 和 Linux 環境進行系統追蹤和分析的工具。在 Linux 環境上,可以參考 [Quickstart: Record traces on Linux](https://perfetto.dev/docs/quickstart/linux-tracing) 頁面一步步進行安裝。 針對跨平台的環境,則可以參考 [Perfetto build instructions: Cross-compiling for Linux ARM/64](https://perfetto.dev/docs/contributing/build-instructions#cross-compiling-for-linux-arm-64) 的方式。以目標為 ARM64 的平台為例,Perfetto 的跨平台編譯真的很友善。首先我們可以使用下面的命令取得 Perfetto 以及相關的工具。 ``` $ git clone https://android.googlesource.com/platform/external/perfetto/ && cd perfetto $ tools/install-build-deps --linux-arm ``` 接著,透過此命令產生設定檔: ``` $ tools/gn args out/linux ``` 在設定檔中加入以下的參數。更多參數設定的細節可見 [Build configurations](https://perfetto.dev/docs/contributing/build-instructions#build-configurations)。 ``` target_os = "linux" target_cpu = "arm64" is_debug = false ``` 完成設定後,以下的命令即可建立進行基礎追蹤所需的工具! 或者也可以執行 `tools/ninja -C out/linux` 來建立所有 Perfetto 涵蓋的工具。 ``` $ tools/ninja -C out/linux tracebox traced traced_probes perfetto ``` ### 使用 Perfetto 追蹤 Linux 運行 追蹤的方式可以參考如下作法。這裡我們使用範例的 `scheduling.cfg` 設定檔來追蹤與排程器相關的一些事件。參考 [TraceConfig](https://perfetto.dev/docs/reference/trace-config-proto) 可得知設定檔的更多相關語法。 ``` $ sudo chown -R $USER /sys/kernel/tracing $ out/linux/tracebox -o trace_file.perfetto-trace --txt \ -c test/configs/scheduling.cfg ``` 此命令的輸出會被導向到 `trace_file.perfetto-trace` 檔案。將輸出檔案匯入到 [Perfetto UI](https://ui.perfetto.dev/) 即可看到追蹤結果的視覺化展現,相當方便! > * [Perfetto: Swiss Army Knife for Linux Client Tracin](http://lalitm.com/perfetto-swiss-army-knife/) ## Scheduler > * [Hackbench](https://hackmd.io/Rq-sfre_R9aFmG6vaS1z5Q#Hackbench) > * [Schbench](https://hackmd.io/Rq-sfre_R9aFmG6vaS1z5Q?view#Schbench) ## Linux Test Project(LTP) [Linux Test Project](https://github.com/linux-test-project/ltp/tree/master) 是由 IBM, Cisco, Fujitsu, SUSE, Red Hat, Oracle 等等知名公司所一同開發與維護的專案。其整合一系列與測試 Linux kernel 相關的工具,因此可以提供對 Linux 的全面性測試。 安裝方式可參照 README.md 的說明: ``` $ git clone https://github.com/linux-test-project/ltp.git $ cd ltp $ make autotools $ ./configure ``` 如果想要一口氣將所有的 test 都安裝上,可以透過以下方式。 ``` $ make $ make install ``` 不過由於 LTP 測試項目眾多,我們也可以只選擇有興趣的項目來執行。舉例來說,假設我們只對測試 Hackbench 有興趣,可以直接移動到對應資料夾下並 `make` 必要的項目即可: ``` $ cd testcases/kernel/sched/cfs-scheduler $ make $ PATH=$PATH:$PWD ./hackbench ``` ## bpftrace ## retsnoop ## drgn [drgn: 探索與除錯 Linux 核心的利器!](https://hackmd.io/@RinHizakura/r1gEFgprkx)