systemtap

SystemTapでfizzbuzz

とりあえず、advent calenderに穴を開けたくないので、何か書こうと思っていろいろ考えてみたが、あまり手をかける余裕もないので、SystemTapでちょっとしたものを書くことにする。

Linux Instrumentationの今後?

http://lwn.net/Articles/370715/rssで、LinusがNAKしてマージが難航しているutraceですが、その後の展開をみると結構おもしろいことになっています。 Linusが言うことにも一理あるわけで、utraceだけ見ればptraceしか普通のユーザは使わないから、utraceみ…

SystemtapでディスクI/Oの監視

はてぶでhttp://d.hatena.ne.jp/sh2/20100120を見かけたので、ちょっと調べてみました。id:sh2はperlと組み合わせて処理していますが、定期的にサマリを表示させるのならstapだけでもいいですね。 ただ、カーネル内でfdからパス名に変換するのって、ちょっと…

2.6.27.16/2.6.28.5

実はkprobesの以前の実装に問題があって、このリリースで修正されてます。 カーネルのコンフィグレーションによってはx86でメモリ破壊を引き起こすという凶悪なバグでした。

パックマンもどきゲーム(eater)追加

記憶だけを頼りに作ってみたけど、なんか違いますね。 面データが違う 敵キャラが少ない 動きが違う 今後気が向いたら更新します。

New games

インベーダゲームもどきシューティング、ドライビングゲーム、ブロック崩しの3つのゲームを追加しておきました。

オプション付き実行可能Systemtapスクリプトの作り方

上記テトリスで使われていたトリックがとても便利だったので拡張させていただきました。

テトリス

t_sekiyamaさんが投稿してくれたテトリスを取り込ませていただきました。ちなみにsvnのソースコードをダウンロードするには、Public(タブ)→Browse SVN→Download GNU tarballの順でリンクをたどるとtarballでダウンロードできます。 端的にいうなら、以下のリ…

サンプルゲームを公開

いつまでもはてなの上に書いているわけにいかないので、Sourceforgeを使って公開しておきました。http://sourceforge.net/projects/stapgames/今のところマインスイーパぐらいしかまともなゲームがないですが、今後増やしていく予定です。 コードはsvn経由で…

入力をとらえる

ライフゲームでは、プログラム上で指定した初期値から動きつづけるプログラムでしたが、実際に遊べるゲームを作るには、ユーザからの入力をとらえる必要があります。

ライフゲームを作る

Systemtapのプログラム例として、できるだけ役に立たなさそうなものを選んでみました。 今回取り上げるのはライフゲームです。非常に単純なルールなので、わかりやすく、かつ(実用上)役に立ちません。 ライフゲームの基本的なルールは、Wikipediaによると 碁…

最新のSystemtapのインストール方法

今日はSystemtapの最新版を、ソースコードからインストールする方法(FedoraとUbuntu)について説明します。 Ubuntu 身も蓋もない言い方をすれば、Wikiを参照してください。

Tipsなど

Systemtapのコマンド自体あまり知られていないですが、Systemtapを使う上でのTipsを紹介します。 プローブポイントからアクセスできるローカル変数一覧を知る 裏技的ですが、エラーメッセージから、どういう変数があるかが分かります。

Tap言語

前回の例でも使っていましたが、Systemtapにはあらかじめいくつかの関数が定義されています。これらの関数のほとんどは、Tapsetというスクリプトライブラリで定義されています(一部の関数は組み込み関数です)。オンラインマニュアルを引けば、Systemtapが…

簡単な使い方

Systemtapは、端的に言えばカーネルを対象とした(最新のものだとユーザプロセスも対象にできますが)プログラマブルなデバガです。基本はブレークポイントを埋め込んで、その箇所の情報(ローカル変数など)を取ってきてあれこれするのに使います。例えば、以下…

インストールの仕方

Systemtapについてはプロジェクトのページを見てください。基本的にはLinux上で使えるSunのDtraceのような機能です。WikiページにはFedoraやUbuntuにインストールする方法が書いてあります。パッケージでインストールするだけではダメなのは、カーネルのデバ…