Windows XP/Vista のスレッドスケジューラと Hyper-Threading

4gamer の『Intelベンチマーク担当に,LynnfieldやArrandaleなどの話をいろいろ聞いてきた』という記事より.

ここで少し,現在,すなわちWindows Vistaまでのスケジューラにどういう問題があるのかを,ざっと説明しておこう。

Windows Vistaに限ったことではなく,Windows XP以前もそうなのだが,現行世代のWindowsは,複数のCPUコアに対して,負荷バランスだけを根拠としてスレッドを割り当てていく。スケジューラは,割り当てようとしている先のCPUコアが物理コアなのか論理コアなのかを考慮しないわけだ。そのため,「ある物理コアにスレッドが割り当てられている状況で,別の物理コアは完全に空いているにもかかわらず,『すでにスレッドが割り当てられている物理コアの論理コア』へ,新たにスレッドが割り当てられる」という悲劇が起こり得る。あるいは,一つのCPUコア上にある物理コアと論理コアに,データをまったく共有していない二つのスレッドなど,競合するスレッドを割り当てるということもあり,いずれも,Hyper-Threadingのパフォーマンスは,極端に低下してしまう。

んー,この説明だと,XP/Vista のスケジューラは論理 CPU の物理的な位置を全く区別しない残念な子に読めてしまいますが,なんか全く別の記述を『インサイド Microsoft Windows』で読んだ記憶が……

スレッド用のプロセッサを選択するとき、すべての論理プロセッサがアイドル状態にある物理プロセッサが存在する場合には、その物理プロセッサの論理スレッドが選択される。スレッドを実行させている別の論理プロセッサを所有している物理プロセッサ上のアイドルプロセッサが選択されるわけではない。

まあそれはそれとして,Windows Internals 第5版が (本当に本当なら) あと一週間で発売.いやー長かった.

Windows® Internals, Fifth Edition (PRO-Developer)

Windows® Internals, Fifth Edition (PRO-Developer)

追記

こんどこそ確実に発売っぽい.
RTM'd today: Windows Internals, Fifth Edition

追記2

元記事に追記が入った模様.
ご指摘感謝 > 名無しさん

追記3