Windows 7 グラフィックス パフォーマンスのエンジニアリング

Windows 7 グラフィックスパフォーマンスのエンジニアリング

最高の CAD やゲームグラフィックスなどデスクトップグラフィックスのパフォーマンスは、 Windows 開発の中でかなり多くのテストと調査が実施される分野の1つです。 Windows をサポートする幅広いハードウェアとさまざまな利用シナリオは、基本的なフレームレートからマルチモニターでの最高のフレームレートまで、さまざまな目標を持つエコシステムに役立ちます。 Windows 7 の設計では、グラフィックスの最先端の要素を向上させる努力を続けると同時に、「実世界」のグラフィックスのパフォーマンスを向上させることを目指しました。当社のパートナーがドライバーを介してプラットフォームとなるハードウェアとソフトウェアの組み合わせを向上させるようとしています ( : Windows Vista ドライバーは、 Windows Vista で機能したように機能し続けますが、 Windows 7 用にドライバーを更新することにパートナーとともに取り組んでいます。これらのドライバーは、ユーザーの多くが Windows Update 経由でダウンロードしてテストしてきました ) 。この投稿では、広範な設計とパフォーマンスを測定するさまざまな方法について見ていきます。そして最終的に、異なるハードウェア上でさまざまなシナリオにより Windows 7 を比較テストしているみなさんに検討の余地を残しながら、 Windows 7 の設計で実施した内容について報告します。この投稿は、デスクトップグラフィックス機能チームのプログラムマネージャー、 Ameet Chitreによって書かれました。 --Steven

新しい PCの購入を考えるとき、「より高速なグラフィックス」や「卓越したパフォーマンス」は常に重要なアピール ポイントとなります。写真を編集し、電子メールを実行し、高解像度ビデオを見て、最新の 3D ゲームをプレイする、これらすべてのタスクをシームレスに簡単で頻繁に行き来できる、そんなより高速なシステムをユーザーは期待しています。そのようなユーザーの多くは、グラフィクス ベンチマークを実行するマニア的なコミュニティ ブログやさまざまなレビュー サイトを参照し、新しいハードウェアまたはソフトウェアのグラフィクスの実行速度を評価して結果を報告しています。従来、グラフィクス パフォーマンスは、3Dゲームを通して測定および分析されましたが、Windows の UI を使い、ウィンドウを移動または最大化する、Word または IE などでスクロールする場合など「デスクトップ シナリオ」と呼んでいるものにも影響を与えます。これらのデスクトップ シナリオのパフォーマンス要件は、3D ゲームとはまったく異なります。実際、これが、Windows Vista エクスペリエンス インデックス (Windows Experience Index、WinEI) において、2 つのシナリオを別々に評価する理由です (以下の画像で強調表示している部分)。

image_6[2]1. WEI のサンプル ( グラフィックス機能を強調表示 )

グラフィックス パフォーマンスは、通常、多くのベンチマークによって評価されます。これらのベンチマークは 2 つの大きなカテゴリに分類できます。

  • シナリオベンチマーク: 特定のシナリオのパフォーマンス、たとえば、フライト シミュレーターである領域を飛行する際のフレーム レートを報告します。一般のゲームの多くには、そのゲームの典型的なシーンでグラフィックスが実行する速度を実証するベンチマーク モードが組み込まれています。
  • 統合ベンチマーク: 可能な限り高速で多数の線を描く能力など、グラフィックスの特定の側面のパフォーマンスを強調表示します。

しかし、測定のベンチマークが存在しなくても、高速化のために重要なタスクは多数あります。この場合、Windows 内の計測機能を使用して、タイミング情報を取得し、パフォーマンスを分析します。

このブログでは、グラフィックス パフォーマンスのさまざまな側面、ゲームおよびデスクトップ グラフィックスのパフォーマンスの両方について説明します。ユーザーのフィードバックに対応し、最新のハードウェアを活用して、グラフィックス パフォーマンスを向上するために Windows 7 で行った変更について説明します。

デスクトップの応答性

多くのユーザーが、アプリケーションまたは Windows そのものが一時的に応答を停止することを経験しています。これは、PC のグラフィックス パフォーマンスによって大きく影響を受けるパフォーマンスの問題の一種です。この問題はデスクトップの応答の問題として分類されています。応答しない時間をなくすことは、システムでパフォーマンスを向上させる重要な方法の 1 つです。しかし、これを測定することは困難です。

応答に影響を与える問題の多くは、簡単に再現できず、また、非常にさまざまな問題があるため、デスクトップの応答性を測定することは、難しい問題です。これらの問題は現実の要素の組み合わせに依存するため、いずれの種類のベンチマークでもほとんど問題の本質を捉えることはできません。Windows 7 では、重要な OS イベントとそれが発生した時間を記録する機能を持つテスト版 Windows 7 のメカニズムを使用して、パフォーマンスの誤動作を調べることに相当の時間を費やしました。実世界でのシナリオに基づいたテスト中に応答の問題が発生した場合、テスターは記録キーを押して、発生した問題の簡単な説明を入力できます。「パフォーマンス トレース」という診断情報を含むイベント履歴がファイルに書き出され、サーバーにアップロードされます。サーバーでは、パフォーマンス分析者のチームがデータを解析して応答の問題の原因を解明します。このプロセスは、現在、問題の多くを迅速に追跡し、問題の根本原因となる範囲において成果を上げています。

この方法を使用して、ベータ テスターのみなさんが経験した 100 ミリ秒から数秒までのデスクトップのフリーズに関する大量の応答トレースを分析しました。問題の種類は、ウイルス対策プログラムがメーカーの Web サイト上で自身の更新中にすべてのアプリケーションによるディスク アクセスをブロックしていたものから、アプリケーションが UI スレッドからネットワーク アクセスを実行していたものにまで及びました。これらのトレースのかなりの部分で、ある GDI アプリケーションが別の GDI アプリケーションを待機し、そのために過剰なページング動作が発生して速度が大幅に低下していることを発見しました。これが、デスクトップ応答の問題において単独で最も頻繁に発生する原因であり、このデータなしには特定できませんでした。これらの調査に基づいて、次の 2 つの主要な分野においてアーキテクチャの改善を行いました。

  1. GDI 自動実行: 複数のアプリケーションが実行されている場合の応答を向上させます。これには、GDI (Graphics Device Interface) 同期オブジェクトまたは「ロック」のコードの再設計が必要でした。
  2. Windows の全体的なメモリの占有領域の削減: デスクトップのレンダリングを担うコンポーネントであるデスクトップ ウィンドウ マネージャー (DWM) に構成されるメモリ オーバーヘッドを削減します。これにより、ページング動作を削減でき、特に共有グラフィックス メモリを使用しているような、メモリの少ない PC にとって特に重要となります。

これらについて、さらに詳しく説明します。

GDI 同時実行

デスクトップ応答がどのようなものか調査した多くのパフォーマンス トレースによって、GDIの同期メカニズムを設計するためのポイントが明確になってきました。Windows Vista における GDI の設計では、単一のアプリケーションだけがシステム全体にわたる排他的グローバル ロックを保持できるため、パフォーマンスの課題が発生します。後から考えると、これは明白ですが、当初、この決定がなされたとき、システムのさまざまな部分でのパフォーマンス特性により、この楽観的な実装は完全に合理的であるとされていました。

Existing model of GDI concurrency.

2. 既存アーキテクチャでの GDI 同時実行

同時に動作する GDI アプリケーションでは、画面でレンダリングするために、このグローバル ロックが競合します。グローバル ロックにアクセスするアプリケーションにより、それがグローバル ロックを解放するまで、他のアプリケーションはレンダリングすることができません。ディスクから RAM までメモリを移動することに比較的長い時間がかかるので、ロックを保持しているアプリケーションでディスクから大量のメモリでページングする必要がある場合には、多くの場合、状況は悪化します。上の図では、2 つの GDI アプリケーションが同時に実行されており、グローバル ロックが競合します。App X がロックの維持を取得した場合、画面にレンダリングできますが、App Y はレンダリングできず、App X がレンダリングを終了するまで待機します。

Windows 7 architecture of GDI concurrency.
3. Windows 7 アーキテクチャでのGDI 同時実行

したがって、問題に対する解決策は、ロック競合を減らし、また、確実に複数のアプリケーションが同時にレンダリングできる内部同期メカニズムを再設計することにより、同時実行を向上させることでした。排他的グローバル ロックによる競合は、排他的ではなく並列処理を促進する複数の詳細に設定されたロックの実装により避けられます。詳細に設定されたロックが増加すると、単一のアプリケーションだけが一度にレンダリングしているシナリオに対して小さなオーバーヘッドが追加されます。

最も広く使用されている API スタックの内部同期メカニズムの変更により、デッドロックやレンダリング破損などのタイミングの問題を潜在的に生じさせることがあるので、GDI アプリケーションの互換性に特別な注意を払う必要がありました。

また、この作業は、マルチコア CPU 上で同時実行の GDI アプリケーションのレンダリング パフォーマンスを向上させることになりました。現在では複数のアプリケーションで同時にレンダリングできるようになったため、マルチコア Windows PC では、この変更の利点を活用できます。

GDI 同時実行作業がベータ版の元となる Windows 7 ビルドに実装された後、GDI によって 1 つのアプリケーションが別のアプリケーションをブロックすることに起因するデスクトップ応答の問題について、テスターからの報告件数が大幅に減少しました。さらに新しい実装のスケーラビリティを検証するために、2D の GDIプリミティブを描くテストを作成し、複数のアプリケーションを同時に起動することによってレンダリング スループットを測定しました。スループットは、各アプリケーション ウィンドウのフレーム レート (FPS) を同時に追加することにより測定されます。下記は、クワッドコア CPU システム上でのこれらの結果のサンプルです。

clip_image002_2[1]4. GDI 同時実行とスケーラビリティ .

Windows 7 の GDI 同時実行なしでは、これらのアプリケーションのレンダリング スループットは、事実上、単一 CPU コアのパフォーマンスに制限されます。別のアプリケーションが待機している間に、1 つのアプリケーションだけが排他的なグローバル ロックを取得できるので、このシナリオでは複数の CPU コアを持っていてもそのメリットを活かせません。ここでは、Windows 7 のGDIアプリケーションは、現在ではお互いにほとんど依存しないことを示しています。この利点では、新しいディスプレイ ドライバーを必要としません。Vista (WDDM 1.0) およびより新しいディスプレイ ドライバーのいずれでも機能します。

デスクトップグラフィックス - メモリの占有領域の削減

システムの応答性に影響を与える別の分野は、メモリ使用量です。簡単に言えば、システム メモリ (RAM) 使用量が増加すると、システム応答を直接低下させるページング動作の増加につながります。したがって、最適の応答では、すべてのアプリケーション、プロセス、および OS コンポーネントがシステム メモリを可能な限り使用しないことが必要です。

Windows Vista では、複数のウィンドウの実行に必要なメモリ量は、システム上で開かれたウィンドウ数に比例します。これは、ウィンドウをさらに増やした場合、または、モニターでより高い解像度を使用した場合、より大きなメモリ圧力につながります。複数のモニターを使用する場合、さらに悪化します。システムの応答性を向上させるさまざまな手段を調査していく中で、DWM によるシステム メモリの使用量を大幅に減らせる可能性を発見しました。Windows Vista では、すべての GDI アプリケーション ウィンドウは、まったく同じコンテンツのメモリ割り当てを 2 つ、ビデオ メモリ内とシステム メモリ内に持っています。DWM は、グラフィックス ハードウェアによるデスクトップの構成を担当しています。したがって、グラフィックス ハードウェアが簡単にアクセスできるよう、ビデオ メモリ内に同じ割り当てのコピーを必要とします。システム メモリ内の重複コピーですが、GUIはオペレーティング システム内で、グラフィック ハードウェアによって支援または「高速化」されることなく、完全に CPU を利用してレンダリングされます。つまり、GDI アプリケーションをレンダリングするすべてのタスクは CPU が実行するため、CPU は容易にアクセスしてキャッシュできるメモリのコピーを必要とします。

image_12[1]5. 既存のメモリ割り当て

一方で、Windows 7 では、システム メモリのコピーを完全に削除し、1 つのアプリケーション ウィンドウあたり 1 つのメモリ割り当てコピーを保存します。したがって、デスクトップ上に表示される GDI アプリケーション ウィンドウでは、消費されるメモリは半分に削減されます。

image_14[3] 
6. Windows 7 でのメモリ割り当て

私たちは、グラフィックス ハードウェアを活用して共通の GDI 操作を高速化することにより、システム メモリの削減を達成しました。WDDM ドライバーでは、GDI 操作を高速化して、ビデオ メモリの CPU リードバックのパフォーマンスの影響を最小限に抑えます。これらの操作を実行しなければ、CPU 上で重大なパフォーマンス上のデメリットが発生するため、必要な処理でした。高速化する GDI 操作を決定するためには、さまざまな GDI アプリケーションの使用パターンを分析することが重要です。GDI アプリケーションの呼び出しパターン、および GDI 操作の頻度と性質についての詳細を理解するために、上位 100 個の GDI アプリケーションをプロファイルしました。

clip_image001_2[1]7. 100 個の GDI ベースのアプリケーションでの GDI 操作の呼び出しパターンおよび頻度

上記の小さなスナップショットで示すように、実世界のアプリケーション統計に基づいて、最もよく使用される GDI 操作を高速化するために、グラフィックス メーカーの パートナーと協力して、これらをサポートするドライバーを提供しました。「WDDM v1.1」というこの更新されたドライバーがインストールされた Windows 7 のシステムでは、このメモリ節約作業の恩恵を受けられます。なお、WDDM 1.0 ドライバーもWindows 7 上で完全にサポートされます。ベータ期間中に Windows Update でこの 1.1 ドライバーを提供していることに気が付かれたかもしれません。これらのドライバーも、ベータ版です。

image_18[1]8. WDDM 1.1 WDDM 1.0 を使用した場合のデスクトップウィンドウマネージャーのメモリ消費量の比較

上記のデータでは、デスクトップ上で複数のアプリケーション ウィンドウを表示した場合、メモリの節約がますます必要となることを示しています。たくさんのシステム メモリを節約すると、ページング動作が削減されます。その結果、システムの応答性は同じワークロードに対して向上します。

デスクトップの応答性の向上のために、ある種のトレードオフが発生します。たとえば、特定の操作の「迅速化」が導入されたシステム メモリの重複コピーを排除することにより、CPU でデータをビデオ メモリから読み込む必要があるため、パフォーマンスがわずかに低下しました。しかし実世界のアプリケーション統計の分析では、これらの操作がほとんど実行されなかったことがわかっています。ただし、これらの操作を発行する特定の GDI ミクロ ベンチマークでは、一部でパフォーマンス低下が見られます。これは、特定の GDI 操作に繰り返しストレスを与える既存のベンチマークを実行した場合、注意が必要な点です。なぜなら、実世界でのパフォーマンスを反映しているとは限らないからです。速度の低下がエンドユーザー機能に直接影響を与えないこと、また、メモリの節約が Windows 7 で全体的に応答を良くする結果に直接つながることがわかっています。全体的な向上点は、共有メモリ グラフィックスを備えた、メモリ制約がある PC の場合に顕著となります。

ゲームパフォーマンス

ゲームのことを語らずに、グラフィックスパフォーマンスの話を終わりにすることはできません。ゲームは今でも広く分析され議論されています。ベンチマークには、3DMark など一般的なものから、ゲームを実行している最中にユーザーによるインタラクションなしに実行できるようなゲームに組み込まれたものまで、さまざまな種類があります。この分野は、ゲーム業界によって、実際のゲームをかなり現実的に表すさまざまな業界ベンチマークを使用して、詳しく追跡記録されてきました。さまざまなベンチマークやテストが広く検討され、ゲームのプレイヤーはこれらの測定の微妙な点まですべて精通し、その結果をプレイヤーのハードウェア、ドライバー、およびゲームに対する期待値に応じた推奨事項として役立てています。

Windows 7 では、グラフィックスパートナーと密接に協力し、同じドライバー モデルおよび互換性を維持しつつ、Windows 7 の動作への特定の変更を行って WDDM ドライバーのゲーム パフォーマンスを向上するための作業を行ってきました。パフォーマンス ツールへの継続的な投資により、マイクロソフトおよびハードウェア パートナーは、さまざまなゲーム パフォーマンスのボトルネックを追跡して分析し、それらのボトルネックを次のドライバー リリースで修正することが可能となりました。Windows Display Driver Model の基礎は Windows 7においても変更ありません。GPU スケジュールおよびメモリ管理に関する一部のポリシーは、特定のシナリオにおいてより適切なパフォーマンスを可能にするために変更されました。

これらのベンチマークは、特定のハードウェア、ファームウェア、ドライバー、システム全般に対して非常にセンシティブであるので、また、他の場合では、非常に広範に測定および検討されているので、これらの比較をサード パーティに行ってもらう予定です。Windows 7 の多くの分野がそうであるように、マイクロソフトの責任は、多くの側面にわたってより最適なパフォーマンスを設計することです。みなさんには、これらの取り組みを直接体験していただくのがよいと思います。Windows 7 を比較する際は、Windows Vista SP1 の使用をお勧めします。また、WDDM 1.0 と 1.1の相違点について、および 1.1 ドライバーがまだ開発中であることに留意してください。

最後に

ご存知のように、Windows 7 の設計では、実世界のパフォーマンスに関するグラフィックス向けのアーキテクチャを向上させるために努力してきました。これは、どのようなハードウェアでも有益です。物理メモリが少ないシステムでも高速で効率的に Windows を実行でき、同時に、マルチコア PC では複数のグラフィックス アプリケーションをとても効率的にレンダリングできるようになります。

-Ameet