尿管結石からなんとなく復活していますが、まだ違和感が残っています。明日は月曜日なので、地元の総合病院で検査を受けるつもりです。ということで、久しぶりにWinCEネタを書きます。
システムを構築した際、思ったような性能が出ないということはよくあります。その原因として、CPU性能が足りないとか、処理方式が悪いとか、バスが詰まっているとか、まぁとにかく色々あるわけです。でもどこが悪いのかを見つけ出すのは大変な場合も多く、あてずっぽうで処理を見直したりすることになります。特に後から追加となったアプリケーションやデバイスドライバが、その犯人に仕立て上げられたりすることもあるわけです。「お前が入ったら遅くなった」と言われて...
大体はエンジニアの経験に基づく勘で検討をするので、それほど大きくはずすことも無いとは思いますが、やはり定量的な指標でその原因を追究することも大切です。WinCEの開発環境であるPlatform Builder(PB)では実はそのための手段も準備されています。しかし残念ながらあまりわかりやすい方法とは言えないようです。
以前も書いたTipsに、「Target Control」でのスレッドプライオリティの変更に関する記事がありました。このTarget Cotrolは結構使えるコマンドが多く、今回の動作時のプロファイリングを行う「Monte Carlo Profile」を使うことで、モジュールがどのくらい動作しているのかを把握することができます。プロファイリングを始めるためには「prof on」、終了するためには「prof off」とTarget Control上で入力するだけで以下のような結果を得ることができるのです。
1924830 PID:a3fa510a TID:a3fa50da 0x83fa6800: Module Hits Percent
1924830 PID:a3fa510a TID:a3fa50da 0x83fa6800: ------------ ---------- -------
1924830 PID:a3fa510a TID:a3fa50da 0x83fa6800: IDLE 83212 96.5
1924830 PID:a3fa510a TID:a3fa50da 0x83fa6800: nk.exe 2607 3.0
1924830 PID:a3fa510a TID:a3fa50da 0x83fa6800: kbdmouse.dll 107 0.1
1924830 PID:a3fa510a TID:a3fa50da 0x83fa6800: coredll.dll 72 0.0
1924830 PID:a3fa510a TID:a3fa50da 0x83fa6800: gwes.exe 67 0.0
1924830 PID:a3fa510a TID:a3fa50da 0x83fa6800: shell.exe 26 0.0
1924840 PID:a3fa510a TID:a3fa50da 0x83fa6800: relfsd.dll 10 0.0
1924840 PID:a3fa510a TID:a3fa50da 0x83fa6800: ddi.dll 10 0.0
1924840 PID:a3fa510a TID:a3fa50da 0x83fa6800: fsdmgr.dll 7 0.0
1924840 PID:a3fa510a TID:a3fa50da 0x83fa6800: ceshell.dll 6 0.0
1924840 PID:a3fa510a TID:a3fa50da 0x83fa6800: dc21x4.dll 6 0.0
1924840 PID:a3fa510a TID:a3fa50da 0x83fa6800: filesys.exe 5 0.0
1924840 PID:a3fa510a TID:a3fa50da 0x83fa6800: Phillo.exe 3 0.0
1924840 PID:a3fa510a TID:a3fa50da 0x83fa6800: pm.dll 2 0.0
1924840 PID:a3fa510a TID:a3fa50da 0x83fa6800: cxport.dll 2 0.0
1924840 PID:a3fa510a TID:a3fa50da 0x83fa6800: toolhelp.dll 1 0.0
1924840 PID:a3fa510a TID:a3fa50da 0x83fa6800: commctrl.dll 1 0.0
1924840 PID:a3fa510a TID:a3fa50da 0x83fa6800: UNKNOWN 5 0.0このように、それぞれのモジュールがどのくらいヒットしているのかが一目瞭然です。このMonte Carlo Profilerを使用すると「何で」遅くなったのかまではわからないのですが、「どこが」遅いのかはわかります。もちろんここでより多くの時間を必要としているモジュールだけが悪いわけではありませんが、ひとつの指標として捕らえることができます。
このMote Carlo Profilerを使用するためには以下の手順でOSイメージを構築することが要求されます。
- OEMProfileTimerDisable関数とOEMProfileTimerEnable関数をOALに実装します。
- ProfilerHit関数の呼び出しのためのISRをカーネルに実装します。
- bProfileTimerRunningをセットするための正しいハンドルをOEMIdleに実装します。
- IMGPROFILER環境変数がセットされている場合、Config.bibファイルのMEMORYセクションにPROFILE=ONと記述されていることを確認します。
- OSイメージを生成します。
なお使用するカーネルは「Kernkitlprof.exe」となります。詳細はPBのヘルプをご覧いただきたいのですが、このMonte Carlo Profilerを活用することはシステムの問題点を解決する上で、非常に有効な手段の一つと言えるでしょう。
Recent Comments