Lions' 本読み (87)

Lions' 呑み会 (#geektable) にてプロファイリングが云々という話を耳にしたので諸々確認してみました。

とりあえず

時計と言えば clock 割り込みなのですが、まごろくさん資料によれば_電源周波数が 50Hz なら 20ms 間隔_で呼び出される、というのが前提。
で、clock 手続き再読しておよよ、って思ったのがこの 20ms 毎のカウントは user 構造体毎に user および system で持ってて (課金のため)、エポックは秒単位でした。
課金情報のための時間カウントが以下らへん。

0788    if((ps&UMODE) == UMODE) {
3789            u.u_utime++;
3790            if(u.u_prof[3])
3791                    incupc(pc, u.u_prof);
3792    } else
3793            u.u_stime++;

て u_prof というナニがアレですね。あ、p347 に記述がありますね。

実行プロファイルが蓄積されていれば、ユーザーモードプログラムカウンタ (PC) に対する棒グラフのエントリを作るために incupc (0895) を呼び出す。

Lions Commentary on UNIX より引用
profil という手続きが 3667 で定義されてるのでそれ見れ、ともありますので別途確認しましょうね。
あと、この u_utime とか u_stime とかってプロセスが終了する時にどこかに積算してるのでしょうかね。こちらも別途確認してみます。

エポック

time というグローバル変数は clock 手続きの中の秒単位での処理で更新されてます。

3801            if(++time[1] == 0)
3802                    ++time[0];

秒カウントのみな模様。あと、これらのグローバルな変数たちの初期化は一体? と思ってたのですが当り前のように main 手続きから呼び出される初期化手続きの一つである iinit 手続きで設定されておりました。
とりあえず一旦ここでエントリ入れます。どうやら沖縄で #台風そん なるナニが催されるようなのでそれにあやかってリハビリがてら先に読みすすめてみる方向ス。

つうか

そもそもの問題としては OS の中の処理のプロファイリングを云々、って話だったのか。このあたりってどちらかというと例えば qemu の中で動かす前提で qemu の中身を計測できるように手を入れる、という事になるのかどうか。