source: lab.git/Commentary/kernelvm/20130413.log @ 4181361

trunk
Last change on this file since 4181361 was 4181361, checked in by mitty <mitty@…>, 12 years ago
  • memo for 8th Kernel/VM expedition
  • about ftace snapshot

git-svn-id: https://lab.mitty.jp/svn/lab/trunk@205 7d2118f6-f56c-43e7-95a2-4bb3031d96e7

  • Property mode set to 100644
File size: 5.4 KB
Line 
1豊岡拓
2
3    ftrace snapshotを作った、Kernel 3.9で利用可能になる
4   
5    トレースとは
6        この発表においては、プログラムの実行を理解する上で有益なデータをバッファ等に記録すること
7    用途
8        デバッグ
9        障害解析
10            常時トレースを動かしておき、システムが停止した時にダンプを用いて理由を解析する
11        性能解析
12            どこが時間を食っているのか
13            ボトルネック解析
14    ftrace
15        カーネルに組み込まれているトレース機構
16        元々はRTツリーのFunction tracerから始まった (なのでftrace)
17        現在では様々なトレース機能が統合されている
18            Events
19            Latency
20                最大の割り込み禁止期間を知りたい
21            Stack
22            Block, mmio
23            Dynamic events
24                好きなところにbreakpointを設置
25    Trace Events
26        あらかじめ埋め込まれたトレースポイントを踏んだ時にイベントを記録
27        現在のLinux Kernelでは500以上が設定されている
28            syscallを含めるともっと
29        Kernelの中のTrace bufferに記録される
30        記録されるデータ
31            PID
32            CPUID
33            タイムスタンプ
34            イベント名
35            イベント毎の引数
36        Kernelsharkというツールで可視化出来る
37            Fedoraには標準である
38    Function Tracer
39        カーネル内の全ての関数呼び出し・リターンを記録出来る
40        コールグラフ、処理時間が分かる
41    Irqsoff Tracer
42        最大の割り込み禁止区間を検出
43        「最大で8013us発生したよ」
44            RTOSだとかなり大きい遅延
45    ftraceの全体像
46        hook mechanisms
47            mcount
48            tracepoint
49            kprobes
50            (uprobes)
51        plugin tracers
52            function
53            irqsoff
54            wakeup
55        stack trace
56        trace event
57        common components
58            debugfs I/F
59            ring buffer
60    debugfs経由で操作
61        /procの様なもの
62        疑似ファイルをecho, catする
63        trace-cmd
64    /sys/kernel/debug/tracing/ 以下にファイルが出来る
65    current_tracer
66        どのpluginを使うか指定する
67    トレースバッファ
68        ロックレスリングバッファ
69        記録を読み出しを並行して行える
70    # cat trace するだけでバッファを読み出せる
71        テキスト形式
72        バッファ内のデータは消費されない
73        書き込み可能、かつO_TRUNCでopenするとクリア
74            # echo > trace
75    trace_pipe
76        traceに似ている
77        バッファ内のデータを読んだ際に消費する
78    trace_pipe_raw
79        バイナリ形式で生の情報を出力する
80        splice(2)でゼロコピー転送が可能
81        cpu毎のI/Fしかない
82            一度に全部のCPUを読み込むことは出来ない
83    options/
84        options/overwrite
85            バッファが満杯になった時に上書きするか、記録をやめるか
86            1 -> 古いイベントを捨てる (デフォルト)
87            0 -> 記録停止
88    events/
89        イベントの有効・無効を制御
90    filter
91        特定の条件を満たすイベントだけを記録出来る
92    trace_marker
93        ユーザ空間からトレースバッファにイベントを記録する
94        write(2)で好きな文字列を書き込むだけで記録出来る
95        アプリケーションの動作チェックなどに有用
96    最近入った・入る予定の機能
97    Kprobes event(2.6.33~)
98        動いているカーネルに動的に好きな場所にイベントを埋め込める
99        カーネルの改造不要
100    Uprobes event (2.6.35~)
101        Kprobesのユーザ空間番
102        アプリケーションの改造不要
103        Ojbdumpなどでアドレスを持ってくる必要がある
104    Snapshot(3.9~)
105        トレースを止めずに、ある瞬間のバッファのスナップショットを取る機能
106        予備のトレースバッファを用意しておいて、好きなタイミングで切り替える
107    # echo 1 > snapshot
108        これだけでスナップショットが取られる
109        この際に予備のバッファも割り当てられる
110        バッファの割り当て時間が気になる場合は、あらかじめ1を書いてバッファを確保しておくと良い
111    Multi-buffer(3.10~?)
112        トレースバッファを用途別に複数個使い分ける機能
113        今までは一つのグローバルバッファしかなかった(せいぜいCPU毎)
114        バッファの個数はmkdir/rmdirで動的に変更可能
115        # cd instances/; mkdir buf_1
116        今のところ、Trace Eventsのみ利用可能
117    Function-trigger
118        特定の関数が呼ばれた時にアクションを起こす
119        トーレス全体のOn/Off
120        特定のイベントが呼ばれたらトレースイベントをOn/Off
121        スナップショットを取る
122        スタックトレースを取る
123        # echo 'vfs_read:snapshot:1' > set_ftrace_filter
124    trace_clock
125        タイムスタンプの種類を変更出来る
126        基本的にはTSCベース
127        local -> CPU間で同期を取らない
128        global -> ロックを取って同期させる
129        counter -> 順番だけを見たい時
130        x86-tsc (3.8~) -> 生のTSC
131            local/globalはTSCをマイクロ秒などに変更している
132        uptime -> jiffersだけなので軽い
133        perf -> perfと同じタイムスタンプをつける
134    Q/A
135        オーバーヘッドはどれくらいか
136            どれくらいのイベントをOnにするかによる
137            取りたいイベントをあらかじめOnにして、その後負荷の具合を見ながら調整する
138        記録する際にロックを取るなどによりメモリ帯域を食ってしまうことはないか
139            基本的にCPU間でロックを取ることはない(ロックレス)
140   
Note: See TracBrowser for help on using the repository browser.