---
tags: Linux Kernel Internals, 作業系統
---
# Linux 核心設計: 追蹤與測試工具
## Perfetto
### 安裝 Perfetto
[Perfetto](https://perfetto.dev/) 是一款可以針對 Android 和 Linux 環境進行系統追蹤和分析的工具。在 Linux 環境上,可以參考 [Perfetto build instructions](https://perfetto.dev/docs/contributing/build-instructions) 頁面一步步進行安裝。
針對跨平台的環境,則可以參考 [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)