dtrace でもっとインタラクティブシェル!
description
Transcript of dtrace でもっとインタラクティブシェル!
![Page 1: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/1.jpg)
dtrace でもっとインタラクティブシェル!
2010/12/16 kei <http://apribase.net>
![Page 2: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/2.jpg)
自己紹介
Mandriva Linux や on JVM 言語好き
最近は割と雑食
今日は OpenSolaris 寄りなお話
![Page 3: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/3.jpg)
まずはこれを見てほしい
![Page 4: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/4.jpg)
さっきはなにやったの?
![Page 5: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/5.jpg)
さっきはなにやったの?dtrace を使って
システムコールをフックしました!
コマンド実行時に声を出してくれます。
![Page 6: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/6.jpg)
なんでつくったの?人よりシェルと話す時間のが長くて寂しかった。
声が聞きたくなるじゃない、
人間だもの (´・ω・`)
# 教育用サンプル作成が本当の目的
![Page 7: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/7.jpg)
dtrace ってなに?システム情報取得のための
トレースツールです
![Page 8: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/8.jpg)
dtrace ってなに?プローブと呼ばれる計測ポイントで
パフォーマンスを計測したり
システムコールを検知したり
関数フローをトレースしたり
だいたいなんでも見れます
![Page 9: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/9.jpg)
世間の dtrace の紹介をおさらいします
![Page 10: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/10.jpg)
ほら、プローブ数すごいでしょ?
$ dtrace -l プローブの一覧を出す
![Page 11: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/11.jpg)
ほら、プローブ数すごいでしょ?
$ dtrace -l プローブの一覧を出す
$ dtrace -l | wc -l 96898
![Page 12: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/12.jpg)
ほら、プローブ数すごいでしょ?
$ dtrace -l プローブの一覧を出す
$ dtrace -l | wc -l 96898
多すぎるし 呪文すぎてわかりません
![Page 13: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/13.jpg)
トレースすごいでしょ?
$ sudo dtrace -n "syscall::open:entry, syscall::stat:entry, syscall::stat64:entry / execname == \"vim\" / { trace(copyinstr(arg0)) } "
![Page 14: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/14.jpg)
トレースすごいでしょ?
$ sudo dtrace -n "syscall::open:entry, syscall::stat:entry, syscall::stat64:entry / execname == \"vim\" / { trace(copyinstr(arg0)) } "
トレースする目的がないと楽しくない orz
![Page 15: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/15.jpg)
もっと入門者向けの例を
真面目な話ばかりで遊んでいる記事がない
![Page 16: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/16.jpg)
もっと入門者向けの例を
真面目な話ばかりで遊んでいる記事がない
正直、使い方を覚えるだけでもつらかった
![Page 17: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/17.jpg)
もっと入門者向けの例を
真面目な話ばかりで遊んでいる記事がない
正直、使い方を覚えるだけでもつらかった
よろしい、ならばわたしが人柱だ・・・!
![Page 18: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/18.jpg)
もっと入門者向けの例を
フックに着目して、イベントに合わせてアクションを起こすサンプルを提案したい
これならアプリのイベントリスナー感覚で
既存のシステムの上におもちゃを作れる・・・!
![Page 19: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/19.jpg)
もっと入門者向けの例を
![Page 20: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/20.jpg)
もっと入門者向けの例を
← 土日の試行錯誤の跡
![Page 21: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/21.jpg)
もっと入門者向けの例を
← キーイベントプローブが Mac だとなかった
![Page 22: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/22.jpg)
もっと入門者向けの例を
← キーイベントプローブが Mac だとなかった
出だしで泣きたくなった。
![Page 23: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/23.jpg)
もっと入門者向けの例を
← zsh のソースを解析してみた
![Page 24: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/24.jpg)
もっと入門者向けの例を
← zsh のソースをいろいろ読んでみた それらしい関数なのに反応しない orz
![Page 25: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/25.jpg)
もっと入門者向けの例を
← プロセス監視したら fork して逃げられた?
![Page 26: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/26.jpg)
もっと入門者向けの例を
← プロセス監視したら fork して逃げられた?
俺はお前を見ていたいんだ・・・!
![Page 27: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/27.jpg)
もっと入門者向けの例を
← TTY 入力を奪うことにした
![Page 28: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/28.jpg)
もっと入門者向けの例を
← TTY 入力を奪うことにした 1文字打ち込むたびに喋って 賑やかなること、うけあい。
![Page 29: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/29.jpg)
もっと入門者向けの例を
← システムコールをいろいろ奪ってみた
![Page 30: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/30.jpg)
もっと入門者向けの例を
← システムコールをいろいろ奪ってみた CPU が暴走して MacBook Air が火事
![Page 31: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/31.jpg)
もっと入門者向けの例を
↓ システムコール execve が zsh から呼ばれたとき
system() で python ワンライナーを呼ぶことで落ち着きました。 (問題もあるけどね)
![Page 32: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/32.jpg)
dtrace が使える環境Solaris 10
OpenSolaris
Mac OS X (Leopard からサポート)
FreeBSD (7.1-RELEASE からサポート)
などで使えます。
![Page 33: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/33.jpg)
OS の基礎は勉強したほうがいいかも
OS (プロセス周り) やシェル周りは少しだけ知ってたほうが遊びやすいかもしれないです
Operating System Concepts 8th Edition
Abraham Silverschatz
![Page 34: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/34.jpg)
dtrace 本は 2011/03 発売
dtrace 本はようやく来年出るようです。
DTrace: Dynamic Tracing in
Oracle Solaris, Mac OS X and FreeBSD
![Page 35: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/35.jpg)
dtrace を触った人はこんな技術も触っています
ZFS (ファイルシステム仮想化)
Zone (コンテナ仮想環境)
Crossbow (ネットワーク仮想化)
東京 OpenSolaris 勉強会 忘年会 2010.12 http://atnd.org/events/10514
![Page 36: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/36.jpg)
次にやりたいこと
dtrace で文字列結合できないのが残念だった
dtrace D言語を拡張できれば幸せじゃ?
Dアセンブリ?を解析できればコンパイラ作れる・・・!
![Page 37: dtrace でもっとインタラクティブシェル!](https://reader034.fdocument.pub/reader034/viewer/2022052215/5562edd6d8b42a213b8b4df0/html5/thumbnails/37.jpg)
おわり
ありがとうございました
$ say thanks