1 / 16

OS カーネル用 アスペクト指向システムの 設計・実装方法

OS カーネル用 アスペクト指向システムの 設計・実装方法. 柳澤 佳里* 光来 健一* 千葉 滋* * 東京工業大学大学院情報理工学研究科 数理計算科学専攻. カーネル用アスペクト指向システム の必要性. 通信処理の詳細なログ出力を楽に取れるシステムがほしい カーネル内の処理の流れに沿って経過時間を調査したい E.g.) システムコールからデバイスまでの処理をプロファイリング 関数出入り時にログをとるシステムがほしい 特定の関数呼び出しで panic する原因を調査したい. カーネル用アスペクト指向システム. ログコードと挿入箇所をアスペクトとして記述

habib
Download Presentation

OS カーネル用 アスペクト指向システムの 設計・実装方法

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. OSカーネル用アスペクト指向システムの設計・実装方法OSカーネル用アスペクト指向システムの設計・実装方法 柳澤 佳里* 光来 健一* 千葉 滋* *東京工業大学大学院情報理工学研究科 数理計算科学専攻

  2. カーネル用アスペクト指向システムの必要性 • 通信処理の詳細なログ出力を楽に取れるシステムがほしい • カーネル内の処理の流れに沿って経過時間を調査したい E.g.) システムコールからデバイスまでの処理をプロファイリング • 関数出入り時にログをとるシステムがほしい • 特定の関数呼び出しでpanicする原因を調査したい

  3. カーネル用アスペクト指向システム • ログコードと挿入箇所をアスペクトとして記述 • カーネル本体から分離して記述できる • アスペクトを動的に挿入、削除 • 再起動不要 • 挿入箇所以外の実行時オーバーヘッドは低い • アスペクトとしてまとめて関連箇所にコード挿入、削除 • 入れ忘れやとり忘れを防ぎやすい • Eg) *_output関数呼び出しの箇所すべて、など

  4. カーネル用アスペクト指向システムの概要 アスペクト記述 OSカーネル • ポイントカット位置の検索 • ポイントカット位置とアドバイスの対応付け コンパイル weave アスペクト (カーネル内部表現) • カーネル内表現 • ポイントカット記述子 • コンパイル済みアドバイス

  5. Call/executionポイントカットの実現方法 • 関数呼び出し箇所、実行箇所にてアドバイスを実行 • 実現方法: ブレークポイント トラップ(BPT) 実行時 (a) BPTの発生 • Weave時 • 元の命令の保存 • BPTの挿入 BPT trap(..) { exec_advice() exec_inst() } (b)adviceの実行 (c)Weave時に 保存した命令の実行

  6. ブレークポイントによる実現の利害 • 利点 • 実行フローを破壊しない • Jmp/call命令(5byte命令)で実現すると飛び先を上書きする恐れ • ブレークポイント命令は1byte命令 • Weaveした点以外の実行時間は不変 • Weaveした点のみコード書き換え • 欠点 • ブレークポイント命令の実行は遅い • カーネルではプロセス間のコンテキストスイッチが無い分だけ軽い } mov $0x1, %eax call func 0 … jmp label1

  7. Set/getポイントカットの実現方法 • 変数の代入、参照箇所でアドバイスを実行 • デバッグレジスタによる実現 • ポイントカットする変数のアドレスをデバッグレジスタに登録 • デバッグレジスタに格納されたアドレスへのアクセスでトラップ • ページフォールト トラップによる実現 • ポイントカット箇所の入ったページを書き込み/読み込み禁止に設定 • ページへの読み書きでページフォールトトラップ (b)割り込み trap(..) { advice} mbuf領域 (a)アクセス Weave時に アクセス禁止設定

  8. ページフォールトによる実現の利害 • 利点 • ポインタによるアクセスにも対応可能 • 静的な解析ではわからない • ポインタによる変数アクセスの箇所すべてでステップ実行が必要 • 欠点: 実行時オーバーヘッド • 同一ページ内の関係ない変数アクセス時も発生 • Mbuf全体への使用ではオーバーヘッド小 • Mbuf領域は連続して確保 • Mbuf領域はページあたりの個数が小

  9. 実験I: 割り込みと関数呼び出しの比較 • 関数呼び出し(call命令)、ブレークポイント割り込み(int3命令)にかかる実行時間時間の比較 • カーネル内部で実験 • 実験時はsti命令でその他の割り込みの禁止 • 実験環境 • CPU: Athlon XP 2200+, Mem: 1GB • FreeBSD 5.2.1R-p8 • 実験結果

  10. 実験II: 割り込み挿入時のネットワーク処理性能 • ブレークポイント割り込み挿入時のTCPスループットを測定 • ip_outputへのint3の埋め込み数を変えて実験 OS: FreeBSD 5.2R CPU: Athlon 2200+ Mem: 1GB NIC: Intel Ethernet Pro OS: FreeBSD 4.10R CPU: Athlon 2200+ Mem: 1GB NIC: Intel Ethernet Pro Network 100Mbps switching-HUB

  11. 実験結果II: 割り込み挿入時のネットワークの性能低下の調査 • 300回以下の割り込み数ではスループットの低下無し • 300回以上ではほぼ線形に性能劣化 スループット(Mbps) 割り込みの数

  12. まとめ • カーネル用アスペクト指向システムの提案 • ブレークポイントトラップによりExecution/callポイントカットを実現 • デバッグレジスタ、ページフォールトトラップによりSet/getポイントカットを実現

  13. 今後の課題 • 実装 • 性能評価 • 作成したシステムを用いてリモートログインとバルク通信の競合を調査 • データ構造が変化しても追跡してロギング • E.g.) Network I/Oでは配列からmbufへのデータが変化 • 利用者からヒントをもらうとできる? • 利用者は前後にポイントカットを挿入可能

  14. 関連研究(1) • Aspect指向言語 • AspcetC++ [Olaf ’02] • コンパイル時にweaveを行う • 実行時に必要となった箇所へのログ埋め込みは不可 • μDyner [Marc ’03] • 動的にweaveを行う • コンパイル時に関数の頭にnop命令を挿入しておく • コンパイル時に決めた箇所のみweave可能 • Nop命令の実行によりweaveしていない時でも性能劣化

  15. 関連研究(2) • カーネルロガー • LKST [畑崎 ’03]、 KTR • 決められたイベントの箇所でのみログ出力可能 • カーネルレベルでのコード挿入 • Kerninstd [Ariel ’02] • カーネル内のほぼ任意の箇所にコード挿入 • 基本ブロックの解析をしてjmp命令で実装 • 機械語レベルに挿入するので使いにくい

More Related