Windows のハードウェアタイマーの話 (1)

@ITに『1msの分解能を得る方法について』というスレッドがありますが,アカウントが無いのでとりあえず眺めてます.
このあたりについては昔,dobon さんのところの掲示板で書いたこともありますが,まあとりあえずは『インサイド Microsoft Windows』(asin:4891004738)あたりの知識は無いときついんじゃないですかね.当然スレッドスケジューラの話も絡んできますし.

Windows のハードウェアタイマーの話 (2)

ちなみに DirectX SDK December 2005 で『Game Timing and Multicore Processors』というホワイトペーパーが追加されています.10月ごろに DIRECTXDEV-ML に流れていたこの辺の話ですね.

とはいえこのホワイトペーパー,個人的にはあんまり目新しい情報はなくてちょっとがっかり気味ですが.
とりあえず Windows のハードウェアタイマーについては以下の資料は一度読んでおいて損はないでしょう.
http://www.microsoft.com/whdc/system/CEC/mm-timer.mspx
しかし,パフォーマンスへの影響を考慮してデフォルト割り込み間隔を 10msec または 15msec にしたと言われても,常に Windows MediaPlayer を起動しているような環境では 1msec で割り込み入っちゃうんですよなぁ.その辺で(特にデスクトップ利用での)現実と机上の話の間にずいぶんとギャップがありそうな気がします.

Linux のハードウェアタイマーの話

Linux 方面も最近動きが活発ですね.

カーネル2.6.13-rc1にて、タイマー割り込みの頻度「HZ」が変更可能になりました。その際に、デフォルトの値が以前の

HZ=1000

から

HZ=250

になりました。このデフォルト値変更は多くの議論を巻き起こしました。

デフォルト値を250から1000に戻してほしいという要求に対して、Linusは「それが必要なユーザーが1000に変更したらよいだけだろう」と反論しました。そして、「『デフォルトを1000にするべきだ』と主張するのであれば、それが本当に良いということを示すデータを見せろ」というのです。

議論の焦点となっているHZは、前述したとおりシステムの割り込みの頻度です。その頻度で割り込み処理が発生し、プロセスの切り替えを行ったり、Linuxが内部的にクロックを数え上げるために利用している「jiffies」という変数の値が増大したりします。

あと上の Windows の資料でちらっと書いてあった One-shot Timer で面白い実験をしている人もいるようです.
http://japan.linux.com/kernel/05/07/09/1345253.shtml?topic=1
他にも Linux は HPET のテストも積極的に行っているようで,検索してみるとちらほらひっかかりますね.
また基本的な実装についてソースレベルで追いかけるには,以下のページが参考になりました.
http://mowamowa.p.utmc.or.jp/~amedama/cgi-bin/wiki/wiki.cgi?page=Kernel%A5%E1%A5%E2+%BB%FE%B4%D6%B4%C9%CD%FD%CA%D4

Windows のハードウェアタイマーの話 (3)

タイマーというか,最初の話に戻ってスレッドスケジューリングの話ですが,時間が出来たら試してみたいのが (id:NyaRuRu:20051213#p2) でも書いた Windows Vista 新機能の『Multimedia Class Scheduler Service』.
とはいえ結局このまま仕様確定になってから触り始めることになりそうな予感も随分してたりしますけど.どうも Vista はフィードバックをかけようにも時間切れという話が大量に起きそうでかなり不安ですが,中々こちらも時間を取れないのがもどかしいです.