3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

Windows7で気になる件 Part4(グラフィック描画メモ補足)

Windows7で気になる件 Part3(グラフィック描画メモ)の補足と実験です。

本記事のベンチマークは基本的に下記の環境で行っています。

CPU: Pentium4 530J(3.00GHz) HT有

Memory: 1536 MB(DDR333 PC2700 シングルチャネル)

マザーボード:GIGABYTE GA-8I915P PRO Rev2.0 (チップセット Intel 915P+ICH6チップセット)

GPU: NVIDIA GeForce 7600 GS

HDD: Seagate Barracuda LP ST31500541AS(ベンチマーク時に使用したディスク)

Display Mode: 1280 x 1024 32bit (ClearType)

GeForceのドライババージョンによるGDIアクセラレータ検証(WindowsXP)

まず、前回の記事の最後のほうで 「GeForce 7までは2Dアクセラレーション回路がGPUにあったようで、ドライバ(XP)も2桁の頃は2Dアクセラレータに対応してたようです。」と書きましたが、これが実際ベンチマークでどれほど違うのかテストしてみました。

2Dアクセラレーションがきくであろう Windows XPCrystalMark 2004R3 のGDI,D2D,OGLをテストしてみます。

比較したのは GeForce ドライバの 94.24 と 191.07 です。

結果はこんな感じ。

やはり94.24バージョンのドライバのほうがGDIの値が高いですね。GPUによるアクセラレーションがきいているんだと思います。

OpenGLの値が 191.07 のほうが若干高いのは、まぁ誤差レベルかもしれませんが、新しいパッチだけに3Dに関するチューニングがなされたのかもしれません。

Windows7にXPDMを入れてみる

次に、「Windows7に XP 用ドライバ(XPDM)を入れたら2D描画が高速化するのでは!?」ということを確かめるためにテストしてみました。

XP用ドライバはいったん、現在のドライバを削除してドライバインストーラの互換性でXPという風にごまかしたら入れれました。

こちらは XP用94.24 ドライバと XP用163.71 ドライバ、7用191.07(WDDM1.0) ドライバでテストしています。

結果は予想していたものと大きく変わりました。

GDIは3つとも数百レベルの違いなので、誤差範囲です。よって、Windows7ではXP用ドライバ入れてもGDIはソフトレンダリングされてると考えるのが妥当のようです。

驚いたのが DirectDraw の結果です。XP用94.24→XP用163.71→7用191.07という順のスコアです。確かDirectDrawは DirectX8 時代にDirect3Dに統合されたとかいう話を聞いたことがあるような。。。

実際どんなシーケンスで処理してるのかまだ知らないので何とも言えませんが、Windows7からは Direct2D , DirectWrite を使ってねというのがMSの方針なんでしょうね。

OpenGL による3D描画ですが、XP用94.24では全く動作しませんでした。XP用163.71でもかろうじて動いていた程度です。3D描画性能はドライバが新しいほど真に能力を発揮するということかもしれません。

XP用ドライバ使ってると3Dアプリを使おうとするだけでブルースクリーンになります。(mv4_mini.sys で PAGE_FAULT_IN_NONPAGED_AREA と出るんでスワップがらみのエラーですかね。)

やはり、Windows7でXP用ドライバ使ってもメリットはほぼなく、逆に不安定になるだけということがわかりました。

XP用ドライバ入れたときの DirectX 診断ツールの画面をキャプしてみました。

ドライバモデルが「不明」となっています。

Windows7でも問題なく動くXPDMドライバがあればいろいろ実験してみたかったんですが。。。

Windows7でテーマによる描画性能の差があるか?

Windows7で Aeroの有無、DWMの有無で描画性能が変わるのかもテストしてみました。ドライバは7用191.07(WDDM1.0)です。

DWMは「Desktop Window Manager Session Manager」というサービスとして動いてるらしいので、これでDWMのOn,Offが調整できます。

結果誤差レベルかもしれませんが、 GDI はAeroが若干スコアを伸ばし、OpenGLではAeroが若干スコアが伸び悩むという結果になりました。

7用ドライバ使う限り、AeroやDWMのオンオフにはあんまり左右されないようです。これがWDDM1.1ドライバならどうなるのか非常に興味深いところではありますが、GeForce 7600 にはWDDM1.1が存在しないので、残念。。。

■DWM(Desktop Window Manager)では実際どれくらいメモリ使われてる?

最後に、Windows7でテーマを Aero とベーシック(DWMサービスは有効で)で、DWMのメモリ(ワーキングセット)、CPU使用率を調査してみました。(WDDM1.0はウィンドウを持ってるプロセスとdwm.exeとの間で描画イメージをメモリ共有してるため、他プロセスとの共有メモリ空間も含めるワーキングセットで測定)

バッチファイルで notepad.exe をXGAサイズで50個開き、その後そのウィンドウを閉じたときの状態をパフォーマンスモニタで計測したものです。

まずは Aero での計測結果です。

バッチ起動から50個開くまでのメモリ使用量がやはり半端ないです。

ただ400MBも使うってのは解せません。

XGAサイズ50個なので、1024px * 768px * 8byte(32bit) = 157,286,400 なので、本来メモリ食う筈なのは150MBくらいのはずです。

確かに50個開き終わった後は200MB強を保っているのでこれは納得です。

詳しくはわかりませんが、オーバーヘッドかバッチで一気に開いたためさらにバッファを確保したのかそんなところではないだろうかと思います。

いづれにせよ、AeroでWDDM1.0状態は Vista と同じくウィンドウ数とサイズによって激しくメモリ消費することは実証できました。

次はベーシックスタイルでの計測結果です。

こちらはウィンドウを幾つ開いても dwm.exe が使うメモリはほとんど増えていません。(実際は数百K増えてましたが。。)

ただ、notepad 起動完了時にCPUを4割弱ほど使っているの気になります。

描画に関して、全くDWM非依存というわけではなさそうですが、メモリに関してはメインメモリにバッファすることはやめてるようです。

■ウィンドウドラッグ時の残像

ちなみに、このベーシックスタイルでウィンドウをドラッグしてみるとこんな感じになりました。

残像がすごいことになっています。やはり、非アクティブなウィンドウは自前でレンダリングしてるんでしょうかね。ソフトウェアレンダリングの遅さも影響してるのかも。。

Aero 有効時に試してみるとこんな感じです。

残像がないです。2D描画がベンチマーク上遅くなったと言え、こういう点ではWDDM1.0ドライバ使用時のDWMでもいい点ありますね。

Windows 7 UltimateWindows 7 ProfessionalWindows 7 Home Premium