HVMでspinlockが遅い

結論 : HVMが何か遅いと思ったらSMPを無効にして新規インストールしろ APICも無効にしないとダメっぽい。。
Cygwinがほんとうにあまりにも遅いのでWindowsカーネルプロファイラ(kernrate)で見てみた。

Time   26975 hits, 25000 events per hit --------
 Module                                Hits   msec  %Total  Events/Sec
hal                                   23447      73500    86 %     7975170
ntkrnlpa                               3127      73500    11 %     1063605
intelppm                                235      73500     0 %       79931
Ntfs                                     73      73500     0 %       24829

halが80%を占めている。。内訳は、

----- Zoomed module hal.dll (Bucket size = 16 bytes, Rounding Down) --------
Percentage in the following table is based on the Total Hits for this Zoom Module

Time   23447 hits, 25000 events per hit --------
 Module                                Hits   msec  %Total  Events/Sec
KeReleaseQueuedSpinLock                8184      73500    28 %     2783673
KeAcquireQueuedSpinLock                5972      73500    20 %     2031292
KeAcquireInStackQueuedSpinLock         3308      73500    11 %     1125170
KeAcquireInStackQueuedSpinLockRaiseToSynch       1724      73500     5 %      586394
ExReleaseFastMutex                     1437      73500     4 %      488775

要するにMutexだ。
SMPではなく、シングルプロセサとして運用しているので、"スピンロックで待ってる間に相方のCPUが居なくて完全に無駄になるパターン"では無いはず。
ただ、インストール当初はSMPにしてたので、HALをユニプロセサ版に戻さないといけない。
というわけでHALをユニプロセサ版に戻そうと思ったら単なるACPI HALにしてしまい*1起動せず。
追記 : というわけでHALに合わせてAPICを無効にすることで問題解決。

 Module                                Hits   msec  %Total  Events/Sec
ntoskrnl                               2912       8922    84 %     6374610
hal                                     399       8922    11 %      873444
Ntfs                                     86       8922     2 %      188261
win32k                                   35       8912     1 %       76703

*1:ややこしいことに、ACPI、ACPI+APIC、ACPI+APIC+マルチプロセサ で全部HALが違う。