# trace-cmd
trace-cmd は [[Steven Rostedt]] らが開発したオープンソースの [[Ftrace]] フロントエンドである。トレーシングシステムとバイナリ出力形式(`trace.dat`)の設定、その他の機能のためのサブコマンドとオプションを持つ。イベントソースとしてトレースポイントや構成済みの kprobe・uprobe に加え、Ftrace の関数トレーサーと関数グラフトレーサーを使える。(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 14 Ftrace]] §14.11)
## 主なサブコマンド
| サブコマンド | 説明 |
|---|---|
| `record` | トレーシングして `trace.dat` ファイルに記録する |
| `report` | `trace.dat` ファイルからトレースを読み出す |
| `stream` | トレースして結果を標準出力に表示する |
| `list` | 対応しているトレーシングイベントのリストを表示する |
| `stat` | カーネルのトレーシングサブシステムの状態を表示する |
| `profile` | トレースして、カーネルの時間・レイテンシ情報を表示するカスタムレポートを生成する |
| `listen` | ネットワークからのトレース要求を受け付ける |
(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 14 Ftrace]] §14.11.1、表14-5)
## perf(1) との比較
trace-cmd は関数/関数グラフトレーシングに完全対応し、ネットワークを介したクライアント/サーバー機能を持つ。一方 PMC(パフォーマンスモニタリングカウンタ)や時間ベースサンプリングには対応せず、kprobe/uprobe/USDT は tracefs の `events` に既に存在する場合のみ部分対応となる。[[perf]](1) はこれと逆の得意分野を持ち、両者は補完関係にある。(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 14 Ftrace]] §14.11.3、表14-6)
## GUI: KernelShark
trace-cmd のデフォルト出力ファイル `trace.dat` を可視化する GUI が [[KernelShark]] である。CPU ごとのタイムラインとイベント表を対話的にズーム・検索でき、スレッド間相互作用によるパフォーマンス障害の究明に役立つ。(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 14 Ftrace]] §14.11.5)
## 関連
- 出典: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 14 Ftrace]]
- エンティティ: [[Ftrace]] / [[Steven Rostedt]] / [[KernelShark]] / [[perf]]