

# Windows インスタンスでの PV ドライバーのトラブルシューティング
<a name="pvdrivers-troubleshooting"></a>

以下は、古い Amazon EC2 イメージと PV ドライバで発生する可能性のある問題の解決策です。

**Topics**
+ [Windows Server 2012 R2 でインスタンスの再起動後にネットワークおよびストレージとの接続が失われる](#server2012R2-instance-unavailable)
+ [TCP オフロード](#citrix-tcp-offloading)
+ [時刻同期](#citrix-time-sync)
+ [20,000 以上のディスク IOPS を使用するワークロードでは、CPU のボトルネックによりパフォーマンスが低下します](#pvdriver-troubleshooting-cpu-bottlenecks)

## Windows Server 2012 R2 でインスタンスの再起動後にネットワークおよびストレージとの接続が失われる
<a name="server2012R2-instance-unavailable"></a>

**重要**  
この問題は、2014 年 9 月より前に利用可能になった AMI でのみ発生します。

2014 年 9 月 10 日より前に使用可能になった Windows Server 2012 R2 Amazon Machine Image (AMI) では、インスタンスの再起動後にネットワークおよびストレージとの接続が失われることがあります。AWS マネジメントコンソール のシステムログに 「Difficulty detecting PV driver details for Console Output「 というエラーが見つかります。この接続損失は、プラグアンドプレイクリーンアップ機能によって発生します。これは、30 日ごとに非アクティブなシステムデバイスをスキャンして無効にする機能です。この機能は EC2 ネットワークデバイスを非アクティブと誤認して、システムから削除します。この状況になると、インスタンスの再起動後にネットワーク接続が失われます。

この問題の影響を受ける可能性のあるシステムに対して、インプレースドライバーアップグレードをダウンロードして実行できます。インプレースドライバーアップグレードを実行できない場合は、ヘルパースクリプトを実行できます。スクリプトはインスタンスがこの問題の影響を受けているかどうかを調べます。影響を受けていて、Amazon EC2 ネットワークデバイスが削除されていない場合、スクリプトはプラグアンドプレイクリーンアップスキャンを無効にします。ネットワークデバイスが削除されている場合、スクリプトはデバイスを修復し、プラグアンドプレイクリーンアップスキャンを無効にしてから、インスタンスを再起動して、ネットワーク接続を有効にします。

**Topics**
+ [問題の解決方法の選択](#choose-fix)
+ [方法 1 - 拡張ネットワーキング](#plug-n-play-fix-method1)
+ [方法 2 - レジストリ設定](#plug-n-play-fix-method2)
+ [修復スクリプトの実行](#plug-n-play-script)

### 問題の解決方法の選択
<a name="choose-fix"></a>

この問題の影響を受けたインスタンスへのネットワークおよびストレージ接続を復元する方法は 2 つあります。次のいずれかの方法を選択してください。


| 方法 | 前提条件 | 手順概要 | 
| --- | --- | --- | 
| 方法 1 - 拡張ネットワーキング | 拡張ネットワーキングは、C3 インスタンスタイプを必要とする Virtual Private Cloud (VPC) でのみ利用できます。サーバーが現在 C3 インスタンスタイプを使用していない場合は、一時的に変更する必要があります。 | サーバーインスタンスタイプを C3 インスタンスに変更します。拡張ネットワーキングにより、影響を受けたインスタンスに接続して問題を修正できるようになります。問題を修正した後、インスタンスを元のインスタンスタイプに戻します。この方法は、通常は方法 2 よりすぐに終わり、ユーザーエラーが発生する可能性が低くなります。C3 インスタンスが実行されている限り追加料金が発生します。 | 
| 方法 2 - レジストリ設定 | 2 番目のサーバーを作成したりアクセスしたりする知識。レジストリ設定を変更する知識。 | 影響を受けたインスタンスからルートボリュームをデタッチして別のインスタンスにアタッチし、接続してレジストリに変更を加えます。追加のサーバーが実行されている限り追加料金が発生します。この方法は、方法 1 より時間がかかりますが、この方法は方法 1 で問題が解決されない場合も効果がありました。 | 

### 方法 1 - 拡張ネットワーキング
<a name="plug-n-play-fix-method1"></a>

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、[**インスタンス**] を選択してください。

1. 影響のあるインスタンスを特定します。インスタンスを選択し、[**インスタンスの状態**] をクリックし、[**インスタンスの停止**] を選択してください。
**警告**  
インスタンスストアボリューム上のデータは、インスタンスを停止すると失われます。このデータを保持するには、永続ストレージにバックアップしてください。

1. インスタンスの停止後、バックアップを作成します。インスタンスを選択し、[**アクション**]、[**イメージとテンプレート**] の順に選択し、[**イメージの作成**] をクリックしてください。

1. インスタンスタイプを C3 インスタンスタイプに[変更](ec2-instance-resize.md)します。

1. インスタンスを[起動](Stop_Start.md)します。

1. リモートデスクトップを使用してインスタンスに接続し、AWS PV ドライバーアップグレードパッケージをインスタンスに[ダウンロード](https://s3.amazonaws.com/ec2-windows-drivers-downloads/AWSPV/Latest/AWSPVDriver.zip)します。

1. フォルダの内容を抽出し、`AWSPVDriverSetup.msi` を実行します。

   MSI の実行後、インスタンスは自動的に再起動され、ドライバーがアップグレードされます。インスタンスは最大 15 分間、使用できなくなります。

1. アップグレードが完了し、インスタンスが Amazon EC2 コンソールの両方のヘルスチェックに合格した後、リモートデスクトップを使用してインスタンスに接続し、新しいドライバーがインストールされたことを確認します。デバイスマネージャーの [**Storage Controllers**] で、[**AWS PV Storage Host Adapter**] を見つけます。ドライバーバージョンがドライバーのバージョン履歴の表に掲載されている最新バージョンと同じであることを確認します。詳細については、「[AWS PV ドライバーパッケージの履歴](xen-drivers-overview.md#pv-driver-history)」を参照してください。

1. インスタンスを停止し、インスタンスを元のインスタンスタイプに戻します。

1. インスタンスを起動し、標準の使用を再開します。

### 方法 2 - レジストリ設定
<a name="plug-n-play-fix-method2"></a>

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、[**インスタンス**] を選択してください。

1. 影響のあるインスタンスを特定します。インスタンスを選択し、[**インスタンスの状態**]、[**インスタンスの停止**] の順に選択してください。
**警告**  
インスタンスストアボリューム上のデータは、インスタンスを停止すると失われます。このデータを保持するには、永続ストレージにバックアップしてください。

1. [**インスタンスの起動**] を選択し、影響のあるインスタンスと同じアベイラビリティーゾーンに Windows Server 2008 または Windows Server 2012 の一時インスタンスを作成します。Windows Server 2012 R2 インスタンスは作成しないでください。
**重要**  
影響のあるインスタンスと同じアベイラビリティーゾーンにインスタンスを作成しない場合、影響のあるインスタンスのルートボリュームを新しいインスタンスにアタッチできません。

1. ナビゲーションペインの [**ボリューム**] を選択します。

1. 影響のあるインスタンスのルートボリュームを見つけます。ボリュームをデタッチし、先ほど作成した一時インスタンスにボリュームをアタッチします。デフォルトのデバイス名 (xvdf) でアタッチしてください。

1. リモートデスクトップを使用して一時インスタンスに接続したら、Disk Management ユーティリティを使用してボリュームを有効にします。

1. 一時インスタンスで、[**実行**] ダイアログボックスを開き、**regedit** と入力して、Enter キーを押します。

1. レジストリエディターのナビゲーションペインで、[**HKEY\$1Local\$1Machine**] を選択し、[**File**] メニューの [**Load Hive**] を選択してください。

1. [**Load Hive**] ダイアログボックスで、*Affected Volume*\$1Windows\$1System32\$1config\$1System に移動し、[**Key Name**] ダイアログボックスに一時的な名前を入力してください。例えば、OldSysと入力してください。

1. レジストリエディターのナビゲーションペインで、以下のキーを見つけます。

    **HKEY\$1LOCAL\$1MACHINE\$1*your\$1temporary\$1key\$1name*\$1ControlSet001\$1Control\$1Class\$14d36e97d-e325-11ce-bfc1-08002be10318** 

    **HKEY\$1LOCAL\$1MACHINE\$1*your\$1temporary\$1key\$1name*\$1ControlSet001\$1Control\$1Class\$14d36e96a-e325-11ce-bfc1-08002be10318** 

1. キーごとに、[**UpperFilters**] をダブルクリックし、XENFILT の値を入力して、[**OK**] を選択してください。  
![\[影響のあるボリュームのレジストリキー。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/troubleshooting-server2012R2-regedit.png)

1. 以下のキーを見つけます。

    **HKEY\$1LOCAL\$1MACHINE\$1*your\$1temporary\$1key\$1name*\$1ControlSet001\$1Services\$1XENBUS\$1Parameters** 

1. ActiveDevice という名前と以下の値で新しい文字列 (REG\$1SZ) を作成します。

    **PCI\$1VEN\$15853&DEV\$10001&SUBSYS\$100015853&REV\$101** 

1. 以下のキーを見つけます。

    **HKEY\$1LOCAL\$1MACHINE\$1*your\$1temporary\$1key\$1name*\$1ControlSet001\$1Services\$1XENBUS** 

1. [**Count**] を 0 から 1 に変更します。

1. 以下のキーを見つけ、削除します。

    **HKEY\$1LOCAL\$1MACHINE\$1*your\$1temporary\$1key\$1name*\$1ControlSet001\$1Services\$1xenvbd\$1StartOverride** 

    **HKEY\$1LOCAL\$1MACHINE \$1*your\$1temporary\$1key\$1name*\$1ControlSet001\$1Services\$1xenfilt\$1StartOverride** 

1. レジストリエディターのナビゲーションペインで、最初にレジストリエディターを開いたときに作成した一時キーを選択してください。

1. [**File**] メニューの [**Unload Hive**] を選択してください。

1. Disk Management ユーティリティで、先ほどアタッチしたドライブを選択し、右クリックコンテキストメニューを開いて、[**オフライン**] を選択してください。

1. Amazon EC2 コンソールで、影響のあるボリュームを一時インスタンスからデタッチし、/dev/sda1 というデバイス名で Windows Server 2012 R2 インスタンスに再アタッチします。ボリュームをルートボリュームとして指定するには、このデバイス名を指定する必要があります。

1. インスタンスを[起動](Stop_Start.md)します。

1. リモートデスクトップを使用してインスタンスに接続し、AWS PV ドライバーアップグレードパッケージをインスタンスに[ダウンロード](https://s3.amazonaws.com/ec2-windows-drivers-downloads/AWSPV/Latest/AWSPVDriver.zip)します。

1. フォルダの内容を抽出し、`AWSPVDriverSetup.msi` を実行します。

   MSI の実行後、インスタンスは自動的に再起動され、ドライバーがアップグレードされます。インスタンスは最大 15 分間、使用できなくなります。

1. アップグレードが完了し、インスタンスが Amazon EC2 コンソールの両方のヘルスチェックに合格した後、リモートデスクトップを使用してインスタンスに接続し、新しいドライバーがインストールされたことを確認します。デバイスマネージャーの [**Storage Controllers**] で、[**AWS PV Storage Host Adapter**] を見つけます。ドライバーバージョンがドライバーのバージョン履歴の表に掲載されている最新バージョンと同じであることを確認します。詳細については、「[AWS PV ドライバーパッケージの履歴](xen-drivers-overview.md#pv-driver-history)」を参照してください。

1. この手順で作成した一時インスタンスを削除するか停止します。

### 修復スクリプトの実行
<a name="plug-n-play-script"></a>

インプレースドライバアップグレードを実行できないか、新しいインスタンスに移行できない場合は、修正スクリプトを実行して、プラグアンドプレイクリーンアップタスクによって発生する問題を修正できます。

**修復スクリプトを実行するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、[**インスタンス**] を選択してください。

1. 修復スクリプトを実行するインスタンスを選択してください。[**インスタンスの状態**] を選択し、[**インスタンスの停止 **] をクリックしてください。
**警告**  
インスタンスストアボリューム上のデータは、インスタンスを停止すると失われます。このデータを保持するには、永続ストレージにバックアップしてください。

1. インスタンスの停止後、バックアップを作成します。インスタンスを選択し、[**アクション**]、[**イメージとテンプレート**] の順に選択し、[**イメージの作成**] をクリックしてください。

1. [**インスタンスの状態**] を選択し、[**インスタンスの起動**] をクリックしてください。

1. リモートデスクトップを使用してインスタンスに接続し、RemediateDriverIssue.zip フォルダをそのインスタンスに[ダウンロード](https://s3.amazonaws.com/ec2-downloads-windows/Scripts/RemediateDriverIssue.zip)します。

1. フォルダの内容を展開します。

1. Readme.txt ファイルの指示に従って、修復スクリプトを実行します。このファイルは、RemediateDriverIssue.zip を抽出したフォルダにあります。

## TCP オフロード
<a name="citrix-tcp-offloading"></a>

**重要**  
この問題は、AWS PV または Intel ネットワークドライバーを実行しているインスタンスには該当しません。

Windows AMI の Citrix PV ドライバーでは、TCP オフロードがデフォルトで有効になっています。例えば、特定の SQL ワークロードを実行しているときに、トランスポートレベルのエラーまたはパケット送信エラー (Windows パフォーマンス モニターで表示される) が発生した場合、この機能を無効にすることが必要になる場合があります。

**警告**  
TCP オフロードを無効にすると、インスタンスのネットワークパフォーマンスが低下することがあります。

**Windows Server 2012 および 2008 の TCP オフロードを無効にするには**

1. インスタンスに接続してローカル管理者としてログインします。

1. Windows Server 2012 を使用している場合は、[**Ctrl\$1Esc**] を押して [**スタート**] 画面にアクセスし、[**コントロールパネル**] を選択してください。Windows Server 2008 を使用している場合は、[**スタート**]、[**コントロールパネル**] の順に選択してください。

1. [**Network and Internet**] (ネットワークとインターネット)、[**Network and Sharing Center**] (ネットワークと共有センター) の順に選択してください。

1. [**Change adapter settings**] (アダプター設定の変更) を選択してください。

1. [**Citrix PV Ethernet Adapter \$10**] を右クリックし、[**プロパティ**] を選択してください。  
![\[ローカルエリアの接続プロパティ。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/citrix-local-area-conn.png)

1. [**Local Area Connection Properties**] (ローカルエリア接続のプロパティ) ダイアログボックスで [**設定**] を選択すると、[**Citrix PV Ethernet Adapter \$10 Properties**] ダイアログボックスが開きます。

1. [**Advanced**] (詳細) タブでプロパティをひとつずつ無効にします。ただし、[**Correct TCP/UDP Checksum Value**] は除きます。プロパティを無効にするには、[**プロパティ**] で選択してから、[**値**] の [**無効**] を選択してください。

1. [**OK**] を選択してください。

1. コマンドプロンプトウィンドウから次のコマンドを実行します。

   ```
   netsh int ip set global taskoffload=disabled
   netsh int tcp set global chimney=disabled
   netsh int tcp set global rss=disabled
   netsh int tcp set global netdma=disabled
   ```

1. インスタンスを再起動します。

## 時刻同期
<a name="citrix-time-sync"></a>

2013.02.13 の Windows AMI のリリース以前、Citrix Xen ゲストエージェントでシステム時刻が誤って設定される場合がありました。これにより、DHCP リースが有効期限切れになる可能性があります。インスタンスに接続できない問題が発生している場合、エージェントの更新が必要である可能性があります。

更新された Citrix Xen ゲストエージェントがあるかどうかを判断するには、`C:\Program Files\Citrix\XenGuestAgent.exe` ファイルが 2013 年 3 月のものであるかどうかを確認します。このファイルの日付がこれよりも前である場合は、Citrix Xen ゲストエージェントサービスを更新してください。詳細については、「[Citrix Xen ゲストエージェントサービスのアップグレード](Upgrading_PV_drivers.md#citrix-pv-guest-agent-upgrade)」を参照してください。

## 20,000 以上のディスク IOPS を使用するワークロードでは、CPU のボトルネックによりパフォーマンスが低下します
<a name="pvdriver-troubleshooting-cpu-bottlenecks"></a>

この問題の影響を受けるのは、20,000 超の IOPS を利用する AWS PV ドライバーを実行している Windows インスタンスを使用しており、バグチェックコード `0x9E: USER_MODE_HEALTH_MONITOR` が発生した場合です。

AWS PV ドライバーでのディスクの読み取りと書き込み (IO) は、次の 2 つのフェーズで行われます: **IO の準備**および **IO の完了**です。デフォルトでは、準備フェーズは単一の任意のコアで実行されます。完了フェーズはコア `0` で実行されます。IO の処理に必要な計算量は、そのサイズやその他のプロパティによって異なります。準備フェーズでより多くの計算を使用する IO もあれば、完了フェーズで多くの計算を使用する IO もあります。インスタンスが 20,000 IOPS 以上の場合、準備フェーズまたは完了フェーズでボトルネックが発生し、インスタンスを実行する CPU の容量が 100% になる可能性があります。準備フェーズまたは完了フェーズがボトルネックになるかどうかは、アプリケーションが使用する IO のプロパティによって異なります。

AWS PV ドライバー 8.4.0 以降、準備フェーズと完了フェーズの負荷を複数のコアに分散し、ボトルネックを排除できます。各アプリケーションは、異なる IO プロパティを使用します。したがって、次の設定のいずれかを適用することで、アプリケーションのパフォーマンスを向上、低下させたり、または影響しないようにすることができます。これらの設定のいずれかを適用したら、アプリケーションを監視して、目的のパフォーマンスを満たしていることを確認します。

1. 

**前提条件**

   このトラブルシューティング手順を開始する前に、以下の前提条件を確認してください。
   + インスタンスで AWS PV ドライバーのバージョン 8.4.0 以降を使用しています。アップグレードするには、[EC2 Windows インスタンスでの PV ドライバーのアップグレード](Upgrading_PV_drivers.md)を参照してください。
   + インスタンスへの RDP アクセス権があります。RDP を使用して Windows インスタンスに接続する手順については、[RDP クライアントを使用して Windows インスタンスに接続する](connect-rdp.md)を参照してください。
   + インスタンスに対する管理者アクセス権があります。

1. 

**インスタンスの CPU 負荷を監視する**

   Windows タスクマネージャーを使用して、各 CPU の負荷を表示し、ディスク IO の潜在的なボトルネックを特定できます。

   1. アプリケーションが実行中で、本番ワークロードと同様のトラフィックを処理していることを確認します。

   1. RDP を使用してインスタンスに接続します。

   1. インスタンスで [**スタート**] メニューを選択してください。

   1. [**スタート**] メニュー の `Task Manager` で、タスクマネージャーを開きます。

   1. タスクマネージャーに概要ビューが表示される場合は、[**詳細**] を選択して詳細ビューを展開します。

   1. [**パフォーマンス**] タブを選択してください。

   1. 左ペインの **CPU** を選択してください。

   1. メインペインでグラフを右クリックし、**グラフをに変更する**、**論理プロセッサ**の順に選択して、個々のコアを表示します。

   1. インスタンスにあるコアの数により、時間の経過に伴い CPU 負荷の詳細が表示される場合と、数字のみが表示される場合があります。
      + 時間の経過に伴う負荷を示すグラフが表示される場合は、ボックスがほぼ完全に網掛けされている CPU を探します。
      + 各コアに数字が表示されている場合は、一貫して 95% 以上を示すコアを探します。

   1. コア `0` または別のコアで、高い負荷がかかっているかどうかに注意してください。

1. 

**適用する設定を選択する**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/pvdrivers-troubleshooting.html)
**注記**  
IO の準備を分散せずに、IO の完了も分散しないことをお勧めします (`NotifierDistributed` を設定せずに `DpcRedirection` を設定します)。準備フェーズが並行して動作している場合、完了フェーズは準備フェーズによる過負荷に敏感になるためです。

**レジストリキーの値**
   + *NotifierDistributed*

     値 `0` または存在しない — 完了フェーズはコア `0` で実行されます。

     値 `1` — ドライバーは、接続されたディスクごとに、完了フェーズ、コア `0`、追加されたもう 1 つのコアのいずれかの実行を選択してください。

     値 `2` — ドライバーは、接続されたディスクごとに、追加された 1 つのコアで完了フェーズを実行します。
   + *DpcRedirection*

     値 `0` または存在しない — 準備フェーズは、単一の任意のコアで実行されます。

     値 `1` — 準備フェーズは、複数のコアに分散されます。

   

   

**デフォルト設定**

   AWS PV ドライバーのバージョンが 8.4.0 以前であるか、このセクションの他のいずれかの設定を適用した後にパフォーマンスまたは安定性の低下が見られる場合は、デフォルト設定を適用します。

   1. RDP を使用してインスタンスに接続します。

   1. 管理者として新しい PowerShell コマンドプロンプトを開きます。

   1. 以下のコマンドを実行して、`NotifierDistributed` および `DpcRedirection` レジストリキーを削除します。

      ```
      Remove-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\xenvbd\Parameters -Name NotifierDistributed
      ```

      ```
      Remove-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\xenvbd\Parameters -Name DpcRedirection
      ```

   1. インスタンスを再起動します。

   

   

**完了を分散するかどうかをドライバーが選択できるようにする**

   `NotiferDistributed` レジストリキーを設定して、PV ストレージドライバーが IO の完了を分散するかどうかを選択できるようにします。

   1. RDP を使用してインスタンスに接続します。

   1. 管理者として新しい PowerShell コマンドプロンプトを開きます。

   1. 以下のコマンドを実行して `NotiferDistributed` レジストリキーを設定します。

      ```
      Set-ItemProperty -Type DWORD -Path HKLM:\System\CurrentControlSet\Services\xenvbd\Parameters -Value 0x00000001 -Name NotifierDistributed
      ```

   1. インスタンスを再起動します。

   

   

**準備と完了の両方を分散する**

   `NotifierDistributed` および `DpcRedirection` レジストリキーを設定して、準備フェーズと完了フェーズの両方を常に分散します。

   1. RDP を使用してインスタンスに接続します。

   1. 管理者として新しい PowerShell コマンドプロンプトを開きます。

   1. 以下のコマンドを実行して、`NotifierDistributed` および `DpcRedirection` レジストリキーを設定します。

      ```
      Set-ItemProperty -Type DWORD -Path HKLM:\System\CurrentControlSet\Services\xenvbd\Parameters -Value 0x00000002 -Name NotifierDistributed
      ```

      ```
      Set-ItemProperty -Type DWORD -Path HKLM:\System\CurrentControlSet\Services\xenvbd\Parameters -Value 0x00000001 -Name DpcRedirection
      ```

   1. インスタンスを再起動します。