dtrace でもっとインタラクティブシェル!

37
dtrace もっとインタラクティブシェル! 2010/12/16 kei <http://apribase.net>

description

dtrace でシステムコールをフックして zsh を喋らせながら使い方を覚えました。

Transcript of dtrace でもっとインタラクティブシェル!

Page 1: dtrace でもっとインタラクティブシェル!

dtrace でもっとインタラクティブシェル!

2010/12/16 kei <http://apribase.net>

Page 2: dtrace でもっとインタラクティブシェル!

自己紹介

Mandriva Linux や on JVM 言語好き

最近は割と雑食

今日は OpenSolaris 寄りなお話

Page 3: dtrace でもっとインタラクティブシェル!

まずはこれを見てほしい

Page 4: dtrace でもっとインタラクティブシェル!

さっきはなにやったの?

Page 5: dtrace でもっとインタラクティブシェル!

さっきはなにやったの?dtrace を使って

システムコールをフックしました!

コマンド実行時に声を出してくれます。

Page 6: dtrace でもっとインタラクティブシェル!

なんでつくったの?人よりシェルと話す時間のが長くて寂しかった。

声が聞きたくなるじゃない、

人間だもの (´・ω・`)

# 教育用サンプル作成が本当の目的

Page 7: dtrace でもっとインタラクティブシェル!

dtrace ってなに?システム情報取得のための

トレースツールです

Page 8: dtrace でもっとインタラクティブシェル!

dtrace ってなに?プローブと呼ばれる計測ポイントで

パフォーマンスを計測したり

システムコールを検知したり

関数フローをトレースしたり

だいたいなんでも見れます

Page 9: dtrace でもっとインタラクティブシェル!

世間の dtrace の紹介をおさらいします

Page 10: dtrace でもっとインタラクティブシェル!

ほら、プローブ数すごいでしょ?

$ dtrace -l プローブの一覧を出す

Page 11: dtrace でもっとインタラクティブシェル!

ほら、プローブ数すごいでしょ?

$ dtrace -l プローブの一覧を出す

$ dtrace -l | wc -l 96898

Page 12: dtrace でもっとインタラクティブシェル!

ほら、プローブ数すごいでしょ?

$ dtrace -l プローブの一覧を出す

$ dtrace -l | wc -l 96898

多すぎるし 呪文すぎてわかりません

Page 13: dtrace でもっとインタラクティブシェル!

トレースすごいでしょ?

$ sudo dtrace -n "syscall::open:entry, syscall::stat:entry, syscall::stat64:entry / execname == \"vim\" / { trace(copyinstr(arg0)) } "

Page 14: dtrace でもっとインタラクティブシェル!

トレースすごいでしょ?

$ sudo dtrace -n "syscall::open:entry, syscall::stat:entry, syscall::stat64:entry / execname == \"vim\" / { trace(copyinstr(arg0)) } "

トレースする目的がないと楽しくない orz

Page 15: dtrace でもっとインタラクティブシェル!

もっと入門者向けの例を

真面目な話ばかりで遊んでいる記事がない

Page 16: dtrace でもっとインタラクティブシェル!

もっと入門者向けの例を

真面目な話ばかりで遊んでいる記事がない

正直、使い方を覚えるだけでもつらかった

Page 17: dtrace でもっとインタラクティブシェル!

もっと入門者向けの例を

真面目な話ばかりで遊んでいる記事がない

正直、使い方を覚えるだけでもつらかった

よろしい、ならばわたしが人柱だ・・・!

Page 18: dtrace でもっとインタラクティブシェル!

もっと入門者向けの例を

フックに着目して、イベントに合わせてアクションを起こすサンプルを提案したい

これならアプリのイベントリスナー感覚で

既存のシステムの上におもちゃを作れる・・・!

Page 19: dtrace でもっとインタラクティブシェル!

もっと入門者向けの例を

Page 20: dtrace でもっとインタラクティブシェル!

もっと入門者向けの例を

← 土日の試行錯誤の跡

Page 21: dtrace でもっとインタラクティブシェル!

もっと入門者向けの例を

← キーイベントプローブが Mac だとなかった

Page 22: dtrace でもっとインタラクティブシェル!

もっと入門者向けの例を

← キーイベントプローブが Mac だとなかった

出だしで泣きたくなった。

Page 23: dtrace でもっとインタラクティブシェル!

もっと入門者向けの例を

← zsh のソースを解析してみた

Page 24: dtrace でもっとインタラクティブシェル!

もっと入門者向けの例を

← zsh のソースをいろいろ読んでみた それらしい関数なのに反応しない orz

Page 25: dtrace でもっとインタラクティブシェル!

もっと入門者向けの例を

← プロセス監視したら fork して逃げられた?

Page 26: dtrace でもっとインタラクティブシェル!

もっと入門者向けの例を

← プロセス監視したら fork して逃げられた?

俺はお前を見ていたいんだ・・・!

Page 27: dtrace でもっとインタラクティブシェル!

もっと入門者向けの例を

← TTY 入力を奪うことにした

Page 28: dtrace でもっとインタラクティブシェル!

もっと入門者向けの例を

← TTY 入力を奪うことにした 1文字打ち込むたびに喋って 賑やかなること、うけあい。

Page 29: dtrace でもっとインタラクティブシェル!

もっと入門者向けの例を

← システムコールをいろいろ奪ってみた

Page 30: dtrace でもっとインタラクティブシェル!

もっと入門者向けの例を

← システムコールをいろいろ奪ってみた CPU が暴走して MacBook Air が火事

Page 31: dtrace でもっとインタラクティブシェル!

もっと入門者向けの例を

↓ システムコール execve が zsh から呼ばれたとき

system() で python ワンライナーを呼ぶことで落ち着きました。 (問題もあるけどね)

Page 32: dtrace でもっとインタラクティブシェル!

dtrace が使える環境Solaris 10

OpenSolaris

Mac OS X (Leopard からサポート)

FreeBSD (7.1-RELEASE からサポート)

などで使えます。

Page 33: dtrace でもっとインタラクティブシェル!

OS の基礎は勉強したほうがいいかも

OS (プロセス周り) やシェル周りは少しだけ知ってたほうが遊びやすいかもしれないです

Operating System Concepts 8th Edition

Abraham Silverschatz

Page 34: dtrace でもっとインタラクティブシェル!

dtrace 本は 2011/03 発売

dtrace 本はようやく来年出るようです。

DTrace: Dynamic Tracing in

Oracle Solaris, Mac OS X and FreeBSD

Page 35: dtrace でもっとインタラクティブシェル!

dtrace を触った人はこんな技術も触っています

ZFS (ファイルシステム仮想化)

Zone (コンテナ仮想環境)

Crossbow (ネットワーク仮想化)

東京 OpenSolaris 勉強会 忘年会 2010.12 http://atnd.org/events/10514

Page 36: dtrace でもっとインタラクティブシェル!

次にやりたいこと

dtrace で文字列結合できないのが残念だった

dtrace D言語を拡張できれば幸せじゃ?

Dアセンブリ?を解析できればコンパイラ作れる・・・!

Page 37: dtrace でもっとインタラクティブシェル!

おわり

ありがとうございました

$ say thanks