リモート デスクトップ セッション ホストのパフォーマンス チューニング

このトピックでは、リモート デスクトップ セッション ホスト (RD セッション ホスト) のハードウェアを選択する方法、ホストをチューニングする方法、アプリケーションをチューニングする方法について説明します。

このトピックの内容:

パフォーマンスのための適切なハードウェアの選択

RD セッション ホスト サーバーの展開では、どのようなアプリケーション セットをユーザーがどのように使うかによって、選択するハードウェアが決まります。 ユーザーの数とそのエクスペリエンスに影響する主な要素は、CPU、メモリ、ディスク、グラフィックスです。 このセクションでは、RD セッション ホスト サーバーに固有のガイドラインを示し、RD セッション ホスト サーバーのマルチユーザー環境について主に説明します。

CPU 構成

概念上は、1 セッションをサポートするのに必要な CPU に、一時的なスパイクを処理するバッファー ゾーンを維持しながらシステムがサポートすると想定されるセッション数を乗算することで CPU 構成が決まります。 複数の論理プロセッサを使用すると、異常な CPU の輻輳状況を減らすことができます。通常この状況は、少数の論理プロセッサに少数の過度にアクティブなスレッドが含まれていることが原因で発生します。

したがって、システムの論理プロセッサの数が多いほど、推定 CPU 使用率に組み入れる必要があるクッション マージンが小さくなり、CPU あたりのアクティブな負荷の割合が大きくなります。 重要なのは、CPU の数を 2 倍にしても CPU 容量は 2 倍にならないということです。

メモリ構成

メモリ構成はユーザーが使用するアプリケーションによって異なりますが、必要なメモリ量は次の式を使用して推定できます。OSMem + SessionMem * NS

OSMem はオペレーティング システムの実行に必要なメモリ量 (システムのバイナリ イメージやデータ構造など)、SessionMem は 1 つのセッションで実行されるプロセスに必要なメモリ量、NS は目標とするアクティブ セッション数です。 セッションに必要なメモリ量は、主にセッションで実行されるアプリケーションとシステム プロセスに設定されたプライベート メモリ参照によって決まります。 コード ページまたはデータ ページを共有しても、システムに存在するコピーは 1 つであるため、ほとんど効果はありません。

興味深い考察として (ページ ファイルをバックアップするディスク システムが変わらないことが前提)、システムがサポートする予定の同時アクティブ セッション数が多いほど、セッションごとに割り当てるメモリ量を大きくする必要があることが挙げられます。 セッションごとに割り当てるメモリ量を増やさないと、アクティブ セッションで生成されるページ フォールトの数がセッション数と共に増加します。 こうしたフォールトによって、最終的には I/O サブシステムが過負荷になります。 セッションごとに割り当てるメモリ量を増やすことで、ページ フォールトが発生する可能性が低下して、全体的なページ フォールトの発生率を下げることができます。

ディスク構成

ストレージは、RD セッション ホスト サーバーを構成するときに最も見過ごされる要素の 1 つであり、実際のサイトに展開されるシステムではストレージが制約になることが非常によくあります。

一般的な RD セッション ホスト サーバーで生成されるディスク アクティビティは、次の領域に影響します。

  • システム ファイルとアプリケーション バイナリ

  • ページ ファイル

  • ユーザー プロファイルとユーザー データ

これらの領域は、個別の記憶装置でバックアップするのが理想的です。 ストライピング RAID 構成やその他の高パフォーマンス ストレージを使用すると、パフォーマンスはさらに向上します。 バッテリー バックアップ式書き込みキャッシュ機能を備えたストレージ アダプターを使用することを強くお勧めします。 ディスク書き込みキャッシュ機能を備えたコントローラーでは、同期書き込み操作のサポートが強化されます。 すべてのユーザーには個別のハイブがあるため、RD セッション ホスト サーバーでは同期書き込み操作がきわめて一般的に行われます。 レジストリ ハイブは、同期書き込み操作を使用して定期的にディスクに保存されます。 これらの最適化を有効にするには、ディスク管理コンソールで対象のディスクの [プロパティ] ダイアログ ボックスを開き、[ポリシー] タブで [ディスクの書き込みキャッシュを有効にする] チェックボックスと [デバイスで Windows による書き込みキャッシュ バッファーのフラッシュをオフにする] チェックボックスをオンにします。

ネットワーク構成

RD セッション ホスト サーバーのネットワーク使用量は、主に次の 2 つのカテゴリに分かれています。

  • RD セッション ホストの接続トラフィック使用量は、セッション内で実行されるアプリケーションおよびリダイレクトされたデバイスの I/O トラフィックで生じる描画パターンによってほぼ決まります。

    たとえば、テキスト処理とデータ入力に対応するアプリケーションが消費する帯域幅は約 10 から 100 キロビット/秒ですが、リッチなグラフィックスやビデオの再生では帯域幅の使用量が大幅に増加します。

  • バックエンド接続 (移動プロファイルや、ファイル共有、データベース サーバー、電子メール サーバー、HTTP サーバーへのアプリケーション アクセスなど)。

    ネットワーク トラフィックのボリュームとプロファイルは、各展開に固有です。

リモート デスクトップ セッション ホスト用のアプリケーションのチューニング

RD セッション ホスト サーバーの CPU 使用率のほとんどは、アプリケーションが占めています。 通常、デスクトップ アプリケーションは、ユーザーの要求に応答する時間を最小限に抑えることを目標に応答性が最適化されます。 ただしサーバー環境では、操作を完了するために必要な CPU の総使用量を最小限に抑えて他のセッションに悪影響が出ないようにすることも同じくらい重要です。

RD セッション ホスト サーバーで使用されるアプリケーションを構成するときは、次の推奨事項を考慮してください。

  • バックグラウンドのアイドル ループ処理を最小限に抑える

    代表的な例として、バックグラウンドでの文法とスペルのチェック、検索用のデータ インデックス作成、バックグラウンドでの保存を無効にすることが挙げられます。

  • アプリケーションによる状態のチェックまたは更新の実行頻度を最小限に抑える

    このような動作を無効にしたり、ポーリングやタイマー起動の間隔を長くしたりすると CPU 使用率が大幅に向上します。これは、こうしたアクティビティの効果がすぐに多くのアクティブ セッションに拡大されるためです。 代表的な例として、接続状態アイコンやステータス バー情報の更新が挙げられます。

  • 同期の頻度を下げてアプリケーション間のリソース競合を最小限に抑える

    このようなリソースの例には、レジストリ キーや構成ファイルなどがあります。 アプリケーションのコンポーネントと機能の例には、状態インジケーター (シェル通知など)、バックグラウンドのインデックス作成や変更の監視、オフライン同期などがあります。

  • ユーザー サインインまたはセッション起動で開始するように登録されている不要なプロセスを無効にする

    これらのプロセスは、新しいユーザー セッションを作成 (一般に CPU に大きな負荷がかかるプロセス) するときに CPU 使用率を大きく上げる可能性があり、朝のシナリオで大きなコストが発生しかねません。 MsConfig.exe または MsInfo32.exe を使用して、ユーザー サインイン時に開始されるプロセスの一覧を確認します。 詳細については、Windows の自動実行に関するページをご覧ください。

メモリ消費量については、次の点を考慮する必要があります。

  • アプリケーションで読み込まれた DLL が再配置されていないことを確認します。

    • 再配置された DLL を確認するには、プロセス エクスプローラーを使用して、次の図のようにプロセス DLL ビューを選択します。

    • ここでは、x.dll が既定のベース アドレスを既に占有し、ASLR が有効になっていなかったので、y.dll が再配置されたことがわかります。

      relocated dlls

      DLL が再配置されると、セッション間で DLL のコードを共有できなくなるため、セッションのフットプリントが大幅に増加します。 これは、RD セッション ホスト サーバーのメモリに関連したパフォーマンスの問題として最も一般的です。

  • 共通言語ランタイム (CLR) アプリケーションの場合は、ネイティブ イメージ ジェネレーター (Ngen.exe) を使用して、ページ共有を増やし、CPU のオーバーヘッドを削減します。

    可能であれば、同様の手法を他の類似する実行エンジンに適用します。

リモート デスクトップ セッション ホストのチューニング パラメーター

ページ ファイル

ページ ファイルのサイズが不十分であると、アプリケーションやシステム コンポーネントでメモリ割り当てエラーが発生する可能性があります。 メモリからコミットされたバイト数を示すパフォーマンス カウンターを使用して、システム上のコミット済み仮想メモリの量を監視できます。

ウイルス対策

RD セッション ホスト サーバーにウイルス対策ソフトウェアをインストールすると、システム全体のパフォーマンス、特に CPU 使用率に大きく影響します。 特に、サービスやその他のシステム コンポーネントで生成される一時ファイルが保存されるすべてのフォルダーをアクティブな監視リストから除外することを強くお勧めします。

タスク スケジューラ

タスク スケジューラでは、各種のイベントに対してスケジュールされたタスクの一覧を確認できます。 RD セッション ホスト サーバーの場合は、アイドル時、ユーザー サインイン時、セッションの接続時と切断時に実行されるように構成されたタスクを特に注視するのに役立ちます。 展開の仕様により、これらのタスクの多くは不要である可能性があります。

デスクトップの通知アイコン

デスクトップの通知アイコンの更新メカニズムには、かなりのコストがかかります。 通知はすべて無効にする必要があります。そのためには、通知を登録しているコンポーネントをスタートアップ リストから削除するか、通知を無効にするようにアプリやシステム コンポーネントの構成を変更します。 サーバーで提供されている通知の一覧は、[通知アイコンのカスタマイズ] を使用して確認できます。

リモート デスクトップ プロトコルのデータ圧縮

リモート デスクトップ プロトコルの圧縮を構成するには、[コンピューターの構成]>[管理用テンプレート]>[Windows コンポーネント]>[リモート デスクトップ サービス]>[リモート デスクトップ セッション ホスト]>[リモート セッション環境]>[RemoteFX データの圧縮を構成する] でグループ ポリシーを使用します。 選択可能な値は次の 3 つです。

  • メモリの使用量を節約するよう最適化: セッションあたりのメモリ消費量を最小限に抑えますが、圧縮率が最も低いため、帯域幅の消費量は最も高くなります。

  • メモリとネットワーク帯域幅のバランスを取る: 帯域幅の消費量を削減する一方で、メモリ消費量がわずかに増加します (セッションあたり約 200 KB)。

  • ネットワーク帯域幅を節約するよう最適化: セッションあたり約 2 MB のコストでネットワーク帯域幅の使用量を大幅に削減します。 この設定を使用する場合は、サーバーを運用環境に配置する前に、セッションの最大数を推定し、この設定でそのレベルまでテストする必要があります。

リモート デスクトップ プロトコルの圧縮アルゴリズムを使用しないことも選択できるので、ネットワーク トラフィックを最適化するように設計されたハードウェア デバイスでのみ使用することをお勧めします。 圧縮アルゴリズムを使用しない場合でも、一部のグラフィック データは圧縮されます。

デバイス リダイレクト

デバイスのリダイレクトを構成するには、[コンピューターの構成]>[管理用テンプレート]>[Windows コンポーネント]>[リモート デスクトップ サービス]>[リモート デスクトップ セッション ホスト]>[デバイスとリソースのリダイレクト] でグループ ポリシーを使用するか、またはサーバー マネージャーで [セッション コレクション] プロパティ ボックスを使用します。

一般に、デバイス リダイレクトでは、クライアント コンピューター上のデバイスとサーバー セッションで実行されるプロセスの間でデータが交換されるため、RD セッション ホスト サーバー接続で使用されるネットワーク帯域幅の量が増加します。 この増加の程度は、サーバーで稼働するアプリケーションがリダイレクト対象のデバイスに対して操作を実行する頻度と相関しています。

プリンターのリダイレクトやプラグ アンド プレイ デバイスのリダイレクトでも、サインイン時の CPU 使用率が増加します。 プリンターをリダイレクトする方法には次の 2 つがあります。

  • 一致するプリンター ドライバーに基づくリダイレクト (プリンターのドライバーをサーバーにインストールする必要がある場合)。 これは以前のリリースの Windows Server で使用されていた方法です。

  • Windows Server 2008 で導入された Easy Print プリンター ドライバー リダイレクトでは、すべてのプリンターに共通のプリンター ドライバーが使用されます。

接続時のプリンター インストールで使用される CPU が少ない Easy Print の方法をお勧めします。 一致するドライバーに基づく方法では、スプーラー サービスで複数のドライバーを読み込む必要があるため、CPU 使用率が高くなります。 帯域幅の使用については、Easy Print ではネットワーク帯域幅の使用量がわずかに増加しますが、その他のパフォーマンス、管理性、信頼性のメリットを相殺するほどではありません。

オーディオをリダイレクトすると、ネットワーク トラフィックのストリームが安定します。 また、オーディオのリダイレクトを使用すると、一般に CPU を多く消費するマルチメディア アプリケーションをユーザーが実行できるようになります。

クライアント エクスペリエンスの設定

リモート デスクトップ接続 (RDC) では、既定で、サーバー コンピューターとクライアント コンピューター間のネットワーク接続の適合性に基づいて、適切なエクスペリエンス設定が自動的に選択されます。 RDC 構成の設定は、[接続品質の自動検出] のままにすることをお勧めします。

RDC では、上級ユーザー向けに、リモート デスクトップ サービス接続のネットワーク帯域幅のパフォーマンスに影響する一連の設定を制御できるようになっています。 次の設定には、[リモート デスクトップ接続] の [エクスペリエンス] タブを使用するか、または RDP ファイルの設定としてアクセスできます。

次の設定は、どのコンピューターに接続するときにも適用されます。

  • 壁紙の表示を無効にする (Disable wallpaper:i:0): リダイレクトされた接続でデスクトップの壁紙が表示されないようにします。 デスクトップの壁紙が画像や描画コストの高いその他のコンテンツで構成されている場合は、この設定によって帯域幅使用量を大幅に削減できます。

  • ビットマップ キャッシュ (Bitmapcachepersistenable:i:1): この設定を有効にすると、セッションでレンダリングされるビットマップのキャッシュがクライアント側で作成されます。 これにより帯域幅使用量が大幅に削減されるため、(セキュリティに関する考慮事項が他になければ) この設定は常に有効にする必要があります。

  • ドラッグ中にウィンドウの内容を表示する (Disable full window drag:i:1): この設定を無効にすると、ウィンドウをドラッグしたときに全コンテンツではなくウィンドウ枠のみが表示されるようになって帯域幅が削減されます。

  • メニューとウィンドウ アニメーション (Disable menu anims:i:1 および Disable cursor setting:i:1): これらの設定を無効にすると、メニューのアニメーション (フェードなど) とカーソルが無効になって帯域幅が削減されます。

  • フォント スムージング (Allow font smoothing:i:0): ClearType フォント レンダリングのサポートが制御されます。 Windows 8 または Windows Server 2012 以上を実行しているコンピューターに接続している場合は、この設定を有効または無効にしても、帯域幅の使用量には大きく影響しません。 一方、Windows 7 および Windows 2008 R2 より前のバージョンを実行しているコンピューターでは、この設定を有効にすると、ネットワーク帯域幅の消費量に大きく影響します。

次の設定は、Windows 7 以前のバージョンのオペレーティング システムを実行しているコンピューターに接続する場合にのみ適用されます。

  • デスクトップ コンポジション: この設定は、Windows 7 または Windows Server 2008 R2 を実行しているコンピューターとのリモート セッションでのみサポートされます。

  • 視覚スタイル (disable themes:i:1): この設定を無効にすると、クラシック テーマを使用するテーマの描画が簡略化されて帯域幅が削減されます。

[リモート デスクトップ接続] の [エクスペリエンス] タブを使用する場合は、ネットワーク帯域幅のパフォーマンスに影響する接続速度を選択できます。 接続速度を構成するためのオプションを次に示します。

  • 接続品質の自動検出 (Connection type:i:7): この設定を有効にすると、リモート デスクトップ接続で、接続品質に基づいてユーザー エクスペリエンスを最適化する設定が自動的に選択されます (この構成は、Windows 8 または Windows Server 2012 以上を実行しているコンピューターに接続する場合にお勧めします)。

  • モデム (56 kbps) (Connection type:i:1): この設定では、[ビットマップのキャッシュを保持] が有効になります。

  • 低速ブロードバンド (256 kbps - 2 Mbps) (Connection type:i:2): この設定では、[ビットマップのキャッシュを保持] と [視覚スタイル] が有効になります。

  • 携帯電話/衛星 (2 Mbps -16 Mbps、高レイテンシ) (Connection type:i:3): この設定では、[デスクトップ コンポジション]、[ビットマップのキャッシュを保持]、[視覚スタイル]、[デスクトップの背景] が有効になります。

  • 高速ブロードバンド (2 Mbps - 10 Mbps) (Connection type:i:4): この設定では、[デスクトップ コンポジション]、[ドラッグ中にウィンドウの内容を表示]、[メニューとウィンドウ アニメーション]、[ビットマップのキャッシュを保持]、[視覚スタイル]、[デスクトップの背景] が有効になります。

  • WAN (10 Mbps 以上、高レイテンシ) (Connection type:i:5): この設定では、[デスクトップ コンポジション]、[ドラッグ中にウィンドウの内容を表示]、[メニューとウィンドウ アニメーション]、[ビットマップのキャッシュを保持]、[視覚スタイル]、[デスクトップの背景] が有効になります。

  • LAN (10 Mbps 以上) (Connection type:i:6): この設定では、[デスクトップ コンポジション]、[ドラッグ中にウィンドウの内容を表示]、[メニューとウィンドウ アニメーション]、[ビットマップのキャッシュを保持]、[テーマ]、[デスクトップの背景] が有効になります。

デスクトップのサイズ

リモート セッションのデスクトップ サイズは、[リモート デスクトップ接続] の[画面] タブを使用するか、RDP 構成ファイル (desktopwidth:i:1152 と desktopheight:i:864) を使用して制御できます。 デスクトップ サイズが大きいほど、対象のセッションに関連するメモリと帯域幅の消費量は大きくなります。 現在の最大デスクトップ サイズは 4096 x 2048 です。