source: lab.git/Commentary/kernelvm/20130413.log @ 5ab4cdf

trunk
Last change on this file since 5ab4cdf was 5ab4cdf, checked in by mitty <mitty@…>, 11 years ago
  • memo for 8th Kernel/VM expedition
  • add about ZigBee

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

  • Property mode set to 100644
File size: 11.6 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
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
Note: See TracBrowser for help on using the repository browser.