次の方法で共有


プロセッサ数の変更

動的にパーティション分割可能なサーバーでは、いつでもハードウェア区画にプロセッサーを追加できます。 したがって、ハードウェア区画内のアクティブ・プロセッサーの数、プロセッサー・アフィニティー値、または各アクティブ・プロセッサーに割り当てられるプロセッサー番号については、いかなる仮定も行わないでください。 プロセッサー・アフィニティー値に設定されたビットは、ハードウェア区画内で現在アクティブな各プロセッサーを表します。 設定される特定のビットは、ハードウェア パーティションにプロセッサを追加すると変更されます。

以下のいずれかのステートメントがデバイス・ドライバーに当てはまる場合は、プロセッサーがハードウェア区画に動的に追加されたときに、動的に区画化可能なサーバー上で正しく機能するように、ドライバーを更新する必要があります。

  • デバイス ドライバーは、ハードウェア パーティション内のアクティブなプロセッサの数を使用して、割り当てるメモリの量、作成するスレッドの数、使用するその他のリソースの量など、使用するリソースの量を決定します。 この状況では、プロセッサーがハードウェア区画に動的に追加されると、デバイス・ドライバーのリソース割り振りが正しくなくなります。 これは、ドライバーのパフォーマンスや動作に悪影響を与える可能性があります。

  • デバイス ドライバーは、プロセッサ アフィニティ値のビットをウォークします。 この状況では、デバイス・ドライバーは、プロセッサー・アフィニティー値に対する動的な変更を処理できない場合、または設定されているビット・シーケンスのギャップを処理できない場合、正しく機能しない可能性があります。

  • デバイス ドライバーは、プロセッサ アフィニティ値のビットを使用して、ドライバーが割り当てたリソースを特定のプロセッサに割り当てます。 この状況では、プロセッサーがハードウェア区画に動的に追加されると、デバイス・ドライバーのリソース割り当ては正しくありません。 これは、ドライバーのパフォーマンスや動作に悪影響を与える可能性があります。

  • デバイス・ドライバーは、ハードウェア区画内のアクティブ・プロセッサーごとにデータ構造を割り振ります。 この状況では、デバイス ドライバーは、ハードウェア パーティションに動的に追加されたプロセッサのこれらのデータ構造にアクセスしようとすると、有害な動作、データの破損、またはバグ チェックが発生する可能性があります。

  • デバイス・ドライバーのディスパッチ・ルーチンは、実行されているプロセッサーのプロセッサー番号を使用して、その特定のプロセッサーに割り当てられているデータ構造またはその他のリソースにアクセスします。 この状況では、デバイス ドライバーのディスパッチ ルーチンは、ハードウェア パーティションに動的に追加されたプロセッサのこれらのリソースにアクセスしようとすると、有害な動作、データの破損、またはバグ チェックが発生する可能性があります。

  • デバイス ドライバーは、割り込みサービス ルーチン (ISR)、遅延プロシージャ呼び出し (DPC)、または特定のプロセッサ上の他のスレッドをスケジュールします。 この状況では、ハードウェア区画にプロセッサーを追加すると、デバイス・ドライバーが正しく機能しなくなり、デバイス・ドライバーが新しいプロセッサーを完全に使用できなくなります。

  • デバイス ドライバーは、リソースの再調整をサポートしていません。 この状況では、デバイス ドライバーは、割り込みを処理するためにハードウェア パーティションに追加された新しいプロセッサを使用できません。

  • デバイス・ドライバーは、ロード・バランシング・アルゴリズムを使用して、入出力要求の処理を複数のプロセッサーに分散します。 この状況では、ハードウェア区画にプロセッサーを追加すると、デバイス・ドライバーが正しく機能しなくなり、デバイス・ドライバーが新しいプロセッサーを完全に使用できなくなります。

デバイス ドライバーがアクティブなプロセッサの数の変更によって影響を受ける場合は、ハードウェア パーティションにプロセッサを追加したときに通知を受け取るために、オペレーティング システムに自身を登録する必要があります。 デバイスドライバに通知されると、安全で最適な動作のために必要に応じて応答できます。 デバイス ドライバーがオペレーティング システムに自身を登録する方法の詳細については、「ドライバー通知」を参照してください

ハードウェア パーティション内のアクティブなプロセッサの現在の数を取得するには、デバイス ドライバーは KeQueryActiveProcessorCount 関数を呼び出す必要があります。 現在のプロセッサ アフィニティ値を取得するために、デバイス ドライバーはKeQueryActiveProcessors 関数または KeQueryActiveProcessorCount関数を呼び出すことができます。

デバイス・ドライバーがハードウェア・パーティション内のアクティブ・プロセッサーごとにデータ構造を割り振り、新しいプロセッサーのデータ構造のメモリー割り振りが失敗した場合にデバイス・ドライバーが失敗する場合、デバイス・ドライバーは、オペレーティング・システムがサポートする最大数のプロセッサーを処理するために、ドライバーの初期化中にこれらのデータ構造を十分に割り振ることができます。 この状況では、ハードウェア パーティションに新しいプロセッサを追加するときに、デバイス ドライバーは新しいデータ構造を割り当てる必要はありません。 ただし、これらのデータ構造のサイズがかなり小さくない限り、これはメモリ リソースの非効率的な使用になる可能性があります。 デバイス ドライバーは、KeQueryMaximumProcessorCount 関数を呼び出すことによって、オペレーティング システムがサポートするプロセッサの最大数を照会できます。

重要: デバイス ドライバーは、ハードウェア パーティションにプロセッサを追加したことを通知されたときに、アクティブなプロセッサの数とプロセッサ アフィニティの保存された値を常に更新する必要があります。

重要: デバイス ドライバーは、ハードウェア パーティション内のアクティブなプロセッサの数を決定するプロセッサ アフィニティ値のセット ビットの数をカウントしないでください。 この目的のために、デバイス ドライバーは KeQueryActiveProcessorCount関数を呼び出すことをお勧めします。 この関数は、アクティブなプロセッサの数と、関連するプロセッサ アフィニティ値の両方を返します。

重要Windows Vista、Windows Server 2008、およびそれ以降のバージョンの Windows 用にビルドされたデバイス ドライバーでは、KeNumberProcessorsカーネル変数を使用して、ハードウェア パーティション内のアクティブなプロセッサの数を決定しないでください。 KeNumberProcessorsカーネル変数は、Windows Vista Service Pack 1 (SP1)、Windows Server 2008、およびそれ以降のバージョンの Windows では廃止されています。