dtrace
DTrace 野郎のたしなみとして、DTrace community のディスカッションを watch しているのだけれど、最近になって: ドライバを書いてるんだけど、DTrace でメモリ内容を書き換えできると便利じゃねぇ?(超意訳) などという書き込みが!そーだろ!そーおもうだ…
さて、const の文法的解釈もわかったことで、早速 const 対応修正を入れて動作確認をしてみるものの、どうにも思ったように動かない。挙動を細かく調べて見ると、どうやら構文解析の際に、問答無用で const 修飾に伴う dt_decl_attr(DT_DA_CONST) 発行が先行…
色々弄繰り回しているうちに、はて const 修飾って言語仕様上どうなってたっけ?という根源的な問題に突き当たる。 hoge(const char* v1[], char const* v2[], char* const v3[]) 上記の様に宣言された場合、コンパイラによって禁止される各引数へのアクセス…
DTrace でユーザ定義プロバイダを作成する際に、プローブ引数の型宣言を const 修飾した場合: provider foo { probe bar(const char *a); };このプロバイダ定義を元に、C/C++ 向けヘッダファイルを生成すると: extern void __dtrace_foo___bar(char *); こん…
DTrace の ML に 以下のような投函が。 バグ 6494528 で困ってるんだけど、誰か修正した人居ねぇ?(意訳) バグ 6494528 ってのは、typedef した型の配列を引数に持つ関数の宣言において、引数名記述を省略すると文法エラーとみなされる、というもの。つまり:…
DTrace Day 2010.03 で発表した Unlimited DTrace を、Solaris10 上で稼動させるには、Solaris10 向けに DTrace をビルドする必要が。とりあえず DTrace の部分限定で良いので、OpenSolaris のソースを元に特定の版の Solaris10 相当のソースを構築できない…
以前から気になっていた DTrace の sizeof() 問題の原因を調査することに。自分のバグと言うわけではないけれど、ちょっと入り組んだ構造の受け渡しをする関数を監視しようとすると、途端にこの問題に足をすくわれかねないので、このまま放置しておくと眠れ…
今日は OpenSolaris 勉強会の特別企画である DTrace Day 2010.03 に参加。
ちょいと google で dtrace キーワードの検索をしたところ、R25 のページが: 25歳以上のビジネスマンを応援&サポートする『R25』がDTraceをズバリ解説。R25ならではのわかりやすいDTrace解説の他、DTrace関連情報やDTrace関連コラムも充実。 という謳い文句…
VM 内部コードの解析で、printf() 系の処理がおそらくユーザ空間で実施されているだろうことは見当が付いたけど、本当にユーザ空間で処理されているか確認をしてみる。dtrace コマンドのソースが usr/src/cmd/dtrace/dtrace.c にあることはすぐに見当が付く…
DTrace は実際の情報採取処理がカーネルモジュールで実施されていて、その際の処理は一種の VM 上で稼動するイメージとなっている。で、DTrace の内部処理に関して調べるついでに、内部コードに関して色々試してみた。とりあえず、vn_open(= open(2) システ…
ふと思いついたカーネルモジュールのアイディアが、DTrace を使えば良い感じに実現できるのではないか?と思って、DTrace の内部実装を調べてみる。ちなみに、このエントリには有用な情報はおそらく全く含まれていません。単に「カーネルソースを読んでいた…
先日、DTrace の独自プロバイダの作成があまりにも簡単なことを知って、「これまでの苦労は何だったんだ!?」と絶望のどん底へ突き落とされる。自分ひとりだけ絶望するのはしゃくなので、1人でも多くこの絶望の道連れにしてやろう、ということで、OpenSolar…