95d1aa9da6df83bfb9670accc3a748998695d107
[lab.git] / Commentary / kernelvm / 20130413.log
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
141
142 @Fantom_JAC
143 いまさら聞けないZigBee
144         ZigBeeは日本では名前しか知られてない
145         というか、まともな日本語の本も出ていない
146         
147         ZigBeeの特徴
148                 日本で流行っていない
149                 802.15.4と混同される
150                 BluetoothやWiFiに押され気味
151                 年会費高い
152                 etc...
153         ZigBeeの歴史
154                 ZigBee 2004とZigBee 2006は互換性がない
155                 今年 ZigBee IPが出た
156         ZigBee三大要素
157                 IEEEで決まっているのはPHYとMACで決まっている (802シリーズ)
158                 それより上はアライアンスで決めた
159                 NWK
160                         この層がZigBeeとしてもっともよく知られた層
161                 APL
162                         この層が全然理解されていない (後方互換性が無いのはここ)
163                         APS, ZDO, ZCL
164         802.15.4とは
165                 IEEEが策定したPAN標準
166                 802.15.1 -> Bluetooth
167                 802.15ワーキンググループ (WPAN)
168                 別名Low Rate WPAN
169                         速度を犠牲にして消費電力を減らす
170                 2.4GHz
171         NWK Layer
172                 メッシュを実現している層
173                 ルーティング・ネットワークの管理
174                 どのようなネットワークトポロジーになっているかはあまり重要ではない
175                 世の中に出回っているのはほとんどZigBee Pro
176                         毎回ルーティングを探す
177                 NLDE
178                         ふつうのData Entity
179                         フレーム作ってセキュリティ掛けたり
180                 NLME
181                         ネットワークの開始・参加・離脱
182                         PAN IDの管理
183                         ルート探索
184                         ルーティング
185         ZigBee Network
186                 Coordinator
187                 Router
188                 EndDevice -> 電気を食わない
189         Coordinator
190                 ネットワークに常に一台しか居ない
191                 802.11におけるAPのようなもの
192                 常にOn -> スリープ出来ない
193                 基本的にPCだったりして、ゲートウェイ的働きをする
194         Router
195                 ネットワークを作成出来ない他はCoordinatorと同じ
196         EndDevice
197                 ネットワークを作成出来ない
198                 子ノードを持つことが出来ない
199                 ルーティング出来ない
200                 通常はスリープ状態
201                 普段はメッセージを受信することが出来ない
202         Coordinator/RouterからEndDeviceにメッセージを投げると、直接届いているように見える
203                 実はメッセージは親を経由する
204                 EndDeviceはスリープから復帰した時、自分で取りに行く
205                         メールチェックのような仕組み
206         宛先のEndDeviceが取りに来なかったら、無慈悲に削除される
207         デフォルトタイムアウトは7680ms
208         何とかしてすぐに送りたい
209                 たぶんWakeupボタンみたいなのがあるはず
210                 Wakeupボタンを押すと…
211                         DoSのように何度も読みに行くだけ
212         FAQ
213                 消費電力について
214                         Coordinator/Routerは常にRXはON
215                         電池がどんどん減る
216                         極力スリープ状態を長くすることでしか解決出来ない
217                         Wakeupを5分毎くらいにすると、半年くらいは電池が持つようになる
218                 PANIDが2つ(?)
219                         16-bit PANID
220                         MACアドレスで使われるネットワーク識別ID
221                 アドレスが二つ?
222                         IEEE adressとNetwork address
223                         IEEE -> いわゆるMAC adress (64bit)
224                         Network adress IPスタックにおけるIPアドレスのようなもの
225         APL Layer
226                 アプリケーション層
227                 ZigBee最大の特徴
228                 APS、Application Framework (ZDO/ZCL)の二つに分かれている
229                 アプリケーションフレームワークがプロトコルレベルで決まっている
230                         ZigBeeは単なる「通信方式の一つ」ではない
231                 ビジネスに直結する仕様が策定されている
232                         アライアンスの存在意義
233                 モダンな設計
234                         オブジェクト指向の概念がふんだんに取り入れられている
235         APS Layer
236                 上位のフレームワーク層と直接やりとりする層
237                 Binding, Group Management, etc...
238                 Endpoint毎にユーザのアプリケーションが格納される
239                 Binding
240                         あるApplication Objectと別のそれをリンクする
241                         単一方向
242                         多重バインディング
243                 Binding Table
244         Group Addressing
245                 複数のApplication Objectに対して一括送信したい
246                 基本的にブロードキャスト、受信側が責任を持ってフィルタする
247                 Group Table
248         APS ACK
249                 信頼性を高める
250                 ACKタイムアウト時に再送
251         Fragmentation
252                 名の通りデータのフラグメント化
253                 実装されていないこともある
254                 ウィンドウサイズがあったりと、TCPに似ている
255         Security
256                 これだけで仕様書別になっているので、今回は省略
257         Application Framework
258                 Cluster
259                         「機能」を指し示すような概念
260                         Application Objectが外部にどのような機能を提供するか
261                         Application Objectには必ずClusterが一つ以上ある
262                         ZCLにおいては「クラス」に近い概念
263                 Profile
264                         Clusterの集まりを定義
265                         クラスに対するパッケージに近い概念
266                         APSメッセージはCluster IDとProfile IDを指定する必要がある
267         ZigBee Device Object
268                 USBのEndpoint0と似ている
269                 Application Objectの実装
270                 ZDOとZDPは違う概念
271                 ユーザが作成するApplication Objectは通常APSDE以外触れることが出来ない
272                         サンドボックスの様な仕組み
273                         別途ZDOを経由する
274         ZigBee Cluster Library
275                 ユーザが作成するApplication Objectの実質的な仕様、枠組み
276                 必ずサーバとクライアントが対になって通信しなければいけない
277                 Profile固有のClusterと共通のClusterが存在する
278         ZigBee IP
279                 つまらないので省略
280         Pure Java ZigBee Application Framework: Bekko (LGPL)
281         アライアンス入会とは?
282                 ZigBeeを名乗るプロダクトを開発する権利
283                 HAやSE等PAPプロダクトを開発する権利
284                 ただし、非営利目的であれば入会不要
285                 営利目的であっても既に認定を受けたプロダクトを利用するだけなら入会不要
286                         XBeeは入会不要
287         Q/A
288                 有名なプロダクト例
289                         日本で市販はされていない
290                         BluetoothやWiFiとは違い、P2Pが目的なので、コンシューマ向けではない
291                         アメリカにおいては、Control4Cが、「一戸建て建てる時にZigBee組み込みませんか」みたいなキャンペーンはしている
292                         蛍光管をLEDに代える際に、ZigBee組込みで、配線無しでOn/Off出来る製品とか
293                         日本ではMAKEというイベントに行けば見れるかも
294
295